Commit de322263 authored by Ilya Dryomov's avatar Ilya Dryomov

Btrfs: allow for resuming restriper after it was paused

Recognize BTRFS_BALANCE_RESUME flag passed from userspace.  We use the
same heuristics used when recovering balance after a crash to try to
start where we left off last time.
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent a7e99c69
...@@ -3106,6 +3106,20 @@ static long btrfs_ioctl_balance(struct btrfs_root *root, void __user *arg) ...@@ -3106,6 +3106,20 @@ static long btrfs_ioctl_balance(struct btrfs_root *root, void __user *arg)
ret = PTR_ERR(bargs); ret = PTR_ERR(bargs);
goto out; goto out;
} }
if (bargs->flags & BTRFS_BALANCE_RESUME) {
if (!fs_info->balance_ctl) {
ret = -ENOTCONN;
goto out_bargs;
}
bctl = fs_info->balance_ctl;
spin_lock(&fs_info->balance_lock);
bctl->flags |= BTRFS_BALANCE_RESUME;
spin_unlock(&fs_info->balance_lock);
goto do_balance;
}
} else { } else {
bargs = NULL; bargs = NULL;
} }
...@@ -3133,6 +3147,7 @@ static long btrfs_ioctl_balance(struct btrfs_root *root, void __user *arg) ...@@ -3133,6 +3147,7 @@ static long btrfs_ioctl_balance(struct btrfs_root *root, void __user *arg)
bctl->flags |= BTRFS_BALANCE_TYPE_MASK; bctl->flags |= BTRFS_BALANCE_TYPE_MASK;
} }
do_balance:
ret = btrfs_balance(bctl, bargs); ret = btrfs_balance(bctl, bargs);
/* /*
* bctl is freed in __cancel_balance or in free_fs_info if * bctl is freed in __cancel_balance or in free_fs_info if
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment