Btrfs: automatic rescan after "quota enable" command
authorJan Schmidt <list.btrfs@jan-o-sch.net>
Thu, 25 Apr 2013 16:04:52 +0000 (16:04 +0000)
committerJosef Bacik <jbacik@fusionio.com>
Mon, 6 May 2013 19:55:20 +0000 (15:55 -0400)
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>
fs/btrfs/qgroup.c

index da8458357b57040ef04b35e5776bc8ef7a9449f5..9d49c586995a18e2aaca7aed94c84b6abd735a2c 100644 (file)
@@ -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;