mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 07:50:04 +00:00
libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2)
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@pobox.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
cf90bfe2eb
commit
45c4d015a9
@ -1025,8 +1025,8 @@ static inline int ata_ok(u8 status)
|
|||||||
|
|
||||||
static inline int lba_28_ok(u64 block, u32 n_block)
|
static inline int lba_28_ok(u64 block, u32 n_block)
|
||||||
{
|
{
|
||||||
/* check the ending block number */
|
/* check the ending block number: must be LESS THAN 0x0fffffff */
|
||||||
return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256);
|
return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int lba_48_ok(u64 block, u32 n_block)
|
static inline int lba_48_ok(u64 block, u32 n_block)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user