btrfs: move clearing of EXCL_OP out of __cancel_balance
[sfrench/cifs-2.6.git] / fs / btrfs / volumes.c
index 1da46365657b2376a56c81ed297c388d52ce752a..7e3656c9798b9005bb597519cb1bf3c38e8c0ae5 100644 (file)
@@ -3780,8 +3780,6 @@ static void __cancel_balance(struct btrfs_fs_info *fs_info)
        ret = del_balance_item(fs_info);
        if (ret)
                btrfs_handle_fs_error(fs_info, ret, NULL);
-
-       clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
 }
 
 /* Non-zero return value signifies invalidity */
@@ -3939,6 +3937,7 @@ int btrfs_balance(struct btrfs_balance_control *bctl,
        if ((ret && ret != -ECANCELED && ret != -ENOSPC) ||
            balance_need_close(fs_info)) {
                __cancel_balance(fs_info);
+               clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
        }
 
        wake_up(&fs_info->balance_wait_q);
@@ -3947,10 +3946,10 @@ int btrfs_balance(struct btrfs_balance_control *bctl,
 out:
        if (bctl->flags & BTRFS_BALANCE_RESUME)
                __cancel_balance(fs_info);
-       else {
+       else
                kfree(bctl);
-               clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
-       }
+       clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
+
        return ret;
 }
 
@@ -4118,8 +4117,10 @@ int btrfs_cancel_balance(struct btrfs_fs_info *fs_info)
                mutex_lock(&fs_info->volume_mutex);
                mutex_lock(&fs_info->balance_mutex);
 
-               if (fs_info->balance_ctl)
+               if (fs_info->balance_ctl) {
                        __cancel_balance(fs_info);
+                       clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags);
+               }
 
                mutex_unlock(&fs_info->volume_mutex);
        }