diff options
author | Miao Xie <miaox@cn.fujitsu.com> | 2013-05-13 13:55:09 +0000 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-05-17 21:40:22 -0400 |
commit | 7b61cd92242542944fc27024900c495a6a7b3396 (patch) | |
tree | c2a5556859fd55642a6bc1728f62c1da11926c3b /fs/btrfs/extent-tree.c | |
parent | 7cfa9e51d2948ae90e7599cc114dcce2c7c2b1fc (diff) | |
download | op-kernel-dev-7b61cd92242542944fc27024900c495a6a7b3396.zip op-kernel-dev-7b61cd92242542944fc27024900c495a6a7b3396.tar.gz |
Btrfs: don't use global block reservation for inode cache truncation
It is very likely that there are lots of subvolumes/snapshots in the filesystem,
so if we use global block reservation to do inode cache truncation, we may hog
all the free space that is reserved in global rsv. So it is better that we do
the free space reservation for inode cache truncation by ourselves.
Cc: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r-- | fs/btrfs/extent-tree.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index c4c94b3..162a66b 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -3106,6 +3106,11 @@ again: WARN_ON(ret); if (i_size_read(inode) > 0) { + ret = btrfs_check_trunc_cache_free_space(root, + &root->fs_info->global_block_rsv); + if (ret) + goto out_put; + ret = btrfs_truncate_free_space_cache(root, trans, path, inode); if (ret) |