From: Greg KH on
2.6.33-stable review patch. If anyone has any objections, please let us know.


From: Mark Lord <kernel(a)>

commit 45c4d015a92f72ec47acd0c7557abdc0c8a6499d upstream.

Most drives from Seagate, Hitachi, and possibly other brands,
do not allow LBA28 access to sector number 0x0fffffff (2^28 - 1).
So instead use LBA48 for such accesses.

This bug could bite a lot of systems, especially when the user has
taken care to align partitions to 4KB boundaries. On misaligned systems,
it is less likely to be encountered, since a 4KB read would end at
0x10000000 rather than at 0x0fffffff.

Signed-off-by: Mark Lord <mlord(a)>
Signed-off-by: Jeff Garzik <jgarzik(a)>
Signed-off-by: Greg Kroah-Hartman <gregkh(a)>

include/linux/ata.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -1024,8 +1024,8 @@ static inline int ata_ok(u8 status)

static inline int lba_28_ok(u64 block, u32 n_block)
- /* check the ending block number */
- return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256);
+ /* check the ending block number: must be LESS THAN 0x0fffffff */
+ return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256);

static inline int lba_48_ok(u64 block, u32 n_block)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)
More majordomo info at
Please read the FAQ at