lkml.org 
[lkml]   [2009]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC][PATCH] fix sign extension with 1.5TB usb-storage LBD=y
    On Tue, Apr 21, 2009 at 02:29:54PM -0700, Randy Dunlap wrote:
    > > Fix READ CAPACITY 10 with drives over 1TB
    > >
    > > Shifting an unsigned char implicitly casts it to a signed int. This
    > > caused 'lba' to sign-extend and Linux would then try READ CAPACITY 16
    > > which was not supported by at least one drive. Making 'lba' an unsigned
    > > int ensures that sign extension will not occur.
    > >
    > > Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
    > >
    > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
    > > index 3fcb64b..c856b1b 100644
    > > --- a/drivers/scsi/sd.c
    > > +++ b/drivers/scsi/sd.c
    > > @@ -1373,7 +1373,7 @@ static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp,
    > > int sense_valid = 0;
    > > int the_result;
    > > int retries = 3;
    > > - sector_t lba;
    > > + unsigned lba;
    >
    > sector_t is either unsigned long or u64, depending on CONFIG_LBD.
    > Are you saying (implying) that the higher-order bits of it don't matter here?
    > If so, I'd just like for that to be clear(er).

    We're reading 32 bits of information from the drive response. The top
    32 bits are implicitly zero.

    --
    Matthew Wilcox Intel Open Source Technology Centre
    "Bill, look, we understand that you're interested in selling us this
    operating system, but compare it to ours. We can't possibly take such
    a retrograde step."


    \
     
     \ /
      Last update: 2009-04-21 23:35    [W:0.046 / U:120.412 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site