public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Seth Forshee <seth.forshee@canonical.com>
To: Tejun Heo <tj@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
	linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-usb@vger.kernel.org, Oleg Nesterov <oleg@redhat.com>,
	Alan Stern <stern@rowland.harvard.edu>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: Re: [PATCH pm 1/2] usb_storage: don't use set_freezable_with_signal()
Date: Tue, 1 Nov 2011 12:40:10 -0400	[thread overview]
Message-ID: <20111101164010.GA19686@thinkpad-t410> (raw)
In-Reply-To: <20111101003726.GM18855@google.com>

On Mon, Oct 31, 2011 at 05:37:26PM -0700, Tejun Heo wrote:
> The current implementation of set_freezable_with_signal() is buggy and
> tricky to get right.  usb-storage is the only user and its use can be
> avoided trivially.
> 
> All usb-storage wants is to be able to sleep with timeout and get
> woken up if freezing() becomes true.  This can be trivially
> implemented by doing interruptible wait w/ freezing() included in the
> wait condition.  There's no reason to use set_freezable_with_signal().
> 
> Perform interruptible wait on freezing() instead of using
> set_freezable_with_signal(), which is scheduled for removal.
> 
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
> Cc: Seth Forshee <seth.forshee@canonical.com>
> Cc: Alan Stern <stern@rowland.harvard.edu>
> Cc: Greg Kroah-Hartman <gregkh@suse.de>
> ---
> 
> These two patches are on top of "freezer: fix various bugs and
> simplify implementation, take#2" patchset[1] and are also available in
> the following git branch.
> 
>  git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git pm-kill-freezable_with_signal
> 
> If usb-storage ppl are okay with it, I think routing this through pm
> would be the easiest.  Oh, and this definitely is for the next merge
> window.
> 
> Thank you.
> 
> [1] http://thread.gmane.org/gmane.linux.kernel/1209247
> 
>  drivers/usb/storage/usb.c |   13 +++++++------
>  1 files changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
> index c325e69..aa84b3d 100644
> --- a/drivers/usb/storage/usb.c
> +++ b/drivers/usb/storage/usb.c
> @@ -831,7 +831,8 @@ static int usb_stor_scan_thread(void * __us)
>  
>  	dev_dbg(dev, "device found\n");
>  
> -	set_freezable_with_signal();
> +	set_freezable();
> +
>  	/*
>  	 * Wait for the timeout to expire or for a disconnect
>  	 *
> @@ -839,16 +840,16 @@ static int usb_stor_scan_thread(void * __us)
>  	 * fail to freeze, but we can't be non-freezable either. Nor can
>  	 * khubd freeze while waiting for scanning to complete as it may
>  	 * hold the device lock, causing a hang when suspending devices.
> -	 * So we request a fake signal when freezing and use
> -	 * interruptible sleep to kick us out of our wait early when
> -	 * freezing happens.
> +	 * So instead of using wait_event_freezable(), explicitly test
> +	 * for (DONT_SCAN || freezing) in interruptible wait and proceed
> +	 * if any of DONT_SCAN, freezing or timeout has happened.
>  	 */
>  	if (delay_use > 0) {
>  		dev_dbg(dev, "waiting for device to settle "
>  				"before scanning\n");
>  		wait_event_interruptible_timeout(us->delay_wait,
> -				test_bit(US_FLIDX_DONT_SCAN, &us->dflags),
> -				delay_use * HZ);
> +				test_bit(US_FLIDX_DONT_SCAN, &us->dflags) ||
> +				freezing(current), delay_use * HZ);
>  	}
>  
>  	/* If the device is still connected, perform the scanning */

That looks like it ought to work, and it's definitely less convoluted
than what's there now.  I'd be happy to test it next week when I'm back
home and have access to the machine that prompted the original change.

Seth

  parent reply	other threads:[~2011-11-01 16:40 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-01  0:37 [PATCH pm 1/2] usb_storage: don't use set_freezable_with_signal() Tejun Heo
2011-11-01  0:37 ` [PATCH pm 2/2] freezer: kill unused set_freezable_with_signal() Tejun Heo
2011-11-01 16:40 ` Seth Forshee [this message]
2011-11-01 16:43   ` [PATCH pm 1/2] usb_storage: don't use set_freezable_with_signal() Tejun Heo
2011-11-08 23:06     ` Seth Forshee
2011-11-15  1:03 ` Greg KH
2011-11-15 20:34   ` Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111101164010.GA19686@thinkpad-t410 \
    --to=seth.forshee@canonical.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=rjw@sisk.pl \
    --cc=stern@rowland.harvard.edu \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox