diff options
author | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2013-04-25 16:04:52 +0000 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-05-06 15:55:20 -0400 |
commit | 3d7b5a2882133a04716903b1f4878a64c6610842 (patch) | |
tree | 421d6ce758023c9a5b490592040e661d3db2ca09 /fs | |
parent | 2f2320360b0c35b86938bfc561124474f0dac6e4 (diff) | |
download | linux-3.10-3d7b5a2882133a04716903b1f4878a64c6610842.tar.gz linux-3.10-3d7b5a2882133a04716903b1f4878a64c6610842.tar.bz2 linux-3.10-3d7b5a2882133a04716903b1f4878a64c6610842.zip |
Btrfs: automatic rescan after "quota enable" command
When qgroup tracking is enabled, we do an automatic cycle of the new rescan
mechanism.
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/qgroup.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index da8458357b5..9d49c586995 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1493,10 +1493,14 @@ int btrfs_run_qgroups(struct btrfs_trans_handle *trans, { struct btrfs_root *quota_root = fs_info->quota_root; int ret = 0; + int start_rescan_worker = 0; if (!quota_root) goto out; + if (!fs_info->quota_enabled && fs_info->pending_quota_state) + start_rescan_worker = 1; + fs_info->quota_enabled = fs_info->pending_quota_state; spin_lock(&fs_info->qgroup_lock); @@ -1522,6 +1526,13 @@ int btrfs_run_qgroups(struct btrfs_trans_handle *trans, if (ret) fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT; + if (!ret && start_rescan_worker) { + ret = btrfs_qgroup_rescan(fs_info); + if (ret) + pr_err("btrfs: start rescan quota failed: %d\n", ret); + ret = 0; + } + out: return ret; |