liblp: Handle invalid alignment offsets correctly.

When stacking devices with dm-linear, it is possible to get a -1
alignment offset. In this case we should set alignment_offset to 0
rather than fail later trying to divide -1 by the sector size.

Bug: 134536978
Test: manual test
Change-Id: I3862fdda69531a3b230b7316707469a49ba871d6
This commit is contained in:
David Anderson 2019-06-19 19:01:14 -07:00
parent 3215fd93c7
commit 2ca0700b45

View file

@ -64,6 +64,12 @@ bool GetBlockDeviceInfo(const std::string& block_device, BlockDeviceInfo* device
PERROR << __PRETTY_FUNCTION__ << "BLKALIGNOFF failed on " << block_device;
return false;
}
// The kernel can return -1 here when misaligned devices are stacked (i.e.
// device-mapper).
if (alignment_offset == -1) {
alignment_offset = 0;
}
int logical_block_size;
if (ioctl(fd, BLKSSZGET, &logical_block_size) < 0) {
PERROR << __PRETTY_FUNCTION__ << "BLKSSZGET failed on " << block_device;