On 2018年05月02日 20:49, Nikolay Borisov wrote: > > > 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.
Yeah, still same conclusion here. All pinned_extents usage I found is either really for pinned extents of current transaction (EXTENT_DIRTY) or this excluded usage (EXTENT_UPTODATE). And unlike EXTENT_DIRTY, EXTENT_UPTODATE won't be removed after transaction commit, so if I didn't miss anything important, it should be OK. Just adding Su for this, as he worked on pinning down tree blocks for lowmem mode extent init re-init, he may be more experienced in this field. Despite that, such abuse of EXTENT_* bits in different trees at least need extra comment for them later. Thanks, Qu > >> >> 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 > -- 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