• Stefan Haberland's avatar
    block: check partition alignment · 633395b6
    Stefan Haberland authored
    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: default avatarStefan Haberland <sth@linux.vnet.ibm.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    633395b6
ioctl.c 15.1 KB