diff --git a/fs_mgr/liblp/builder.cpp b/fs_mgr/liblp/builder.cpp index 110d56e96..c39fbe790 100644 --- a/fs_mgr/liblp/builder.cpp +++ b/fs_mgr/liblp/builder.cpp @@ -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; } diff --git a/fs_mgr/liblp/builder_test.cpp b/fs_mgr/liblp/builder_test.cpp index 7d615a3a8..8f0816996 100644 --- a/fs_mgr/liblp/builder_test.cpp +++ b/fs_mgr/liblp/builder_test.cpp @@ -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);