All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Mack <zonque@gmail.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Oliver Neukum <oliver@neukum.org>, Aaron Lu <aaron.lu@intel.com>,
	"James E.J. Bottomley" <JBottomley@parallels.com>,
	linux-scsi@vger.kernel.org,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	Sven Neumann <s.neumann@raumfeld.com>
Subject: Re: Suspend issues with a LaCie USB hard disk connected
Date: Wed, 15 Jan 2014 18:29:28 +0100	[thread overview]
Message-ID: <52D6C578.5050701@gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1401151215420.1587-100000@iolanthe.rowland.org>

Hi Alan,

On 01/15/2014 06:19 PM, Alan Stern wrote:
> On Wed, 15 Jan 2014, Daniel Mack wrote:
> 
>> Hi,
>>
>> Sorry for the long, primarily holiday-related delay on this.
>>
>> On 12/18/2013 09:46 PM, Alan Stern wrote:
>>> On Wed, 18 Dec 2013, Daniel Mack wrote:
>>>> I'm facing an issue putting an embedded system to sleep while a Lacie
>>>> external USB hard disk is connected. Relevant kernel messages that occur
>>>> at the attempt are:
>>>>
>>>> [   13.834731] PM: Sending message for entering DeepSleep mode
>>>> [   13.846575] sd 0:0:0:0: [sda] Synchronizing SCSI cache
>>>> [   13.858818] sd 0:0:0:0: [sda]
>>>> [   13.862432] Result: hostbyte=0x00 driverbyte=0x08
>>>> [   13.867349] sd 0:0:0:0: [sda]
>>>> [   13.870626] Sense Key : 0x5 [current]
>>>> [   13.874602] sd 0:0:0:0: [sda]
>>>> [   13.877879] ASC=0x20 ASCQ=0x0
>>>> [   13.885053] dpm_run_callback(): scsi_bus_suspend+0x0/0x20 returns -5
>>>> [   13.901130] PM: Device 0:0:0:0 failed to suspend async: error -5
>>>> [   13.907507] PM: Some devices failed to suspend, or early wake event
>>>> detected
>>>>
>>>> What happens is that in sd_sync_cache(), scsi_execute_req_flags()
>>>> returns 0x08000002, so driver_byte(res) evaluates to DRIVER_SENSE and
>>>> host_byte(res) is DID_OK, which is an unhandled case that leads to -EIO
>>>> eventually.
>>>>
>>>> I have admittedly not much clue about the SCSI layer, so I wonder what
>>>> would be the best way to fix this. Should DID_OK just be handled as
>>>> non-error condition in the switch? Should the suspend call chain ignore
>>>> such errors from sd_sync_cache()?
>>>>
>>>> I'm open to suggestions and happy to test patches.
>>>
>>> The Sense Key and ASC values indicate that the drive did not understand
>>> the SYNCHRONIZE CACHE command.  A usbmon trace would verify this; see
>>> the instructions in Documentation/usb/usbmon.txt.
>>>
>>> Assuming that really is what happened, we have to decide how to handle 
>>> the situation.
>>
>> Ok, this is the usbmon trace that I captured when the system goes to
>> suspend with the USB storage media connected but unmounted:
>>
>> cebe5e00 3629314504 S Bo:1:003:2 -115 31 = 55534243 10000000 00000000
>> 00000a35 00000000 00000000 00000000 000000
>> cebe5e00 3629315214 C Bo:1:003:2 0 31 >
>> cebe5e00 3629315413 S Bi:1:003:1 -115 13 <
>> cebe5e00 3629315492 C Bi:1:003:1 0 13 = 55534253 10000000 00000000 01
> 
> That's the SYNCHRONIZE CACHE command, with an error return status.
> 
>> cebe5e00 3629315571 S Bo:1:003:2 -115 31 = 55534243 11000000 12000000
>> 80000603 00000012 00000000 00000000 000000
>> cebe5e00 3629315606 C Bo:1:003:2 0 31 >
>> cecd4580 3629315681 S Bi:1:003:1 -115 18 <
>> cecd4580 3629315744 C Bi:1:003:1 0 18 = 70000500 0000000a 00000000
>> 20000000 0000
>> cebe5e00 3629315772 S Bi:1:003:1 -115 13 <
>> cebe5e00 3629315817 C Bi:1:003:1 0 13 = 55534253 11000000 00000000 00
> 
> And that's the sense data, confirming SK=5 and ASC=20.  This means the 
> drive doesn't understand the command.

Ok.

> There's more stuff later on in the usbmon trace that I don't 
> understand.  But if everything else works okay, it won't matter.

The host controller tried to reset the port and the device, whatever
that results in. You're right, that is unrelated.

> I don't think that is the right thing to do.  Try this patch instead.

[...]

> Index: usb-3.13/drivers/scsi/sd.c
> ===================================================================
> --- usb-3.13.orig/drivers/scsi/sd.c
> +++ usb-3.13/drivers/scsi/sd.c
> @@ -1463,8 +1463,8 @@ static int sd_sync_cache(struct scsi_dis
>  			sd_print_sense_hdr(sdkp, &sshdr);
>  		/* we need to evaluate the error return  */
>  		if (scsi_sense_valid(&sshdr) &&
> -			/* 0x3a is medium not present */
> -			sshdr.asc == 0x3a)
> +			(sshdr.asc == 0x3a ||	/* medium not present */
> +			 sshdr.asc == 0x20))	/* invalid command */
>  				/* this is no error here */
>  				return 0;
>  

That seems to work equally well for me, thanks!

Feel free to add when submitting:

  Reported-by: Sven Neumann <s.neumann@raumfeld.com>
  Tested-by: Daniel Mack <zonque@gmail.com>


Thanks for your help!
Daniel

      reply	other threads:[~2014-01-15 17:29 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-18 16:22 Suspend issues with a LaCie USB hard disk connected Daniel Mack
     [not found] ` <52B1CBDC.1070203-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-12-18 20:46   ` Alan Stern
     [not found]     ` <Pine.LNX.4.44L0.1312181542280.1029-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2014-01-15 10:58       ` Daniel Mack
     [not found]         ` <52D669EF.30405-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-01-15 17:19           ` Alan Stern
2014-01-15 17:29             ` Daniel Mack [this message]

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=52D6C578.5050701@gmail.com \
    --to=zonque@gmail.com \
    --cc=JBottomley@parallels.com \
    --cc=aaron.lu@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=oliver@neukum.org \
    --cc=s.neumann@raumfeld.com \
    --cc=stern@rowland.harvard.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.