Message ID | 20200908075230.86856-2-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: add read-only support for subpage sector size | expand |
On 8.09.20 г. 10:52 ч., Qu Wenruo wrote: > In extent-io-test, there are two invalid tests: > - Invalid nodesize for test_eb_bitmaps() > Instead of the sectorsize and nodesize combination passed in, we're > always using hand-crafted nodesize. > Although it has some extra check for 64K page size, we can still hit > a case where PAGE_SIZE == 32K, then we got 128K nodesize which is > larger than max valid node size. > > Thankfully most machines are either 4K or 64K page size, thus we > haven't yet hit such case. > > - Invalid extent buffer bytenr > For 64K page size, the only combination we're going to test is > sectorsize = nodesize = 64K. > In that case, we'll try to create an extent buffer with 32K bytenr, > which is not aligned to sectorsize thus invalid. > > This patch will fix both problems by: > - Honor the sectorsize/nodesize combination > Now we won't bother to hand-craft a strange length and use it as > nodesize. > > - Use sectorsize as the 2nd run extent buffer start > This would test the case where extent buffer is aligned to sectorsize > but not always aligned to nodesize. > > Signed-off-by: Qu Wenruo <wqu@suse.com> Shouldn't you also modify btrfs_run_sanity_tests to extend test_sectorsize such that it contains a subpage blocksize? As it stands now test_eb_bitmaps will be called with sectorsize always being PAGE_SIZE and nodesize being a multiple of the PAGE_SIZE i.e for a 4k page that would be 4/8/16/32/64 k nodes <snip>
On 2020/9/9 下午8:26, Nikolay Borisov wrote: > > > On 8.09.20 г. 10:52 ч., Qu Wenruo wrote: >> In extent-io-test, there are two invalid tests: >> - Invalid nodesize for test_eb_bitmaps() >> Instead of the sectorsize and nodesize combination passed in, we're >> always using hand-crafted nodesize. >> Although it has some extra check for 64K page size, we can still hit >> a case where PAGE_SIZE == 32K, then we got 128K nodesize which is >> larger than max valid node size. >> >> Thankfully most machines are either 4K or 64K page size, thus we >> haven't yet hit such case. >> >> - Invalid extent buffer bytenr >> For 64K page size, the only combination we're going to test is >> sectorsize = nodesize = 64K. >> In that case, we'll try to create an extent buffer with 32K bytenr, >> which is not aligned to sectorsize thus invalid. >> >> This patch will fix both problems by: >> - Honor the sectorsize/nodesize combination >> Now we won't bother to hand-craft a strange length and use it as >> nodesize. >> >> - Use sectorsize as the 2nd run extent buffer start >> This would test the case where extent buffer is aligned to sectorsize >> but not always aligned to nodesize. >> >> Signed-off-by: Qu Wenruo <wqu@suse.com> > > Shouldn't you also modify btrfs_run_sanity_tests to extend > test_sectorsize such that it contains a subpage blocksize? As it stands > now test_eb_bitmaps will be called with sectorsize always being > PAGE_SIZE and nodesize being a multiple of the PAGE_SIZE i.e for a 4k > page that would be 4/8/16/32/64 k nodes Not yet, currently since it's just RO support, I'm not confident enough for the set_extent_bits() path. Thanks, Qu > > > <snip> >
diff --git a/fs/btrfs/tests/extent-io-tests.c b/fs/btrfs/tests/extent-io-tests.c index df7ce874a74b..73e96d505f4f 100644 --- a/fs/btrfs/tests/extent-io-tests.c +++ b/fs/btrfs/tests/extent-io-tests.c @@ -379,54 +379,50 @@ static int __test_eb_bitmaps(unsigned long *bitmap, struct extent_buffer *eb, static int test_eb_bitmaps(u32 sectorsize, u32 nodesize) { struct btrfs_fs_info *fs_info; - unsigned long len; unsigned long *bitmap = NULL; struct extent_buffer *eb = NULL; int ret; test_msg("running extent buffer bitmap tests"); - /* - * In ppc64, sectorsize can be 64K, thus 4 * 64K will be larger than - * BTRFS_MAX_METADATA_BLOCKSIZE. - */ - len = (sectorsize < BTRFS_MAX_METADATA_BLOCKSIZE) - ? sectorsize * 4 : sectorsize; - - fs_info = btrfs_alloc_dummy_fs_info(len, len); + fs_info = btrfs_alloc_dummy_fs_info(nodesize, sectorsize); if (!fs_info) { test_std_err(TEST_ALLOC_FS_INFO); return -ENOMEM; } - bitmap = kmalloc(len, GFP_KERNEL); + bitmap = kmalloc(nodesize, GFP_KERNEL); if (!bitmap) { test_err("couldn't allocate test bitmap"); ret = -ENOMEM; goto out; } - eb = __alloc_dummy_extent_buffer(fs_info, 0, len); + eb = __alloc_dummy_extent_buffer(fs_info, 0, nodesize); if (!eb) { test_std_err(TEST_ALLOC_ROOT); ret = -ENOMEM; goto out; } - ret = __test_eb_bitmaps(bitmap, eb, len); + ret = __test_eb_bitmaps(bitmap, eb, nodesize); if (ret) goto out; - /* Do it over again with an extent buffer which isn't page-aligned. */ free_extent_buffer(eb); - eb = __alloc_dummy_extent_buffer(fs_info, nodesize / 2, len); + + /* + * Test again for case where the tree block is sectorsize aligned but + * not nodesize aligned. + */ + eb = __alloc_dummy_extent_buffer(fs_info, sectorsize, nodesize); if (!eb) { test_std_err(TEST_ALLOC_ROOT); ret = -ENOMEM; goto out; } - ret = __test_eb_bitmaps(bitmap, eb, len); + ret = __test_eb_bitmaps(bitmap, eb, nodesize); out: free_extent_buffer(eb); kfree(bitmap);
In extent-io-test, there are two invalid tests: - Invalid nodesize for test_eb_bitmaps() Instead of the sectorsize and nodesize combination passed in, we're always using hand-crafted nodesize. Although it has some extra check for 64K page size, we can still hit a case where PAGE_SIZE == 32K, then we got 128K nodesize which is larger than max valid node size. Thankfully most machines are either 4K or 64K page size, thus we haven't yet hit such case. - Invalid extent buffer bytenr For 64K page size, the only combination we're going to test is sectorsize = nodesize = 64K. In that case, we'll try to create an extent buffer with 32K bytenr, which is not aligned to sectorsize thus invalid. This patch will fix both problems by: - Honor the sectorsize/nodesize combination Now we won't bother to hand-craft a strange length and use it as nodesize. - Use sectorsize as the 2nd run extent buffer start This would test the case where extent buffer is aligned to sectorsize but not always aligned to nodesize. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/tests/extent-io-tests.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-)