Add support for write cache quirk on usb hdd. scsi driver will be set to wce
by detecting write cache quirk in quirk list when plugging usb hdd.
Signed-off-by: Namjae Jeon <[email protected]>
Signed-off-by: Pankaj Kumar <[email protected]>
Signed-off-by: Amit Sahrawat <[email protected]>
---
drivers/usb/storage/scsiglue.c | 5 +++++
drivers/usb/storage/usb.c | 5 ++++-
include/linux/usb_usual.h | 4 +++-
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index a324a5d..fe42547 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -230,6 +230,11 @@ static int slave_configure(struct scsi_device *sdev)
US_FL_SCM_MULT_TARG)) &&
us->protocol == USB_PR_BULK)
us->use_last_sector_hacks = 1;
+
+ /* Check if write cache default on flag is set or not */
+ if (us->fflags & US_FL_WRITE_CACHE)
+ sdev->wce_default_on = 1;
+
} else {
/* Non-disk-type devices don't need to blacklist any pages
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index e23c30a..d012fe4 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -473,7 +473,7 @@ static void adjust_quirks(struct us_data *us)
US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE |
US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT |
US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 |
- US_FL_INITIAL_READ10);
+ US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE);
p = quirks;
while (*p) {
@@ -529,6 +529,9 @@ static void adjust_quirks(struct us_data *us)
case 'o':
f |= US_FL_CAPACITY_OK;
break;
+ case 'p':
+ f |= US_FL_WRITE_CACHE;
+ break;
case 'r':
f |= US_FL_IGNORE_RESIDUE;
break;
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
index 17df360..96fc152 100644
--- a/include/linux/usb_usual.h
+++ b/include/linux/usb_usual.h
@@ -64,7 +64,9 @@
US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \
/* cannot handle READ_CAPACITY_16 */ \
US_FLAG(INITIAL_READ10, 0x00100000) \
- /* Initial READ(10) (and others) must be retried */
+ /* Initial READ(10) (and others) must be retried */ \
+ US_FLAG(WRITE_CACHE, 0x00200000) \
+ /* Write Cache status is not available */
#define US_FLAG(name, value) US_FL_##name = value ,
enum { US_DO_ALL_FLAGS };
--
1.7.9.5
On Sat, 9 Jun 2012, Namjae Jeon wrote:
> Add support for write cache quirk on usb hdd. scsi driver will be set to wce
> by detecting write cache quirk in quirk list when plugging usb hdd.
> --- a/include/linux/usb_usual.h
> +++ b/include/linux/usb_usual.h
> @@ -64,7 +64,9 @@
> US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \
> /* cannot handle READ_CAPACITY_16 */ \
> US_FLAG(INITIAL_READ10, 0x00100000) \
> - /* Initial READ(10) (and others) must be retried */
> + /* Initial READ(10) (and others) must be retried */ \
> + US_FLAG(WRITE_CACHE, 0x00200000) \
> + /* Write Cache status is not available */
The documentation for the new flag should be added in the same patch
along with the flag itself. There's no reason to have separate
patches.
Alan Stern
2012/6/11, Alan Stern <[email protected]>:
> On Sat, 9 Jun 2012, Namjae Jeon wrote:
>
>> Add support for write cache quirk on usb hdd. scsi driver will be set to
>> wce
>> by detecting write cache quirk in quirk list when plugging usb hdd.
>
>> --- a/include/linux/usb_usual.h
>> +++ b/include/linux/usb_usual.h
>> @@ -64,7 +64,9 @@
>> US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \
>> /* cannot handle READ_CAPACITY_16 */ \
>> US_FLAG(INITIAL_READ10, 0x00100000) \
>> - /* Initial READ(10) (and others) must be retried */
>> + /* Initial READ(10) (and others) must be retried */ \
>> + US_FLAG(WRITE_CACHE, 0x00200000) \
>> + /* Write Cache status is not available */
>
> The documentation for the new flag should be added in the same patch
> along with the flag itself. There's no reason to have separate
> patches.
Hi. Alan.
Okay, I see. I will merge documentation patch with this patch.
Thank you.
>
> Alan Stern
>
>