Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eaa05dfc authored by Namjae Jeon's avatar Namjae Jeon Committed by James Bottomley
Browse files

[SCSI] usb-storage: add support for write cache quirk



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: default avatarNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: default avatarPankaj Kumar <pankaj.km@samsung.com>
Signed-off-by: default avatarAmit Sahrawat <a.sahrawat@samsung.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent b81478d8
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2932,6 +2932,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
					initial READ(10) command);
				o = CAPACITY_OK (accept the capacity
					reported by the device);
				p = WRITE_CACHE (the device cache is ON
					by default);
				r = IGNORE_RESIDUE (the device reports
					bogus residue values);
				s = SINGLE_LUN (the device has only one
+5 −0
Original line number Diff line number Diff line
@@ -236,6 +236,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
+4 −1
Original line number Diff line number Diff line
@@ -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;
+3 −1
Original line number Diff line number Diff line
@@ -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 };