Don't error on block size mismatches.

liblp treats the term "block size" ambiguously when it compares the logical
hardware block size with the file system block size (which for all
intents and purposes must be 4K). This warning is thus spurious on
devices with say a 512 logical block size. However, liblp's block size
should at least be a multiple of this, so change the check accordingly.

Bug: 123317012
Test: liblp_test gtest
Change-Id: I0f41f6bae60a512ab8d313e487c28606daa661a6
This commit is contained in:
David Anderson 2019-01-23 19:24:03 -08:00
parent dec436438a
commit 2e1c5ac5fd
2 changed files with 9 additions and 3 deletions

View file

@ -838,9 +838,10 @@ bool MetadataBuilder::UpdateBlockDeviceInfo(size_t index, const BlockDeviceInfo&
<< block_device.size << ")";
return false;
}
if (device_info.logical_block_size != geometry_.logical_block_size) {
LERROR << "Device logical block size does not match (got " << device_info.logical_block_size
<< ", expected " << geometry_.logical_block_size << ")";
if (geometry_.logical_block_size % device_info.logical_block_size) {
LERROR << "Device logical block size is misaligned (block size="
<< device_info.logical_block_size << ", alignment=" << geometry_.logical_block_size
<< ")";
return false;
}

View file

@ -495,6 +495,11 @@ TEST_F(BuilderTest, UpdateBlockDeviceInfo) {
EXPECT_EQ(new_info.size, 1024 * 1024);
new_info.logical_block_size = 512;
ASSERT_TRUE(builder->UpdateBlockDeviceInfo("super", new_info));
ASSERT_TRUE(builder->GetBlockDeviceInfo("super", &new_info));
EXPECT_EQ(new_info.logical_block_size, 4096);
new_info.logical_block_size = 7;
ASSERT_FALSE(builder->UpdateBlockDeviceInfo("super", new_info));
ASSERT_TRUE(builder->GetBlockDeviceInfo("super", &new_info));
EXPECT_EQ(new_info.logical_block_size, 4096);