Messages in this thread | | | From | Roland Dreier <> | Subject | Re: [Compile Warning] 2.6.30-rc8 build | Date | Fri, 05 Jun 2009 10:28:00 -0700 |
| |
> I can't argue with gcc on this one either: > > drivers/scsi/sd.c: In function 'sd_read_capacity': > drivers/scsi/sd.c:1451: warning: comparison is always false due to limited range of data type > > It reads to my eyes as if the function can never > select read_capacity_16 for very large devices.
The code is:
if ((sizeof(sdkp->capacity) > 4) && (sdkp->capacity > 0xffffffffULL)) {
sdkp->capacity is a sector_t, and <linux/types.h> has:
#ifdef CONFIG_LBD typedef u64 sector_t; typedef u64 blkcnt_t; #else typedef unsigned long sector_t; typedef unsigned long blkcnt_t; #endif
so if you don't set CONFIG_LBD on a 32-bit architecture, then you are correct that sd.c won't ever hit the READ_CAPACITY(16) case, and the kernel won't be able to handle large SCSI disks.
| |