linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
@ 2011-09-28 15:42 Amit Sahrawat
  2011-09-28 15:54 ` BUG in kernel: Wrong Handling of USB HDD?s " Christoph Hellwig
  2011-09-28 15:57 ` BUG in kernel: Wrong Handling of USB HDD’s " Amit Sahrawat
  0 siblings, 2 replies; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-28 15:42 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel

When a USB HDD is connected to the device, it invokes slave_configure
to configure the USB HDD. In this function, whenever there is a SCSI
device of type TYPE_DISK, it sets:
	/* A number of devices have problems with MODE SENSE for
		 * page x08, so we will skip it. */
		sdev->skip_ms_page_8 = 1;

Now, as a part of SCSI device probing, in the function
sd_revalidate_disk()-->sd_read_cache_type(), there is a condition
if (sdp->skip_ms_page_8)
		goto defaults;
which becomes always true for all the USB HDD’s – the net result is
that the Write Cache is never considered for USB HDD(WCE = 0) –
“Assuming drive cache: write through”

What’s more – the QUEUE ordering which is marked for WCE=0 is
QUEUE_ORDERED_DRAIN, instead of QUEUE_ORDERED_DRAIN_FLUSH
This means there is no flushing of USB HDD internal cache (although
SYNCHRONIZE_CACHE is implemented as passed as command in
sd_prepare_flush) – queue_flush()(called in function
blk_do_ordered()-->start_ordered()) does not gets called in case of
QUEUE_ORDERED_DRAIN.

This causes a serious impact on USB HDD’s.

Please let me know in case I have missed something in my observations.

Thanks & Regards,
Amit Sahrawat

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD?s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-28 15:42 Amit Sahrawat
@ 2011-09-28 15:54 ` Christoph Hellwig
  2011-09-28 15:57 ` BUG in kernel: Wrong Handling of USB HDD’s " Amit Sahrawat
  1 sibling, 0 replies; 19+ messages in thread
From: Christoph Hellwig @ 2011-09-28 15:54 UTC (permalink / raw)
  To: Amit Sahrawat; +Cc: linux-kernel, linux-fsdevel


You'll have much more luck if you send this to linux-scsi.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-28 15:42 Amit Sahrawat
  2011-09-28 15:54 ` BUG in kernel: Wrong Handling of USB HDD?s " Christoph Hellwig
@ 2011-09-28 15:57 ` Amit Sahrawat
  2011-09-28 21:29   ` James Bottomley
  1 sibling, 1 reply; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-28 15:57 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

Marking mail to linux-scsi.

Thanks Christoph.

Regards,
Amit Sahrawat

On Wed, Sep 28, 2011 at 9:12 PM, Amit Sahrawat
<amit.sahrawat83@gmail.com> wrote:
> When a USB HDD is connected to the device, it invokes slave_configure
> to configure the USB HDD. In this function, whenever there is a SCSI
> device of type TYPE_DISK, it sets:
>        /* A number of devices have problems with MODE SENSE for
>                 * page x08, so we will skip it. */
>                sdev->skip_ms_page_8 = 1;
>
> Now, as a part of SCSI device probing, in the function
> sd_revalidate_disk()-->sd_read_cache_type(), there is a condition
> if (sdp->skip_ms_page_8)
>                goto defaults;
> which becomes always true for all the USB HDD’s – the net result is
> that the Write Cache is never considered for USB HDD(WCE = 0) –
> “Assuming drive cache: write through”
>
> What’s more – the QUEUE ordering which is marked for WCE=0 is
> QUEUE_ORDERED_DRAIN, instead of QUEUE_ORDERED_DRAIN_FLUSH
> This means there is no flushing of USB HDD internal cache (although
> SYNCHRONIZE_CACHE is implemented as passed as command in
> sd_prepare_flush) – queue_flush()(called in function
> blk_do_ordered()-->start_ordered()) does not gets called in case of
> QUEUE_ORDERED_DRAIN.
>
> This causes a serious impact on USB HDD’s.
>
> Please let me know in case I have missed something in my observations.
>
> Thanks & Regards,
> Amit Sahrawat
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-28 15:57 ` BUG in kernel: Wrong Handling of USB HDD’s " Amit Sahrawat
@ 2011-09-28 21:29   ` James Bottomley
  2011-09-29  9:19     ` Amit Sahrawat
  0 siblings, 1 reply; 19+ messages in thread
From: James Bottomley @ 2011-09-28 21:29 UTC (permalink / raw)
  To: Amit Sahrawat; +Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

On Wed, 2011-09-28 at 21:27 +0530, Amit Sahrawat wrote:
> Marking mail to linux-scsi.
> 
> Thanks Christoph.
> 
> Regards,
> Amit Sahrawat
> 
> On Wed, Sep 28, 2011 at 9:12 PM, Amit Sahrawat
> <amit.sahrawat83@gmail.com> wrote:
> > When a USB HDD is connected to the device, it invokes slave_configure
> > to configure the USB HDD. In this function, whenever there is a SCSI
> > device of type TYPE_DISK, it sets:
> >        /* A number of devices have problems with MODE SENSE for
> >                 * page x08, so we will skip it. */
> >                sdev->skip_ms_page_8 = 1;
> >
> > Now, as a part of SCSI device probing, in the function
> > sd_revalidate_disk()-->sd_read_cache_type(), there is a condition
> > if (sdp->skip_ms_page_8)
> >                goto defaults;
> > which becomes always true for all the USB HDD’s – the net result is
> > that the Write Cache is never considered for USB HDD(WCE = 0) –
> > “Assuming drive cache: write through”
> >
> > What’s more – the QUEUE ordering which is marked for WCE=0 is
> > QUEUE_ORDERED_DRAIN, instead of QUEUE_ORDERED_DRAIN_FLUSH
> > This means there is no flushing of USB HDD internal cache (although
> > SYNCHRONIZE_CACHE is implemented as passed as command in
> > sd_prepare_flush) – queue_flush()(called in function
> > blk_do_ordered()-->start_ordered()) does not gets called in case of
> > QUEUE_ORDERED_DRAIN.
> >
> > This causes a serious impact on USB HDD’s.
> >
> > Please let me know in case I have missed something in my observations.

This should be working in 3.0 ... what version of the kernel are you
testing.  The actual patch that relaxes the caching mode page check is
this one:

commit 0bcaa11154f07502e68375617e5650173eea8e50
Author: Luben Tuikov <ltuikov@yahoo.com>
Date:   Thu May 19 00:00:58 2011 -0700

    [SCSI] Retrieve the Caching mode page (version 2)

James

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-28 21:29   ` James Bottomley
@ 2011-09-29  9:19     ` Amit Sahrawat
  2011-09-29 18:27       ` James Bottomley
  0 siblings, 1 reply; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-29  9:19 UTC (permalink / raw)
  To: James Bottomley
  Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

The patch did not work, although it did get pass the earlier condition
which I mentioned- but still Write Cache is not taken into account –
seems mode sensing in sd_read_cache_type() does not send proper
request to the device – or does not read in proper bytes for this(as
per hdparm command analysis):

Logs After Connecting:
scsi 0:0:0:0: Direct-Access     Seagate  Portable         0130 PQ: 0 ANSI: 4
sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] No Caching mode page present
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] No Caching mode page present
sd 0:0:0:0: [sda] Assuming drive cache: write through
 sda: sda1 sda2 sda3 sda4
sd 0:0:0:0: [sda] No Caching mode page present
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] Attached SCSI disk

Second Hard-Disk
usb 4-1.4: new high speed USB device using ehci-sdp and address 3
usb 4-1.4: New USB device found, idVendor=152d, idProduct=2339
usb 4-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=5
usb 4-1.4: Product: USB to ATA/ATAPI Bridge
usb 4-1.4: Manufacturer: JMicron
usb 4-1.4: SerialNumber: 3446184AA01C
scsi0 : usb-storage 4-1.4:1.0
usb 3-1.1.1: new full speed USB device using ehci-sdp and address 4
usb 3-1.1.1: New USB device found, idVendor=0a5c, idProduct=4502
usb 3-1.1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
usb 3-1.1.2: new full speed USB device using ehci-sdp and address 5
usb 3-1.1.2: New USB device found, idVendor=0a5c, idProduct=4503
usb 3-1.1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
usb 3-1.1.3: new full speed USB device using ehci-sdp and address 6
usb 3-1.1.3: New USB device found, idVendor=0a5c, idProduct=2046
usb 3-1.1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-1.1.3: Product: BCM2046B1
usb 3-1.1.3: Manufacturer: Broadcom Corp
usb 3-1.1.3: SerialNumber: E4E0C53861A2
scsi 0:0:0:0: Direct-Access     SAMSUNG  HM501IX               PQ: 0 ANSI: 2 CCS
sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't
support DPO or FUA
 sda:
 sda1 sda2
sd 0:0:0:0: [sda] Attached SCSI disk

Device Identification Retrieved using “hdparm –I” shows this:
#> hdparm --verbose -I /dev/sda3

/dev/sda3:
outgoing cdb:  85 08 0e 00 00 00 01 00 00 00 00 00 00 40 ec 00
SG_IO: ATA_16 status=0x0, host_status=0x0, driver_status=0x0
SG_IO: sb[]:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00
incoming_data:  5a 0c ff 3f 37 c8 10 00 00 00 00 00 3f 00 00 00 00 00
00 00 20 20 20 20 20 20 20 20 20 20 20 20 56 36 51 43 4e 33 35 57 00
00 00 40 04 00 30 30 32 30 53 42 31 4d 54 53 32 39 30 35 31 33 41 35
20 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 10 80 00 00 00 2f 00 40 00 02 00 02 07 00 ff 3f
10 00 3f 00 10 fc fb 00 10 01 ff ff ff 0f 00 00 07 00 03 00 78 00 78
00 78 00 78 00 00 00 00 00 00 00 00 00 00 00 00 00 1f 00 02 05 00 00
48 00 40 00 f0 01 29 00 6b 34 09 7d 23 61 69 34 09 bc 23 61 7f 40 24
00 24 00 80 80 fe ff 00 00 00 fe 00 00 00 00 00 00 00 00 00 00 70 59
1c 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 c5 dc 32 73 79 00
00 00 00 00 00 00 00 00 00 00 00 00 00 1e 40 1c 40 00 00 00 00 00 00
00 00 00 00 00 00 00 00 21 00 70 59 1c 1d 70 59 1c 1d 20 20 02 00 40
01 00 01 00 50 06 3c 0a 3c 00 00 3c 00 00 00 08 00 00 00 00 00 1f 00
80 02 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3c 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 3b 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 18 15 00 00 00 00 00 00 00 00 10 10 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 a5 d4
SG_IO: desc[]:  00 00
      ATA_16 stat=00 err=00 nsect=00 lbal=00 lbam=00 lbah=00 dev=00
ATA device, with non-removable media
	Model Number:       ST9250315AS
	Serial Number:      6VCQ3NW5
	Firmware Revision:  0002BSM1
	Transport:          Serial
Standards:
	Used: unknown (minor revision code 0x0029)
	Supported: 8 7 6 5
	Likely used: 8
Configuration:
	Logical		max	current
	cylinders	16383	16383
	heads		16	16
	sectors/track	63	63
	--
	CHS current addressable sectors:   16514064
	LBA    user addressable sectors:  268435455
	LBA48  user addressable sectors:  488397168
	Logical/Physical Sector size:           512 bytes
	device size with M = 1024*1024:      238475 MBytes
	device size with M = 1000*1000:      250059 MBytes (250 GB)
	cache/buffer size  = 8192 KBytes
	Nominal Media Rotation Rate: 5400
Capabilities:
	LBA, IORDY(can be disabled)
	Queue depth: 32
	Standby timer values: spec'd by Standard, no device specific minimum
	R/W multiple sector transfer: Max = 16	Current = 16
	Advanced power management level: 128
	Recommended acoustic management value: 254, current value: 0
	DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
	     Cycle time: min=120ns recommended=120ns
	PIO: pio0 pio1 pio2 pio3 pio4
	     Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
	Enabled	Supported:
	   *	SMART feature set
	    	Security Mode feature set
	   *	Power Management feature set
	   *	Write cache
	   *	Look-ahead
	   *	Host Protected Area feature set
	   *	WRITE_BUFFER command
	   *	READ_BUFFER command
	   *	DOWNLOAD_MICROCODE
	   *	Advanced Power Management feature set
	    	SET_MAX security extension
	   *	48-bit Address feature set
	   *	Device Configuration Overlay feature set
	   *	Mandatory FLUSH_CACHE
	   *	FLUSH_CACHE_EXT
	   *	SMART error logging
	   *	SMART self-test
	   *	General Purpose Logging feature set
	   *	64-bit World wide name
	   *	IDLE_IMMEDIATE with UNLOAD
	    	Write-Read-Verify feature set
	   *	WRITE_UNCORRECTABLE_EXT command
	   *	{READ,WRITE}_DMA_EXT_GPL commands
	   *	Segmented DOWNLOAD_MICROCODE
	   *	Gen1 signaling speed (1.5Gb/s)
	   *	Native Command Queueing (NCQ)
	   *	Phy event counters
	    	Device-initiated interface power management
	   *	Software settings preservation
	   *	SMART Command Transport (SCT) feature set
	   *	SCT Long Sector Access (AC1)
	   *	SCT Error Recovery Control (AC3)
	   *	SCT Features Control (AC4)
	   *	SCT Data Tables (AC5)
	    	unknown 206[12] (vendor specific)
Security:
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	72min for SECURITY ERASE UNIT. 72min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000c50032dc7973
	NAA		: 5
	IEEE OUI	: 000c50
	Unique ID	: 032dc7973
Checksum: correct

And the impact of Enabling/Disabling Cache can be seen in:
Commands/features:
	Enabled	Supported:
	   *	SMART feature set
	    	Security Mode feature set
	   *	Power Management feature set
	    	Write cache – Changes after doing ‘hdparm –W 0/1’
	   *	Look-ahead
	   *	Host Protected Area feature set
	   *	WRITE_BUFFER command
	   *	READ_BUFFER command

Looking at corresponding code in ‘hdparm’ to fetch this: an ioctl with
command ‘ATA_OP_IDENTIFY’ is passed to the device using SG_IO
interface (function – get_identify_data()) – which receives the buffer
data and that is passed to identify the device specification.
file:identify.c, function: void identify (__u16 *id_supplied)

printf("Commands/features:\n\tEnabled\tSupported:\n");
                print_features(val[CMDS_SUPP_0] & 0x7fff,
val[CMDS_EN_0], feat_word82_str);

static const char *feat_word82_str[16] = {
        "obsolete 82[15]",                              /* word 82 bit
15: obsolete  */
        "NOP cmd",                                      /* word 82 bit 14 */
        "READ_BUFFER command",                          /* word 82 bit 13 */
        "WRITE_BUFFER command",                         /* word 82 bit 12 */
        "WRITE_VERIFY command",                         /* word 82 bit
11: obsolete  */
        "Host Protected Area feature set",              /* word 82 bit 10 */
        "DEVICE_RESET command",                         /* word 82 bit  9 */
        "SERVICE interrupt",                            /* word 82 bit  8 */
        "Release interrupt",                            /* word 82 bit  7 */
        "Look-ahead",                                   /* word 82 bit  6 */
        "Write cache",                                  /* word 82 bit  5 */
        "PACKET command feature set",                   /* word 82 bit  4 */
        "Power Management feature set",                 /* word 82 bit  3 */
        "Removable Media feature set",                  /* word 82 bit  2 */
        "Security Mode feature set",                    /* word 82 bit  1 */
        "SMART feature set"                             /* word 82 bit  0 */
};
static void print_features (__u16 supported, __u16 enabled, const char *names[])
{
        int i;
        for (i = 0; i < 16; ++i) {
                __u16 mask = 1 << i;
                if ((supported & mask) && names[15 - i])
                        printf("\t   %c\t%s\n", (enabled & mask) ? '*'
: ' ', names[15 - i]);
        }
}

In this, the corresponding ‘Words’ which are passed are:
011010001101011 – 34 6b -val[82] – Supported
011010001101001 – 34 69 -val[85] – When Write Cache is Enabled
011010001001001 – 34 49 -val[85] – When Write Cache is Disabled

Val[82], val[85] indicates Words from the buffer received in response
to the ATA_OP_IDENTIFY – IOCTL
For Disabled Write Cache:
Identify Data:  5a 0c ff 3f 37 c8 10 00 00 00 00 00 3f 00 00 00 00 00
00 00 20 20 20 20 20 20 20 20 20 20 20 20 56 36 51 43 4e 33 35 57 00
00 00 40 04 00 30 30 32 30 53 42 31 4d 54 53 32 39 30 35 31 33 41 35
20 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 10 80 00 00 00 2f 00 40 00 02 00 02 07 00 ff 3f
10 00 3f 00 10 fc fb 00 10 01 ff ff ff 0f 00 00 07 00 03 00 78 00 78
00 78 00 78 00 00 00 00 00 00 00 00 00 00 00 00 00 1f 00 02 05 00 00
48 00 40 00 f0 01 29 00 6b 34 09 7d 23 61 49 34 09 bc 23 61 7f 40 24
00 24 00 80 80 fe ff 00 00 00 fe 00 00 00 00 00 00 00 00 00 00 70 59
1c 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 c5 dc 32 73 79 00
00 00 00 00 00 00 00 00 00 00 00 00 00 1e 40 1c 40 00 00 00 00 00 00
00 00 00 00 00 00 00 00

For Enabled Write Cache:
Identify Data:  5a 0c ff 3f 37 c8 10 00 00 00 00 00 3f 00 00 00 00 00
00 00 20 20 20 20 20 20 20 20 20 20 20 20 56 36 51 43 4e 33 35 57 00
00 00 40 04 00 30 30 32 30 53 42 31 4d 54 53 32 39 30 35 31 33 41 35
20 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 10 80 00 00 00 2f 00 40 00 02 00 02 07 00 ff 3f
10 00 3f 00 10 fc fb 00 10 01 ff ff ff 0f 00 00 07 00 03 00 78 00 78
00 78 00 78 00 00 00 00 00 00 00 00 00 00 00 00 00 1f 00 02 05 00 00
48 00 40 00 f0 01 29 00 6b 34 09 7d 23 61 69 34 09 bc 23 61 7f 40 24
00 24 00 80 80 fe ff 00 00 00 fe 00 00 00 00 00 00 00 00 00 00 70 59
1c 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 c5 dc 32 73 79 00
00 00 00 00 00 00 00 00 00 00 00 00 00 1e 40 1c 40 00 00 00 00 00 00
00 00 00 00 00 00 00 00

So, probably the kernel code for sensing the disk and reading to check
for the presence of the cache is not working for these USB HDD’s, I
have tried with a number of hard-disk’s(different manufactures –
with/without write cache) just to make sure that the observation is
correct.

The corresponding effect of enabling/disabling the write cache can be
seen on the write performance also - .

Please share your opinion on this.

Thanks & Regards,
Amit Sahrawat


On Thu, Sep 29, 2011 at 2:59 AM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Wed, 2011-09-28 at 21:27 +0530, Amit Sahrawat wrote:
>> Marking mail to linux-scsi.
>>
>> Thanks Christoph.
>>
>> Regards,
>> Amit Sahrawat
>>
>> On Wed, Sep 28, 2011 at 9:12 PM, Amit Sahrawat
>> <amit.sahrawat83@gmail.com> wrote:
>> > When a USB HDD is connected to the device, it invokes slave_configure
>> > to configure the USB HDD. In this function, whenever there is a SCSI
>> > device of type TYPE_DISK, it sets:
>> >        /* A number of devices have problems with MODE SENSE for
>> >                 * page x08, so we will skip it. */
>> >                sdev->skip_ms_page_8 = 1;
>> >
>> > Now, as a part of SCSI device probing, in the function
>> > sd_revalidate_disk()-->sd_read_cache_type(), there is a condition
>> > if (sdp->skip_ms_page_8)
>> >                goto defaults;
>> > which becomes always true for all the USB HDD’s – the net result is
>> > that the Write Cache is never considered for USB HDD(WCE = 0) –
>> > “Assuming drive cache: write through”
>> >
>> > What’s more – the QUEUE ordering which is marked for WCE=0 is
>> > QUEUE_ORDERED_DRAIN, instead of QUEUE_ORDERED_DRAIN_FLUSH
>> > This means there is no flushing of USB HDD internal cache (although
>> > SYNCHRONIZE_CACHE is implemented as passed as command in
>> > sd_prepare_flush) – queue_flush()(called in function
>> > blk_do_ordered()-->start_ordered()) does not gets called in case of
>> > QUEUE_ORDERED_DRAIN.
>> >
>> > This causes a serious impact on USB HDD’s.
>> >
>> > Please let me know in case I have missed something in my observations.
>
> This should be working in 3.0 ... what version of the kernel are you
> testing.  The actual patch that relaxes the caching mode page check is
> this one:
>
> commit 0bcaa11154f07502e68375617e5650173eea8e50
> Author: Luben Tuikov <ltuikov@yahoo.com>
> Date:   Thu May 19 00:00:58 2011 -0700
>
>    [SCSI] Retrieve the Caching mode page (version 2)
>
> James
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-29  9:19     ` Amit Sahrawat
@ 2011-09-29 18:27       ` James Bottomley
  2011-09-29 18:31         ` James Bottomley
  0 siblings, 1 reply; 19+ messages in thread
From: James Bottomley @ 2011-09-29 18:27 UTC (permalink / raw)
  To: Amit Sahrawat; +Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

On Thu, 2011-09-29 at 14:49 +0530, Amit Sahrawat wrote:
> The patch did not work, although it did get pass the earlier condition
> which I mentioned- but still Write Cache is not taken into account –
> seems mode sensing in sd_read_cache_type() does not send proper
> request to the device – or does not read in proper bytes for this(as
> per hdparm command analysis):
> 
> Logs After Connecting:
> scsi 0:0:0:0: Direct-Access     Seagate  Portable         0130 PQ: 0 ANSI: 4
> sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB)
> sd 0:0:0:0: [sda] Write Protect is off
> sd 0:0:0:0: [sda] No Caching mode page present

This line means that a request for page 0x0 didn't turn up the caching
mode page in the list of supported pages.

What does

sg_inq  --page=0x0 /dev/sda

show?

James

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-29 18:27       ` James Bottomley
@ 2011-09-29 18:31         ` James Bottomley
  2011-09-30  6:56           ` Amit Sahrawat
  0 siblings, 1 reply; 19+ messages in thread
From: James Bottomley @ 2011-09-29 18:31 UTC (permalink / raw)
  To: Amit Sahrawat; +Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

On Thu, 2011-09-29 at 13:27 -0500, James Bottomley wrote:
> On Thu, 2011-09-29 at 14:49 +0530, Amit Sahrawat wrote:
> > The patch did not work, although it did get pass the earlier condition
> > which I mentioned- but still Write Cache is not taken into account –
> > seems mode sensing in sd_read_cache_type() does not send proper
> > request to the device – or does not read in proper bytes for this(as
> > per hdparm command analysis):
> > 
> > Logs After Connecting:
> > scsi 0:0:0:0: Direct-Access     Seagate  Portable         0130 PQ: 0 ANSI: 4
> > sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB)
> > sd 0:0:0:0: [sda] Write Protect is off
> > sd 0:0:0:0: [sda] No Caching mode page present
> 
> This line means that a request for page 0x0 didn't turn up the caching
> mode page in the list of supported pages.
> 
> What does
> 
> sg_inq  --page=0x0 /dev/sda

Um, lets try that again, this time with the correct information.  What
we're looking for is the list of mode pages, so 

sg_modes --page=0x3f /dev/sda

Should return it.

Thanks,

James

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-29 18:31         ` James Bottomley
@ 2011-09-30  6:56           ` Amit Sahrawat
  2011-09-30  7:06             ` NamJae Jeon
  2011-09-30 12:18             ` James Bottomley
  0 siblings, 2 replies; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-30  6:56 UTC (permalink / raw)
  To: James Bottomley
  Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

Hi James,

[root@localhost Tools]# sg_inq --page=0x0 /dev/sdb
 Only hex output supported. sg_vpd decodes more pages.
VPD INQUIRY, page code=0x00:
   [PQual=0  Peripheral device type: disk]
   Supported VPD pages:
     0x1f
[root@localhost Tools]#



[root@localhost Tools]# sg_modes --page=0x3f /dev/sdb
    SAMSUNG   HM501IX              peripheral_type: disk [0x0]
Mode parameter header from MODE SENSE(10):
  Mode data length=66, medium type=0x00, WP=0, DpoFua=0, longlba=0
  Block descriptor length=0
>> Read-Write error recovery, page_control: current
 00     01 0a 00 00 00 00 00 00  00 00 00 00
>> Flexible geometry (obsolete), page_control: current
 00     05 0a ff ff 10 3f 02 00  3f ff 00 00
>> Caching, page_control: current
 00     08 12 00 00 00 00 00 00  00 00 00 00 01 00 00 00
 10     00 00 00 00
>> page_code: 0x1b, page_control: current
 00     1b 0a 00 01 00 00 00 00  00 00 00 00
>> Unit Attention condition [vendor specific format], page_control: current
 00     00 00
[root@localhost Tools]#



[root@localhost Tools]# sginfo -A /dev/sdb
INQUIRY response (cmd: 0x12)
----------------------------
Device Type                        0
Vendor:                    SAMSUNG
Product:                   HM501IX
Revision level:

No serial number (bad format for supported VPDs)

Read-Write Error Recovery mode page (0x1)
-----------------------------------------
AWRE                               0
ARRE                               0
TB                                 0
RC                                 0
EER                                0
PER                                0
DTE                                0
DCR                                0
Read Retry Count                   0
Correction Span                    0
Head Offset Count                  0
Data Strobe Offset Count           0
Write Retry Count                  0
Recovery Time Limit (ms)           0

mode page: 0x05   [Flexible Disk]
---------------
0x02                               0xff
0x03                               0xff
0x04                               0x10
0x05                               0x3f
0x06                               0x02
0x07                               0x00
0x08                               0x3f
0x09                               0xff
0x0a                               0x00
0x0b                               0x00

Caching mode page (0x8)
-----------------------
Initiator Control                  0
ABPF                               0
CAP                                0
DISC                               0
SIZE                               0
Write Cache Enabled                0
MF                                 0
Read Cache Disabled                0
Demand Read Retention Priority     0
Demand Write Retention Priority    0
Disable Pre-fetch Transfer Length  0
Minimum Pre-fetch                  0
Maximum Pre-fetch                  0
Maximum Pre-fetch Ceiling          0
FSW                                0
LBCSS                              0
DRA                                0
NV_DIS                             1
Number of Cache Segments           0
Cache Segment size                 0
Non-Cache Segment size             0

mode page: 0x1b
---------------
0x02                               0x00
0x03                               0x01
0x04                               0x00
0x05                               0x00
0x06                               0x00
0x07                               0x00
0x08                               0x00
0x09                               0x00
0x0a                               0x00
0x0b                               0x00

mode page: 0x00   [Vendor (non-page format)]
---------------
0x00                               0x00
0x01                               0x00

[root@localhost Tools]#

Comparision for USB HDD and Normal Hard disk connected to system.(For
USB HDD it showing Write Cache - False, for normal Hard disk - Write
Cache - True)
[root@localhost Tools]# sg_modes --page=0x3f /dev/sdb
    SAMSUNG   HM501IX              peripheral_type: disk [0x0]
Mode parameter header from MODE SENSE(10):
  Mode data length=66, medium type=0x00, WP=0, DpoFua=0, longlba=0
  Block descriptor length=0
>> Read-Write error recovery, page_control: current
 00     01 0a 00 00 00 00 00 00  00 00 00 00
>> Flexible geometry (obsolete), page_control: current
 00     05 0a ff ff 10 3f 02 00  3f ff 00 00
>> Caching, page_control: current
 00     08 12 00 00 00 00 00 00  00 00 00 00 01 00 00 00
 10     00 00 00 00
>> page_code: 0x1b, page_control: current
 00     1b 0a 00 01 00 00 00 00  00 00 00 00
>> Unit Attention condition [vendor specific format], page_control: current
 00     00 00
[root@localhost Tools]# sg_modes --page=0x3f /dev/sda
    ATA       SAMSUNG HD502HJ   1AJ1   peripheral_type: disk [0x0]
Mode parameter header from MODE SENSE(10):
  Mode data length=60, medium type=0x00, WP=0, DpoFua=0, longlba=0
  Block descriptor length=8
> Direct access device block descriptors:
   Density code=0x0
 00     00 00 00 00 00 00 02 00

>> Read-Write error recovery, page_control: current
 00     01 0a 80 00 00 00 00 00  00 00 00 00
>> Caching, page_control: current
 00     08 12 04 00 00 00 00 00  00 00 00 00 00 00 00 00
 10     00 00 00 00
>> Control, page_control: current
 00     0a 0a 02 00 00 00 00 00  ff ff 00 1e
[root@localhost Tools]#

Now, for the USB HDD which do have write cache - sginfo is showing
them to Write Cache Enabled as false.
Why do the result of hdparm identification and sginfo varies- (I know
they have different interface to work with and hdparm takes care of
that by using SG_IO interface from it's code)? hdparm showed me
correct results - that lead me to digging in the kernel code and
checking the performance for USB HDD with Write cache enabled/disabled
- which also showed that QUEUE ordering chosen for USB HDD is not
correct.
I have a large number of USB HDD's - with different vendors, and for
all of them - it is showing Write Cache Enabled as false.
The code works only for the Pen Drives or the USB HDD which do not
have internal cache.

Also, for journalling filesystem being used on USB HDD - it does
becomes a cause of concern.

Please share your opinion, I guess we need a change for mode sensing
in the kernel code for USB HDD.

Thanks & Regards,
Amit Sahrawat



On Fri, Sep 30, 2011 at 12:01 AM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Thu, 2011-09-29 at 13:27 -0500, James Bottomley wrote:
>> On Thu, 2011-09-29 at 14:49 +0530, Amit Sahrawat wrote:
>> > The patch did not work, although it did get pass the earlier condition
>> > which I mentioned- but still Write Cache is not taken into account –
>> > seems mode sensing in sd_read_cache_type() does not send proper
>> > request to the device – or does not read in proper bytes for this(as
>> > per hdparm command analysis):
>> >
>> > Logs After Connecting:
>> > scsi 0:0:0:0: Direct-Access     Seagate  Portable         0130 PQ: 0 ANSI: 4
>> > sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB)
>> > sd 0:0:0:0: [sda] Write Protect is off
>> > sd 0:0:0:0: [sda] No Caching mode page present
>>
>> This line means that a request for page 0x0 didn't turn up the caching
>> mode page in the list of supported pages.
>>
>> What does
>>
>> sg_inq  --page=0x0 /dev/sda
>
> Um, lets try that again, this time with the correct information.  What
> we're looking for is the list of mode pages, so
>
> sg_modes --page=0x3f /dev/sda
>
> Should return it.
>
> Thanks,
>
> James
>
>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-30  6:56           ` Amit Sahrawat
@ 2011-09-30  7:06             ` NamJae Jeon
  2011-09-30 12:18             ` James Bottomley
  1 sibling, 0 replies; 19+ messages in thread
From: NamJae Jeon @ 2011-09-30  7:06 UTC (permalink / raw)
  To: Amit Sahrawat
  Cc: James Bottomley, linux-scsi, linux-kernel, linux-fsdevel,
	Christoph Hellwig

2011/9/30 Amit Sahrawat <amit.sahrawat83@gmail.com>:
> Hi James,
>
> [root@localhost Tools]# sg_inq --page=0x0 /dev/sdb
>  Only hex output supported. sg_vpd decodes more pages.
> VPD INQUIRY, page code=0x00:
>   [PQual=0  Peripheral device type: disk]
>   Supported VPD pages:
>     0x1f
> [root@localhost Tools]#
>
>
>
> [root@localhost Tools]# sg_modes --page=0x3f /dev/sdb
>    SAMSUNG   HM501IX              peripheral_type: disk [0x0]
> Mode parameter header from MODE SENSE(10):
>  Mode data length=66, medium type=0x00, WP=0, DpoFua=0, longlba=0
>  Block descriptor length=0
>>> Read-Write error recovery, page_control: current
>  00     01 0a 00 00 00 00 00 00  00 00 00 00
>>> Flexible geometry (obsolete), page_control: current
>  00     05 0a ff ff 10 3f 02 00  3f ff 00 00
>>> Caching, page_control: current
>  00     08 12 00 00 00 00 00 00  00 00 00 00 01 00 00 00
>  10     00 00 00 00
>>> page_code: 0x1b, page_control: current
>  00     1b 0a 00 01 00 00 00 00  00 00 00 00
>>> Unit Attention condition [vendor specific format], page_control: current
>  00     00 00
> [root@localhost Tools]#
>
>
>
> [root@localhost Tools]# sginfo -A /dev/sdb
> INQUIRY response (cmd: 0x12)
> ----------------------------
> Device Type                        0
> Vendor:                    SAMSUNG
> Product:                   HM501IX
> Revision level:
>
> No serial number (bad format for supported VPDs)
>
> Read-Write Error Recovery mode page (0x1)
> -----------------------------------------
> AWRE                               0
> ARRE                               0
> TB                                 0
> RC                                 0
> EER                                0
> PER                                0
> DTE                                0
> DCR                                0
> Read Retry Count                   0
> Correction Span                    0
> Head Offset Count                  0
> Data Strobe Offset Count           0
> Write Retry Count                  0
> Recovery Time Limit (ms)           0
>
> mode page: 0x05   [Flexible Disk]
> ---------------
> 0x02                               0xff
> 0x03                               0xff
> 0x04                               0x10
> 0x05                               0x3f
> 0x06                               0x02
> 0x07                               0x00
> 0x08                               0x3f
> 0x09                               0xff
> 0x0a                               0x00
> 0x0b                               0x00
>
> Caching mode page (0x8)
> -----------------------
> Initiator Control                  0
> ABPF                               0
> CAP                                0
> DISC                               0
> SIZE                               0
> Write Cache Enabled                0
> MF                                 0
> Read Cache Disabled                0
> Demand Read Retention Priority     0
> Demand Write Retention Priority    0
> Disable Pre-fetch Transfer Length  0
> Minimum Pre-fetch                  0
> Maximum Pre-fetch                  0
> Maximum Pre-fetch Ceiling          0
> FSW                                0
> LBCSS                              0
> DRA                                0
> NV_DIS                             1
> Number of Cache Segments           0
> Cache Segment size                 0
> Non-Cache Segment size             0
>
> mode page: 0x1b
> ---------------
> 0x02                               0x00
> 0x03                               0x01
> 0x04                               0x00
> 0x05                               0x00
> 0x06                               0x00
> 0x07                               0x00
> 0x08                               0x00
> 0x09                               0x00
> 0x0a                               0x00
> 0x0b                               0x00
>
> mode page: 0x00   [Vendor (non-page format)]
> ---------------
> 0x00                               0x00
> 0x01                               0x00
>
> [root@localhost Tools]#
>
> Comparision for USB HDD and Normal Hard disk connected to system.(For
> USB HDD it showing Write Cache - False, for normal Hard disk - Write
> Cache - True)
> [root@localhost Tools]# sg_modes --page=0x3f /dev/sdb
>    SAMSUNG   HM501IX              peripheral_type: disk [0x0]
> Mode parameter header from MODE SENSE(10):
>  Mode data length=66, medium type=0x00, WP=0, DpoFua=0, longlba=0
>  Block descriptor length=0
>>> Read-Write error recovery, page_control: current
>  00     01 0a 00 00 00 00 00 00  00 00 00 00
>>> Flexible geometry (obsolete), page_control: current
>  00     05 0a ff ff 10 3f 02 00  3f ff 00 00
>>> Caching, page_control: current
>  00     08 12 00 00 00 00 00 00  00 00 00 00 01 00 00 00
>  10     00 00 00 00
>>> page_code: 0x1b, page_control: current
>  00     1b 0a 00 01 00 00 00 00  00 00 00 00
>>> Unit Attention condition [vendor specific format], page_control: current
>  00     00 00
> [root@localhost Tools]# sg_modes --page=0x3f /dev/sda
>    ATA       SAMSUNG HD502HJ   1AJ1   peripheral_type: disk [0x0]
> Mode parameter header from MODE SENSE(10):
>  Mode data length=60, medium type=0x00, WP=0, DpoFua=0, longlba=0
>  Block descriptor length=8
>> Direct access device block descriptors:
>   Density code=0x0
>  00     00 00 00 00 00 00 02 00
>
>>> Read-Write error recovery, page_control: current
>  00     01 0a 80 00 00 00 00 00  00 00 00 00
>>> Caching, page_control: current
>  00     08 12 04 00 00 00 00 00  00 00 00 00 00 00 00 00
>  10     00 00 00 00
>>> Control, page_control: current
>  00     0a 0a 02 00 00 00 00 00  ff ff 00 1e
> [root@localhost Tools]#
>
> Now, for the USB HDD which do have write cache - sginfo is showing
> them to Write Cache Enabled as false.
> Why do the result of hdparm identification and sginfo varies- (I know
> they have different interface to work with and hdparm takes care of
> that by using SG_IO interface from it's code)? hdparm showed me
> correct results - that lead me to digging in the kernel code and
> checking the performance for USB HDD with Write cache enabled/disabled
> - which also showed that QUEUE ordering chosen for USB HDD is not
> correct.
> I have a large number of USB HDD's - with different vendors, and for
> all of them - it is showing Write Cache Enabled as false.
> The code works only for the Pen Drives or the USB HDD which do not
> have internal cache.
>
> Also, for journalling filesystem being used on USB HDD - it does
> becomes a cause of concern.
Filesystem can not prevent important data(ex, jounal data) by wrtite
barrier on this issue.
write barrier should be also support on USB HDD(usb driver) like ATA driver.
>
> Please share your opinion, I guess we need a change for mode sensing
> in the kernel code for USB HDD.
>
> Thanks & Regards,
> Amit Sahrawat
>
>
>
> On Fri, Sep 30, 2011 at 12:01 AM, James Bottomley
> <James.Bottomley@hansenpartnership.com> wrote:
>> On Thu, 2011-09-29 at 13:27 -0500, James Bottomley wrote:
>>> On Thu, 2011-09-29 at 14:49 +0530, Amit Sahrawat wrote:
>>> > The patch did not work, although it did get pass the earlier condition
>>> > which I mentioned- but still Write Cache is not taken into account –
>>> > seems mode sensing in sd_read_cache_type() does not send proper
>>> > request to the device – or does not read in proper bytes for this(as
>>> > per hdparm command analysis):
>>> >
>>> > Logs After Connecting:
>>> > scsi 0:0:0:0: Direct-Access     Seagate  Portable         0130 PQ: 0 ANSI: 4
>>> > sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB)
>>> > sd 0:0:0:0: [sda] Write Protect is off
>>> > sd 0:0:0:0: [sda] No Caching mode page present
>>>
>>> This line means that a request for page 0x0 didn't turn up the caching
>>> mode page in the list of supported pages.
>>>
>>> What does
>>>
>>> sg_inq  --page=0x0 /dev/sda
>>
>> Um, lets try that again, this time with the correct information.  What
>> we're looking for is the list of mode pages, so
>>
>> sg_modes --page=0x3f /dev/sda
>>
>> Should return it.
>>
>> Thanks,
>>
>> James
>>
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-30  6:56           ` Amit Sahrawat
  2011-09-30  7:06             ` NamJae Jeon
@ 2011-09-30 12:18             ` James Bottomley
  2011-09-30 17:53               ` Amit Sahrawat
  1 sibling, 1 reply; 19+ messages in thread
From: James Bottomley @ 2011-09-30 12:18 UTC (permalink / raw)
  To: Amit Sahrawat; +Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

On Fri, 2011-09-30 at 12:26 +0530, Amit Sahrawat wrote:
> Now, for the USB HDD which do have write cache - sginfo is showing
> them to Write Cache Enabled as false.
> Why do the result of hdparm identification and sginfo varies- (I know
> they have different interface to work with and hdparm takes care of
> that by using SG_IO interface from it's code)? hdparm showed me
> correct results - that lead me to digging in the kernel code and
> checking the performance for USB HDD with Write cache enabled/disabled
> - which also showed that QUEUE ordering chosen for USB HDD is not
> correct.

Well, what all this means is the SATL in the USB device is implemented
wrongly.  Since USB devices only preset SCSI interfaces, that's what we
have to believe.

hdparm when used correctly sends an ATA inquiry command wrapped in an
ATA_12 or ATA_16 SCSI command.  A large number of legacy SATLs are known
to crash on these commands.

Are you sure the ATA command is reporting correctly?  A write back cache
is a remarkably silly thing to enable for a USB device because they're
highly likely to be surprise ejected which powers the device down.

> I have a large number of USB HDD's - with different vendors, and for
> all of them - it is showing Write Cache Enabled as false.
> The code works only for the Pen Drives or the USB HDD which do not
> have internal cache.
> 
> Also, for journalling filesystem being used on USB HDD - it does
> becomes a cause of concern.
> 
> Please share your opinion, I guess we need a change for mode sensing
> in the kernel code for USB HDD.

Well that's a nastily complex problem.  It really needs to be
whitelisted in the USB stack, but if every drive is doing it, that's
quite a task.

The question becomes how do we detect in a SCSI fashion that the device
has a write back cache if none of the standard SCSI mechanisms reports
it?

James

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-30 12:18             ` James Bottomley
@ 2011-09-30 17:53               ` Amit Sahrawat
  2011-09-30 17:56                 ` Amit Sahrawat
  0 siblings, 1 reply; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-30 17:53 UTC (permalink / raw)
  To: James Bottomley
  Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

On Fri, Sep 30, 2011 at 5:48 PM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Fri, 2011-09-30 at 12:26 +0530, Amit Sahrawat wrote:
>> Now, for the USB HDD which do have write cache - sginfo is showing
>> them to Write Cache Enabled as false.
>> Why do the result of hdparm identification and sginfo varies- (I know
>> they have different interface to work with and hdparm takes care of
>> that by using SG_IO interface from it's code)? hdparm showed me
>> correct results - that lead me to digging in the kernel code and
>> checking the performance for USB HDD with Write cache enabled/disabled
>> - which also showed that QUEUE ordering chosen for USB HDD is not
>> correct.
>
> Well, what all this means is the SATL in the USB device is implemented
> wrongly.  Since USB devices only preset SCSI interfaces, that's what we
> have to believe.
>
> hdparm when used correctly sends an ATA inquiry command wrapped in an
> ATA_12 or ATA_16 SCSI command.  A large number of legacy SATLs are known
> to crash on these commands.
>
> Are you sure the ATA command is reporting correctly?  A write back cache
> is a remarkably silly thing to enable for a USB device because they're
> highly likely to be surprise ejected which powers the device down.
>
In addition to the problem reported - there is one more thing I have
noticed with USB HDD - they should be shown as 'removable' but the
removable is marked only for USB PEN Drives. This seems to be a bit of
confusing, any mass storage media connected on USB port should be
recognized as removable.
So, for handling the issue, I would consider adding the handling in
slave_configure()(usb/storage/scsiglue) which marks the HDD/pen drives
as removable also signifying them to be USB based.
Then, as part of sd_revalidation – how about adding the ATA_IDENTIFY
command part if the device is USB HDD? As far as the result of
ATA_IDENTIFY is concerned – they return proper ‘256’ bytes - response
and the Words – 82, 85 used for feature supported and enabled/disabled
returns proper values for the USB HDD’s I have seen. In case of USB
pen drives – they return failure – I did not see any crash – maybe I
don’t have one of the legacy SATL based disk.
Since, I am new to this – I will check more on this to get a viable
solution. Please add your opinion. Can you share the name of the
device which causes crash with these ATA commands, If I am able to get
one I can try on that also.

>> I have a large number of USB HDD's - with different vendors, and for
>> all of them - it is showing Write Cache Enabled as false.
>> The code works only for the Pen Drives or the USB HDD which do not
>> have internal cache.
>>
>> Also, for journalling filesystem being used on USB HDD - it does
>> becomes a cause of concern.
>>
>> Please share your opinion, I guess we need a change for mode sensing
>> in the kernel code for USB HDD.
>
> Well that's a nastily complex problem.  It really needs to be
> whitelisted in the USB stack, but if every drive is doing it, that's
> quite a task.
>
> The question becomes how do we detect in a SCSI fashion that the device
> has a write back cache if none of the standard SCSI mechanisms reports
> it?
As far as detecting in SCSI fashion – I wonder using that I would have
never reached the conclusion that it is the Write Cache of USB HDD
which is causing problem instead I would have been focusing on
particular file system (XFS in my case –which in itself is complex) –
there BARRIER support and also the Queue handling in the elevator with
I/O scheduler.
None of the sg utils is showing anything related with the Write Cache
in USB HDD – which provide any hint that the Cache is enabled – this
is a bit surprising because most of the high end USB mass storages
device in the market have Write Cache in them.

Thanks & Regards,
Amit Sahrawat
>
> James
>
>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-30 17:53               ` Amit Sahrawat
@ 2011-09-30 17:56                 ` Amit Sahrawat
  2011-09-30 18:11                   ` James Bottomley
  0 siblings, 1 reply; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-30 17:56 UTC (permalink / raw)
  To: James Bottomley, linux-usb
  Cc: linux-scsi, linux-kernel, linux-fsdevel, Christoph Hellwig

Adding linux-usb - to get more insight's into the problem.

On Fri, Sep 30, 2011 at 11:23 PM, Amit Sahrawat
<amit.sahrawat83@gmail.com> wrote:
> On Fri, Sep 30, 2011 at 5:48 PM, James Bottomley
> <James.Bottomley@hansenpartnership.com> wrote:
>> On Fri, 2011-09-30 at 12:26 +0530, Amit Sahrawat wrote:
>>> Now, for the USB HDD which do have write cache - sginfo is showing
>>> them to Write Cache Enabled as false.
>>> Why do the result of hdparm identification and sginfo varies- (I know
>>> they have different interface to work with and hdparm takes care of
>>> that by using SG_IO interface from it's code)? hdparm showed me
>>> correct results - that lead me to digging in the kernel code and
>>> checking the performance for USB HDD with Write cache enabled/disabled
>>> - which also showed that QUEUE ordering chosen for USB HDD is not
>>> correct.
>>
>> Well, what all this means is the SATL in the USB device is implemented
>> wrongly.  Since USB devices only preset SCSI interfaces, that's what we
>> have to believe.
>>
>> hdparm when used correctly sends an ATA inquiry command wrapped in an
>> ATA_12 or ATA_16 SCSI command.  A large number of legacy SATLs are known
>> to crash on these commands.
>>
>> Are you sure the ATA command is reporting correctly?  A write back cache
>> is a remarkably silly thing to enable for a USB device because they're
>> highly likely to be surprise ejected which powers the device down.
>>
> In addition to the problem reported - there is one more thing I have
> noticed with USB HDD - they should be shown as 'removable' but the
> removable is marked only for USB PEN Drives. This seems to be a bit of
> confusing, any mass storage media connected on USB port should be
> recognized as removable.
> So, for handling the issue, I would consider adding the handling in
> slave_configure()(usb/storage/scsiglue) which marks the HDD/pen drives
> as removable also signifying them to be USB based.
> Then, as part of sd_revalidation – how about adding the ATA_IDENTIFY
> command part if the device is USB HDD? As far as the result of
> ATA_IDENTIFY is concerned – they return proper ‘256’ bytes - response
> and the Words – 82, 85 used for feature supported and enabled/disabled
> returns proper values for the USB HDD’s I have seen. In case of USB
> pen drives – they return failure – I did not see any crash – maybe I
> don’t have one of the legacy SATL based disk.
> Since, I am new to this – I will check more on this to get a viable
> solution. Please add your opinion. Can you share the name of the
> device which causes crash with these ATA commands, If I am able to get
> one I can try on that also.
>
>>> I have a large number of USB HDD's - with different vendors, and for
>>> all of them - it is showing Write Cache Enabled as false.
>>> The code works only for the Pen Drives or the USB HDD which do not
>>> have internal cache.
>>>
>>> Also, for journalling filesystem being used on USB HDD - it does
>>> becomes a cause of concern.
>>>
>>> Please share your opinion, I guess we need a change for mode sensing
>>> in the kernel code for USB HDD.
>>
>> Well that's a nastily complex problem.  It really needs to be
>> whitelisted in the USB stack, but if every drive is doing it, that's
>> quite a task.
>>
>> The question becomes how do we detect in a SCSI fashion that the device
>> has a write back cache if none of the standard SCSI mechanisms reports
>> it?
> As far as detecting in SCSI fashion – I wonder using that I would have
> never reached the conclusion that it is the Write Cache of USB HDD
> which is causing problem instead I would have been focusing on
> particular file system (XFS in my case –which in itself is complex) –
> there BARRIER support and also the Queue handling in the elevator with
> I/O scheduler.
> None of the sg utils is showing anything related with the Write Cache
> in USB HDD – which provide any hint that the Cache is enabled – this
> is a bit surprising because most of the high end USB mass storages
> device in the market have Write Cache in them.
>
> Thanks & Regards,
> Amit Sahrawat
>>
>> James
>>
>>
>>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-30 17:56                 ` Amit Sahrawat
@ 2011-09-30 18:11                   ` James Bottomley
  2011-09-30 18:30                     ` Amit Sahrawat
  0 siblings, 1 reply; 19+ messages in thread
From: James Bottomley @ 2011-09-30 18:11 UTC (permalink / raw)
  To: Amit Sahrawat
  Cc: linux-usb, linux-scsi, linux-kernel, linux-fsdevel,
	Christoph Hellwig

On Fri, 2011-09-30 at 23:26 +0530, Amit Sahrawat wrote:
> Adding linux-usb - to get more insight's into the problem.
> 
> On Fri, Sep 30, 2011 at 11:23 PM, Amit Sahrawat
> <amit.sahrawat83@gmail.com> wrote:
> > On Fri, Sep 30, 2011 at 5:48 PM, James Bottomley
> > <James.Bottomley@hansenpartnership.com> wrote:
> >> On Fri, 2011-09-30 at 12:26 +0530, Amit Sahrawat wrote:
> >>> Now, for the USB HDD which do have write cache - sginfo is showing
> >>> them to Write Cache Enabled as false.
> >>> Why do the result of hdparm identification and sginfo varies- (I know
> >>> they have different interface to work with and hdparm takes care of
> >>> that by using SG_IO interface from it's code)? hdparm showed me
> >>> correct results - that lead me to digging in the kernel code and
> >>> checking the performance for USB HDD with Write cache enabled/disabled
> >>> - which also showed that QUEUE ordering chosen for USB HDD is not
> >>> correct.
> >>
> >> Well, what all this means is the SATL in the USB device is implemented
> >> wrongly.  Since USB devices only preset SCSI interfaces, that's what we
> >> have to believe.
> >>
> >> hdparm when used correctly sends an ATA inquiry command wrapped in an
> >> ATA_12 or ATA_16 SCSI command.  A large number of legacy SATLs are known
> >> to crash on these commands.
> >>
> >> Are you sure the ATA command is reporting correctly?  A write back cache
> >> is a remarkably silly thing to enable for a USB device because they're
> >> highly likely to be surprise ejected which powers the device down.
> >>
> > In addition to the problem reported - there is one more thing I have
> > noticed with USB HDD - they should be shown as 'removable' but the
> > removable is marked only for USB PEN Drives. This seems to be a bit of
> > confusing, any mass storage media connected on USB port should be
> > recognized as removable.

I don't really think so.  Removable to sd means that the drive can be
removed from the housing, not that the connector cable is hot plug so
the whole disk can disappear.  I think your disk is the latter, and
therefore removable probably isn't what you want (otherwise the sd
driver will start probing for medium change and other things your device
won't understand).

> > So, for handling the issue, I would consider adding the handling in
> > slave_configure()(usb/storage/scsiglue) which marks the HDD/pen drives
> > as removable also signifying them to be USB based.
> > Then, as part of sd_revalidation – how about adding the ATA_IDENTIFY
> > command part if the device is USB HDD? As far as the result of
> > ATA_IDENTIFY is concerned – they return proper ‘256’ bytes - response
> > and the Words – 82, 85 used for feature supported and enabled/disabled
> > returns proper values for the USB HDD’s I have seen. In case of USB
> > pen drives – they return failure – I did not see any crash – maybe I
> > don’t have one of the legacy SATL based disk.
> > Since, I am new to this – I will check more on this to get a viable
> > solution. Please add your opinion. Can you share the name of the
> > device which causes crash with these ATA commands, If I am able to get
> > one I can try on that also.

How?  There are many USB devices whose SATL crashes and burns on ATA_12
or ATA_16, so this would add fragility to the detection path. The
detection path has to be cast iron because it has to work on a vast
range of devices.  The only way this could really work is to add it in
the usb storage driver and then replace the bad mode pages.

James

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-09-30 18:11                   ` James Bottomley
@ 2011-09-30 18:30                     ` Amit Sahrawat
  0 siblings, 0 replies; 19+ messages in thread
From: Amit Sahrawat @ 2011-09-30 18:30 UTC (permalink / raw)
  To: James Bottomley
  Cc: linux-usb, linux-scsi, linux-kernel, linux-fsdevel,
	Christoph Hellwig

Thanks James, I got your point will look more on this.

Regards,
Amit Sahrawat

On Fri, Sep 30, 2011 at 11:41 PM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Fri, 2011-09-30 at 23:26 +0530, Amit Sahrawat wrote:
>> Adding linux-usb - to get more insight's into the problem.
>>
>> On Fri, Sep 30, 2011 at 11:23 PM, Amit Sahrawat
>> <amit.sahrawat83@gmail.com> wrote:
>> > On Fri, Sep 30, 2011 at 5:48 PM, James Bottomley
>> > <James.Bottomley@hansenpartnership.com> wrote:
>> >> On Fri, 2011-09-30 at 12:26 +0530, Amit Sahrawat wrote:
>> >>> Now, for the USB HDD which do have write cache - sginfo is showing
>> >>> them to Write Cache Enabled as false.
>> >>> Why do the result of hdparm identification and sginfo varies- (I know
>> >>> they have different interface to work with and hdparm takes care of
>> >>> that by using SG_IO interface from it's code)? hdparm showed me
>> >>> correct results - that lead me to digging in the kernel code and
>> >>> checking the performance for USB HDD with Write cache enabled/disabled
>> >>> - which also showed that QUEUE ordering chosen for USB HDD is not
>> >>> correct.
>> >>
>> >> Well, what all this means is the SATL in the USB device is implemented
>> >> wrongly.  Since USB devices only preset SCSI interfaces, that's what we
>> >> have to believe.
>> >>
>> >> hdparm when used correctly sends an ATA inquiry command wrapped in an
>> >> ATA_12 or ATA_16 SCSI command.  A large number of legacy SATLs are known
>> >> to crash on these commands.
>> >>
>> >> Are you sure the ATA command is reporting correctly?  A write back cache
>> >> is a remarkably silly thing to enable for a USB device because they're
>> >> highly likely to be surprise ejected which powers the device down.
>> >>
>> > In addition to the problem reported - there is one more thing I have
>> > noticed with USB HDD - they should be shown as 'removable' but the
>> > removable is marked only for USB PEN Drives. This seems to be a bit of
>> > confusing, any mass storage media connected on USB port should be
>> > recognized as removable.
>
> I don't really think so.  Removable to sd means that the drive can be
> removed from the housing, not that the connector cable is hot plug so
> the whole disk can disappear.  I think your disk is the latter, and
> therefore removable probably isn't what you want (otherwise the sd
> driver will start probing for medium change and other things your device
> won't understand).
>
>> > So, for handling the issue, I would consider adding the handling in
>> > slave_configure()(usb/storage/scsiglue) which marks the HDD/pen drives
>> > as removable also signifying them to be USB based.
>> > Then, as part of sd_revalidation – how about adding the ATA_IDENTIFY
>> > command part if the device is USB HDD? As far as the result of
>> > ATA_IDENTIFY is concerned – they return proper ‘256’ bytes - response
>> > and the Words – 82, 85 used for feature supported and enabled/disabled
>> > returns proper values for the USB HDD’s I have seen. In case of USB
>> > pen drives – they return failure – I did not see any crash – maybe I
>> > don’t have one of the legacy SATL based disk.
>> > Since, I am new to this – I will check more on this to get a viable
>> > solution. Please add your opinion. Can you share the name of the
>> > device which causes crash with these ATA commands, If I am able to get
>> > one I can try on that also.
>
> How?  There are many USB devices whose SATL crashes and burns on ATA_12
> or ATA_16, so this would add fragility to the detection path. The
> detection path has to be cast iron because it has to work on a vast
> range of devices.  The only way this could really work is to add it in
> the usb storage driver and then replace the bad mode pages.
>
> James
>
>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Re: Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
       [not found] ` <CADDb1s2bVY04G1fZ=3KwCagZHm_dOmLPxsUBKven7=iBo_nU-g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2011-10-03 14:25   ` Alan Stern
  2011-10-03 16:06     ` Douglas Gilbert
  0 siblings, 1 reply; 19+ messages in thread
From: Alan Stern @ 2011-10-03 14:25 UTC (permalink / raw)
  To: Amit Sahrawat
  Cc: James Bottomley, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-scsi-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA, Christoph Hellwig

On Mon, 3 Oct 2011, Amit Sahrawat wrote:

> Hi,
> 
> Please find the USB Analyzer - logs for '6' USB based Mass Storage
> devices attached.

Too bad the analyzer log presents only the response, not the command.

> So, only for one of the USB HDD(Seagate - Free Agent), the response
> obtained is correct.

I don't understand the format of the Seagate Free Agent MODE SENSE
data.  Maybe someone else can interpret it; here it is for reference:

SCSI Op(3) ADDR(4) Tag(0x00000004) SCSI CDB MODE SENSE(6)
_______| Data(
__ 000: 1C 00 00 00 86 0B 00 02 00 00 12 A1 9E B0 3C 01 00 1A 0A 00 01 00 00 00 00 00 00 0B B8 00 00 00 
__ 032: 00 00 00 00 1A 0A 00 01 00 00 00 00 00 00 0B B8 A2 06 00 00 00 00 00 00 78 20 55 53 42 32 2E 30 
__ 064: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7F FF 00 00 00 00 80 FA 0B C2 50 21 4E 41 30 42 
__ 096: 36 58 33 4C 00 30 00 00 00 32 43 46 45 39 42 00 70 F5 12 00 74 FF 00 00 00 00 00 00 00 00 00 00 
__ 128: 3C 00 00 0B B8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02 50 01 
__ 160: 46 72 65 65 41 67 65 6E 74 20 47 6F 46 6C 65 78 10 50 11 46 72 65 65 41 67 65 6E 74 20 47 6F 46)

For the other devices this seems clear enough.  In most of the cases,
the data doesn't include the Caching page.  The Samsung and Transcend
devices _do_ provide their Caching pages, and in both of them the data
says that write caching is disabled.  (In the Samsung case this is
wrong undoubtedly because of the JMicron bridge -- JMicron's firmware
is notoriously buggy.)

If you can suggest a robust way of determining whether or not a drive 
supports SAT (one which won't cause non-supporting devices to crash), 
it could be added.  In the meantime, I'm not sure what else we can do.

Would it make sense to assume write caching is present and enabled if 
the drive does not provide a Caching page?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-10-03 14:25   ` Re: Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type) Alan Stern
@ 2011-10-03 16:06     ` Douglas Gilbert
  2011-10-03 18:10       ` Alan Stern
  0 siblings, 1 reply; 19+ messages in thread
From: Douglas Gilbert @ 2011-10-03 16:06 UTC (permalink / raw)
  To: Alan Stern
  Cc: Amit Sahrawat, James Bottomley, linux-usb, linux-scsi,
	linux-kernel, linux-fsdevel, Christoph Hellwig

On 11-10-03 04:25 PM, Alan Stern wrote:
> On Mon, 3 Oct 2011, Amit Sahrawat wrote:
>
>> Hi,
>>
>> Please find the USB Analyzer - logs for '6' USB based Mass Storage
>> devices attached.
>
> Too bad the analyzer log presents only the response, not the command.
>
>> So, only for one of the USB HDD(Seagate - Free Agent), the response
>> obtained is correct.
>
> I don't understand the format of the Seagate Free Agent MODE SENSE
> data.  Maybe someone else can interpret it; here it is for reference:
>
> SCSI Op(3) ADDR(4) Tag(0x00000004) SCSI CDB MODE SENSE(6)
> _______| Data(
> __ 000: 1C 00 00 00 86 0B 00 02 00 00 12 A1 9E B0 3C 01 00 1A 0A 00 01 00 00 00 00 00 00 0B B8 00 00 00
> __ 032: 00 00 00 00 1A 0A 00 01 00 00 00 00 00 00 0B B8 A2 06 00 00 00 00 00 00 78 20 55 53 42 32 2E 30
> __ 064: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7F FF 00 00 00 00 80 FA 0B C2 50 21 4E 41 30 42
> __ 096: 36 58 33 4C 00 30 00 00 00 32 43 46 45 39 42 00 70 F5 12 00 74 FF 00 00 00 00 00 00 00 00 00 00
> __ 128: 3C 00 00 0B B8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02 50 01
> __ 160: 46 72 65 65 41 67 65 6E 74 20 47 6F 46 6C 65 78 10 50 11 46 72 65 65 41 67 65 6E 74 20 47 6F 46)

The RBC device parameters mode page followed by a Power
Condition mode page. The RBC device parameters mode page
is the only SCSI page I have seen (mode, log, VPD, etc)
with a 5 byte field!

Decoded response to a probable MODE SENSE(6) "fetch all
pages" command:
   RBC device parameters mpage:
     WCD=0 [double negative: write cache enabled]
     Logical block size: 512 bytes
     Number of logical blocks: 0x12A19EB0 *** [160 GB]
     Power/performance: 0x3c
     READD: 0 [READ enabled]
     WRITED: 0 [WRITE enabled]
     FORMATD: 0 [FORMAT UNIT enabled]
     LOCKD: 1 [media cannot be locked]
   Power Condition mpage:
     IDLE=0
     STANDBY=1
     IDLE_CONDITION_TIMER=0
     STANDBY_CONDITION_TIMER=0xbb8 [300 seconds]

References: rbc-r10a.pdf [1999] + spc3r26 [2005]

Hopefully Seagate will switch to UAS(P) in the near future.


*** That is _not_ the address of the last valid LB as in
     the SCSI READ CAPACITY command!

> For the other devices this seems clear enough.  In most of the cases,
> the data doesn't include the Caching page.  The Samsung and Transcend
> devices _do_ provide their Caching pages, and in both of them the data
> says that write caching is disabled.  (In the Samsung case this is
> wrong undoubtedly because of the JMicron bridge -- JMicron's firmware
> is notoriously buggy.)
>
> If you can suggest a robust way of determining whether or not a drive
> supports SAT (one which won't cause non-supporting devices to crash),
> it could be added.  In the meantime, I'm not sure what else we can do.
>
> Would it make sense to assume write caching is present and enabled if
> the drive does not provide a Caching page?

No. You need to also take into account the RBC
device parameters mode page if present. See above.

Doug Gilbert

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-10-03 16:06     ` Douglas Gilbert
@ 2011-10-03 18:10       ` Alan Stern
       [not found]         ` <Pine.LNX.4.44L0.1110031408420.1882-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
  0 siblings, 1 reply; 19+ messages in thread
From: Alan Stern @ 2011-10-03 18:10 UTC (permalink / raw)
  To: Douglas Gilbert
  Cc: Amit Sahrawat, James Bottomley, linux-usb, linux-scsi,
	linux-kernel, linux-fsdevel, Christoph Hellwig

On Mon, 3 Oct 2011, Douglas Gilbert wrote:

> The RBC device parameters mode page followed by a Power
> Condition mode page. The RBC device parameters mode page
> is the only SCSI page I have seen (mode, log, VPD, etc)
> with a 5 byte field!
> 
> Decoded response to a probable MODE SENSE(6) "fetch all
> pages" command:
>    RBC device parameters mpage:
>      WCD=0 [double negative: write cache enabled]
>      Logical block size: 512 bytes
>      Number of logical blocks: 0x12A19EB0 *** [160 GB]
>      Power/performance: 0x3c
>      READD: 0 [READ enabled]
>      WRITED: 0 [WRITE enabled]
>      FORMATD: 0 [FORMAT UNIT enabled]
>      LOCKD: 1 [media cannot be locked]
>    Power Condition mpage:
>      IDLE=0
>      STANDBY=1
>      IDLE_CONDITION_TIMER=0
>      STANDBY_CONDITION_TIMER=0xbb8 [300 seconds]
> 
> References: rbc-r10a.pdf [1999] + spc3r26 [2005]
> 
> Hopefully Seagate will switch to UAS(P) in the near future.
> 
> 
> *** That is _not_ the address of the last valid LB as in
>      the SCSI READ CAPACITY command!

Thanks for the explanation.

> > Would it make sense to assume write caching is present and enabled if
> > the drive does not provide a Caching page?
> 
> No. You need to also take into account the RBC
> device parameters mode page if present. See above.

All right, suppose neither page is present.  Does it then make sense to 
assume by default that write caching is enabled?

Alan Stern


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
       [not found]         ` <Pine.LNX.4.44L0.1110031408420.1882-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
@ 2011-10-03 19:32           ` James Bottomley
  2011-10-03 19:53             ` Alan Stern
  0 siblings, 1 reply; 19+ messages in thread
From: James Bottomley @ 2011-10-03 19:32 UTC (permalink / raw)
  To: Alan Stern
  Cc: Douglas Gilbert, Amit Sahrawat, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	linux-scsi-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA, Christoph Hellwig

On Mon, 2011-10-03 at 14:10 -0400, Alan Stern wrote:
> > No. You need to also take into account the RBC
> > device parameters mode page if present. See above.
> 
> All right, suppose neither page is present.  Does it then make sense to 
> assume by default that write caching is enabled?

You're the USB expert ... if we do that, we'll start sending
SYNCHRONIZE_CACHE commands down to a whole slew of devices we didn't
before ... is that going to cause problems with any USB SATLs?

James


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
  2011-10-03 19:32           ` James Bottomley
@ 2011-10-03 19:53             ` Alan Stern
  0 siblings, 0 replies; 19+ messages in thread
From: Alan Stern @ 2011-10-03 19:53 UTC (permalink / raw)
  To: James Bottomley
  Cc: Douglas Gilbert, Amit Sahrawat, linux-usb, linux-scsi,
	linux-kernel, linux-fsdevel, Christoph Hellwig

On Mon, 3 Oct 2011, James Bottomley wrote:

> On Mon, 2011-10-03 at 14:10 -0400, Alan Stern wrote:
> > > No. You need to also take into account the RBC
> > > device parameters mode page if present. See above.
> > 
> > All right, suppose neither page is present.  Does it then make sense to 
> > assume by default that write caching is enabled?
> 
> You're the USB expert ... if we do that, we'll start sending
> SYNCHRONIZE_CACHE commands down to a whole slew of devices we didn't
> before ... is that going to cause problems with any USB SATLs?

Hmmm...  Actually, I doubt it would bother any SATLs, but it might well
bother other sorts of USB translation layers.  No way to tell without
trying it, and I don't really want to deal with the fallout.

Maybe a better question to be asking is this: What happens when one of 
these drives (the ones that report their caching capabilities 
incorrectly) is plugged into a Windows system?

Alan Stern


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2011-10-03 19:53 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <CADDb1s2bVY04G1fZ=3KwCagZHm_dOmLPxsUBKven7=iBo_nU-g@mail.gmail.com>
     [not found] ` <CADDb1s2bVY04G1fZ=3KwCagZHm_dOmLPxsUBKven7=iBo_nU-g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-10-03 14:25   ` Re: Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type) Alan Stern
2011-10-03 16:06     ` Douglas Gilbert
2011-10-03 18:10       ` Alan Stern
     [not found]         ` <Pine.LNX.4.44L0.1110031408420.1882-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2011-10-03 19:32           ` James Bottomley
2011-10-03 19:53             ` Alan Stern
2011-09-28 15:42 Amit Sahrawat
2011-09-28 15:54 ` BUG in kernel: Wrong Handling of USB HDD?s " Christoph Hellwig
2011-09-28 15:57 ` BUG in kernel: Wrong Handling of USB HDD’s " Amit Sahrawat
2011-09-28 21:29   ` James Bottomley
2011-09-29  9:19     ` Amit Sahrawat
2011-09-29 18:27       ` James Bottomley
2011-09-29 18:31         ` James Bottomley
2011-09-30  6:56           ` Amit Sahrawat
2011-09-30  7:06             ` NamJae Jeon
2011-09-30 12:18             ` James Bottomley
2011-09-30 17:53               ` Amit Sahrawat
2011-09-30 17:56                 ` Amit Sahrawat
2011-09-30 18:11                   ` James Bottomley
2011-09-30 18:30                     ` Amit Sahrawat

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).