summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/free-space-cache.h
diff options
context:
space:
mode:
authorBoris Burkov <boris@bur.io>2020-11-18 15:06:25 -0800
committerDavid Sterba <dsterba@suse.com>2020-12-09 19:16:09 +0100
commit36b216c85eb9d7f59ac1cb8b117376e20acc6cbc (patch)
tree412321f25d6f2ec44657c6f8bcbe2dd94605e662 /fs/btrfs/free-space-cache.h
parent2838d255cb9b85a845efc3bbd3f6fc66ed883d35 (diff)
downloadlinux-36b216c85eb9d7f59ac1cb8b117376e20acc6cbc.tar.gz
linux-36b216c85eb9d7f59ac1cb8b117376e20acc6cbc.tar.bz2
linux-36b216c85eb9d7f59ac1cb8b117376e20acc6cbc.zip
btrfs: remove free space items when disabling space cache v1
When the filesystem transitions from space cache v1 to v2 or to nospace_cache, it removes the old cached data, but does not remove the FREE_SPACE items nor the free space inodes they point to. This doesn't cause any issues besides being a bit inefficient, since these items no longer do anything useful. To fix it, when we are mounting, and plan to disable the space cache, destroy each block group's free space item and free space inode. The code to remove the items is lifted from the existing use case of removing the block group, with a light adaptation to handle whether or not we have already looked up the free space inode. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Boris Burkov <boris@bur.io> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/free-space-cache.h')
-rw-r--r--fs/btrfs/free-space-cache.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/free-space-cache.h b/fs/btrfs/free-space-cache.h
index 3eff615c30b8..ecb09a02d544 100644
--- a/fs/btrfs/free-space-cache.h
+++ b/fs/btrfs/free-space-cache.h
@@ -82,6 +82,9 @@ struct inode *lookup_free_space_inode(struct btrfs_block_group *block_group,
int create_free_space_inode(struct btrfs_trans_handle *trans,
struct btrfs_block_group *block_group,
struct btrfs_path *path);
+int btrfs_remove_free_space_inode(struct btrfs_trans_handle *trans,
+ struct inode *inode,
+ struct btrfs_block_group *block_group);
int btrfs_check_trunc_cache_free_space(struct btrfs_fs_info *fs_info,
struct btrfs_block_rsv *rsv);