]> git.baikalelectronics.ru Git - kernel.git/commit
block: check partition alignment
authorStefan Haberland <sth@linux.vnet.ibm.com>
Mon, 19 Dec 2016 16:15:50 +0000 (17:15 +0100)
committerJens Axboe <axboe@fb.com>
Mon, 19 Dec 2016 16:20:59 +0000 (09:20 -0700)
commit49267e5cd1fc485a30a126ea0f7f9485812dec0b
tree871ee04fe6944d654043760bc36e02c453620e63
parent438975f5d1a2420b7ff12f3a1addbccd3970a051
block: check partition alignment

Partitions that are not aligned to the blocksize of a device may cause
invalid I/O requests because the blocklayer cares only about alignment
within the partition when building requests on partitions.

device
|--------4096--------|--------4096--------|--------4096--------|
partition offset 512byte
|-512-|--------4096--------|--------4096--------|--------4096--------|

When reading/writing one 4k block of the partition this maps to
reading/writing with an offset of 512 byte of the device leading to
unaligned requests for the device which in turn may cause unexpected
behavior of the device driver.

For DASD devices we have to translate the block number into a cylinder,
head, record format. The unaligned requests lead to wrong calculation
and therefore to misdirected I/O. In a "good" case this leads to I/O
errors because the underlying hardware detects the wrong addressing.
In a worst case scenario this might destroy data on the device.

To prevent partitions that are not aligned to the physical blocksize
of a device check for the alignment in the blkpg_ioctl.

Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/ioctl.c