Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757008Ab2FFP5a (ORCPT ); Wed, 6 Jun 2012 11:57:30 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:51288 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1757021Ab2FFP51 (ORCPT ); Wed, 6 Jun 2012 11:57:27 -0400 Date: Wed, 6 Jun 2012 11:57:26 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Namjae Jeon cc: James.Bottomley@HansenPartnership.com, , , , , , Namjae Jeon , Pankaj Kumar , Amit Sahrawat Subject: Re: [PATCH 2/3] usb: storage: add support write cache quirk on usb hdd In-Reply-To: <1338985247-9720-1-git-send-email-linkinjeon@gmail.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3455 Lines: 99 On Wed, 6 Jun 2012, Namjae Jeon wrote: > Add support 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 > Signed-off-by: Pankaj Kumar > Signed-off-by: Amit Sahrawat > --- > drivers/usb/storage/scsiglue.c | 6 ++++++ > drivers/usb/storage/usb.c | 5 ++++- > include/linux/usb/quirks.h | 3 +++ > include/linux/usb_usual.h | 4 +++- > 4 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c > index a324a5d..f7d0ea5 100644 > --- a/drivers/usb/storage/scsiglue.c > +++ b/drivers/usb/storage/scsiglue.c > @@ -51,6 +51,7 @@ > #include > #include > #include > +#include > > #include "usb.h" > #include "scsiglue.h" > @@ -230,6 +231,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 for the cache quirk present or not */ > + if (us->pusb_dev->quirks & USB_QUIRK_WRITE_CACHE || > + us->fflags & US_FL_WRITE_CACHE) > + sdev->wce_quirk = 1; This is very wrong. Your new quirk should be added only to us->fflags, not to us->pusb_dev->quirks. > --- 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) { > @@ -538,6 +538,9 @@ static void adjust_quirks(struct us_data *us) > case 'w': > f |= US_FL_NO_WP_DETECT; > break; > + case 'p': > + f |= US_FL_WRITE_CACHE; > + break; These cases are in alphabetical order. Please keep them that way. Also, if you're going to change a module parameter like this then you _must_ update the description in Documentation/kernel-parameters.txt. > --- a/include/linux/usb/quirks.h > +++ b/include/linux/usb/quirks.h > @@ -30,4 +30,7 @@ > descriptor */ > #define USB_QUIRK_DELAY_INIT 0x00000040 > > +/* Device can't handle cache status request */ > +#define USB_QUIRK_WRITE_CACHE 0x00000080 As mentioned above, this is wrong. > --- 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) \ And this is right. But please try to make your '\' characters line up with the existing ones. > + /* Cache read status is not correct */ This comment, however is wrong. The flag applies when the cache status is not _available_ rather than when it is not _correct_. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/