[SCSI] sd: fix computation of the full size of the device
authorH. Peter Anvin <hpa@zytor.com>
Tue, 14 Oct 2008 18:34:20 +0000 (11:34 -0700)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 23 Oct 2008 16:42:20 +0000 (11:42 -0500)
When computing the full size of the device, we need to cast
sdkp->capacity before shifting, since in some configurations sector_t
can be a 32-bit number.

Also, change ffz(~x) to the more idiomatic ilog2(x).

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/sd.c

index 7e22aa7b8b8a9072f806497bbfed7377fa09e86f..7ba70bef8b5d03e8f5cd41ab35e2906123381e56 100644 (file)
@@ -1436,7 +1436,7 @@ got_data:
 
        {
                char cap_str_2[10], cap_str_10[10];
-               u64 sz = sdkp->capacity << ffz(~sector_size);
+               u64 sz = (u64)sdkp->capacity << ilog2(sector_size);
 
                string_get_size(sz, STRING_UNITS_2, cap_str_2,
                                sizeof(cap_str_2));