diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
-rw-r--r-- | drivers/usb/storage/scsiglue.c | 5 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 5 | ||||
-rw-r--r-- | include/linux/usb_usual.h | 4 |
4 files changed, 14 insertions, 2 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index a92c5ebf373e..c68634edd451 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -2932,6 +2932,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
2932 | initial READ(10) command); | 2932 | initial READ(10) command); |
2933 | o = CAPACITY_OK (accept the capacity | 2933 | o = CAPACITY_OK (accept the capacity |
2934 | reported by the device); | 2934 | reported by the device); |
2935 | p = WRITE_CACHE (the device cache is ON | ||
2936 | by default); | ||
2935 | r = IGNORE_RESIDUE (the device reports | 2937 | r = IGNORE_RESIDUE (the device reports |
2936 | bogus residue values); | 2938 | bogus residue values); |
2937 | s = SINGLE_LUN (the device has only one | 2939 | s = SINGLE_LUN (the device has only one |
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c index 11418da9bc09..a3d54366afcc 100644 --- a/drivers/usb/storage/scsiglue.c +++ b/drivers/usb/storage/scsiglue.c | |||
@@ -236,6 +236,11 @@ static int slave_configure(struct scsi_device *sdev) | |||
236 | US_FL_SCM_MULT_TARG)) && | 236 | US_FL_SCM_MULT_TARG)) && |
237 | us->protocol == USB_PR_BULK) | 237 | us->protocol == USB_PR_BULK) |
238 | us->use_last_sector_hacks = 1; | 238 | us->use_last_sector_hacks = 1; |
239 | |||
240 | /* Check if write cache default on flag is set or not */ | ||
241 | if (us->fflags & US_FL_WRITE_CACHE) | ||
242 | sdev->wce_default_on = 1; | ||
243 | |||
239 | } else { | 244 | } else { |
240 | 245 | ||
241 | /* Non-disk-type devices don't need to blacklist any pages | 246 | /* 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 e23c30ab66da..d012fe4329e7 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) | |||
473 | US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE | | 473 | US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE | |
474 | US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT | | 474 | US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT | |
475 | US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 | | 475 | US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 | |
476 | US_FL_INITIAL_READ10); | 476 | US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE); |
477 | 477 | ||
478 | p = quirks; | 478 | p = quirks; |
479 | while (*p) { | 479 | while (*p) { |
@@ -529,6 +529,9 @@ static void adjust_quirks(struct us_data *us) | |||
529 | case 'o': | 529 | case 'o': |
530 | f |= US_FL_CAPACITY_OK; | 530 | f |= US_FL_CAPACITY_OK; |
531 | break; | 531 | break; |
532 | case 'p': | ||
533 | f |= US_FL_WRITE_CACHE; | ||
534 | break; | ||
532 | case 'r': | 535 | case 'r': |
533 | f |= US_FL_IGNORE_RESIDUE; | 536 | f |= US_FL_IGNORE_RESIDUE; |
534 | break; | 537 | break; |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index 17df3600bcef..e84e769aaddc 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
@@ -64,7 +64,9 @@ | |||
64 | US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \ | 64 | US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \ |
65 | /* cannot handle READ_CAPACITY_16 */ \ | 65 | /* cannot handle READ_CAPACITY_16 */ \ |
66 | US_FLAG(INITIAL_READ10, 0x00100000) \ | 66 | US_FLAG(INITIAL_READ10, 0x00100000) \ |
67 | /* Initial READ(10) (and others) must be retried */ | 67 | /* Initial READ(10) (and others) must be retried */ \ |
68 | US_FLAG(WRITE_CACHE, 0x00200000) \ | ||
69 | /* Write Cache status is not available */ | ||
68 | 70 | ||
69 | #define US_FLAG(name, value) US_FL_##name = value , | 71 | #define US_FLAG(name, value) US_FL_##name = value , |
70 | enum { US_DO_ALL_FLAGS }; | 72 | enum { US_DO_ALL_FLAGS }; |