On Tue, 2009-04-21 at 15:18 -0600, Matthew Wilcox wrote: > > this certainly fixes your problem. I'd prefer this patch instead, just > because I find the cast unaesthetic ... > > ---- > > 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@xxxxxxxxxxxxxxx> > > 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; > unsigned sector_size; > > do { > @@ -1413,7 +1413,7 @@ static int read_capacity_10(struct scsi_disk > *sdkp, struct scsi_device *sdp, > return -EOVERFLOW; > } > > - sdkp->capacity = lba + 1; > + sdkp->capacity = (sector_t)lba + 1; > return sector_size; > } That's fine with me too. This patch fixes my issue as well. Signed-off-by: Dave Hansen <dave@xxxxxxxxxxxxxxxxxx> -- Dave -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html