Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de322263 authored by Ilya Dryomov's avatar Ilya Dryomov
Browse files

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
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -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)
		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