Re: BUG in kernel: Wrong Handling of USB HDD’s in scsiglue(slave_configure) and scsi/sd(sd_read_cache_type)
From: Amit Sahrawat <hidden>
Date: 2011-09-28 15:57:23
Also in:
linux-scsi, lkml
From: Amit Sahrawat <hidden>
Date: 2011-09-28 15:57:23
Also in:
linux-scsi, lkml
Marking mail to linux-scsi. Thanks Christoph. Regards, Amit Sahrawat On Wed, Sep 28, 2011 at 9:12 PM, Amit Sahrawat [off-list ref] 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