On 2.05.2018 15:29, Qu Wenruo wrote: > > > On 2018年05月02日 19:52, Nikolay Borisov wrote: >> Originally commit 2681e00f00fe ("btrfs-progs: check for matchingi >> free space in cache") added the account_super_bytes function to prevent >> false negative when running btrfs check. Turns out this function is >> really copied exclude_super_stripes, excluding the calls to >> exclude_super_stripes. Later commit e4797df6a9fa ("btrfs-progs: check >> the free space tree in btrfsck") introduced proper version of >> exclude_super_stripes. Instead of duplicating the function, just remove >> account_super_bytes and use exclude_super_stripes instead of the former. >> This also has the benefit of bringing the userspace code a bit closer >> to the kernel counterpart. >> >> Signed-off-by: Nikolay Borisov <nbori...@suse.com> > > Since these two functions are the same, it's completely fine to remove one.
As I mentioned, they are not "comlpetely" the same. The difference is that exclude_super_stripes will mark the stripes as EXTENT_UPTODATE in fs_info->pinned_extents via add_excluded_extent. Dunno if this has any repercussions on functionality. I've run the progs test suite and didn't observe any regressions. Also looking at the usage of fs_info->pinned_extents didn't see anything conspicuous. > > Reviewed-by: Qu Wenruo <w...@suse.com> > > Thanks, > Qu > >> --- >> extent-tree.c | 52 ++-------------------------------------------------- >> 1 file changed, 2 insertions(+), 50 deletions(-) >> >> diff --git a/extent-tree.c b/extent-tree.c >> index ea205ccf4c30..391f0a784710 100644 >> --- a/extent-tree.c >> +++ b/extent-tree.c >> @@ -3164,54 +3164,6 @@ static int find_first_block_group(struct btrfs_root >> *root, >> return ret; >> } >> >> -static void account_super_bytes(struct btrfs_fs_info *fs_info, >> - struct btrfs_block_group_cache *cache) >> -{ >> - u64 bytenr; >> - u64 *logical; >> - int stripe_len; >> - int i, nr, ret; >> - >> - if (cache->key.objectid < BTRFS_SUPER_INFO_OFFSET) { >> - stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->key.objectid; >> - cache->bytes_super += stripe_len; >> - } >> - >> - for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) { >> - bytenr = btrfs_sb_offset(i); >> - ret = btrfs_rmap_block(fs_info, >> - cache->key.objectid, bytenr, >> - 0, &logical, &nr, &stripe_len); >> - if (ret) >> - return; >> - >> - while (nr--) { >> - u64 start, len; >> - >> - if (logical[nr] > cache->key.objectid + >> - cache->key.offset) >> - continue; >> - >> - if (logical[nr] + stripe_len <= cache->key.objectid) >> - continue; >> - >> - start = logical[nr]; >> - if (start < cache->key.objectid) { >> - start = cache->key.objectid; >> - len = (logical[nr] + stripe_len) - start; >> - } else { >> - len = min_t(u64, stripe_len, >> - cache->key.objectid + >> - cache->key.offset - start); >> - } >> - >> - cache->bytes_super += len; >> - } >> - >> - kfree(logical); >> - } >> -} >> - >> int btrfs_read_block_groups(struct btrfs_root *root) >> { >> struct btrfs_path *path; >> @@ -3287,7 +3239,7 @@ int btrfs_read_block_groups(struct btrfs_root *root) >> if (btrfs_chunk_readonly(info, cache->key.objectid)) >> cache->ro = 1; >> >> - account_super_bytes(info, cache); >> + exclude_super_stripes(root, cache); >> >> ret = update_space_info(info, cache->flags, found_key.offset, >> btrfs_block_group_used(&cache->item), >> @@ -3331,7 +3283,7 @@ btrfs_add_block_group(struct btrfs_fs_info *fs_info, >> u64 bytes_used, u64 type, >> cache->flags = type; >> btrfs_set_block_group_flags(&cache->item, type); >> >> - account_super_bytes(fs_info, cache); >> + exclude_super_stripes(fs_info->extent_root, cache); >> ret = update_space_info(fs_info, cache->flags, size, bytes_used, >> &cache->space_info); >> BUG_ON(ret); >> > -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html