[SCSI] set to WCE if usb cache quirk is present.
authorNamjae Jeon <namjae.jeon@samsung.com>
Sun, 8 Jul 2012 03:05:08 +0000 (23:05 -0400)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 20 Jul 2012 07:59:00 +0000 (08:59 +0100)
Make use of USB quirk method to identify such HDD while reading
the cache status in sd_probe(). If cache quirk is present for
the HDD, lets assume that cache is enabled and make WCE bit
equal to 1.

Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Pankaj Kumar <pankaj.km@samsung.com>
Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/sd.c
include/scsi/scsi_device.h

index 6e26db1..4df73e5 100644 (file)
@@ -2261,8 +2261,13 @@ bad_sense:
                sd_printk(KERN_ERR, sdkp, "Asking for cache data failed\n");
 
 defaults:
-       sd_printk(KERN_ERR, sdkp, "Assuming drive cache: write through\n");
-       sdkp->WCE = 0;
+       if (sdp->wce_default_on) {
+               sd_printk(KERN_NOTICE, sdkp, "Assuming drive cache: write back\n");
+               sdkp->WCE = 1;
+       } else {
+               sd_printk(KERN_ERR, sdkp, "Assuming drive cache: write through\n");
+               sdkp->WCE = 0;
+       }
        sdkp->RCD = 0;
        sdkp->DPOFUA = 0;
 }
index bd1a14d..7539f52 100644 (file)
@@ -154,6 +154,7 @@ struct scsi_device {
        unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */
        unsigned try_rc_10_first:1;     /* Try READ_CAPACACITY_10 first */
        unsigned is_visible:1;  /* is the device visible in sysfs */
+       unsigned wce_default_on:1;      /* Cache is ON by default */
 
        DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
        struct list_head event_list;    /* asserted events */