Thanks for posting that patch, Josef.
On Mon, Jul 15, 2013 at 6:59 PM, Josef Bacik <jbacik@xxxxxxxxxxxx> wrote:
>
> Alex pointed out a problem and fix that exists in the drop one snapshot at
> a
> time patch. If we decide we need to exit for whatever reason (umount for
> example) we will just exit the snapshot dropping without updating the drop
> progress. So the next time we go to resume we will BUG_ON() because we
> can't
> find the extent we left off at because we never updated it. This patch
> fixes
> the problem.
>
> Cc: stable@xxxxxxxxxxxxxxx
> Reported-by: Alex Lyakas <alex.btrfs@xxxxxxxxxxxxxxxxx>
> Signed-off-by: Josef Bacik <jbacik@xxxxxxxxxxxx>
> ---
> fs/btrfs/extent-tree.c | 14 ++++++++------
> 1 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index bc00b24..8c204e1 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -7584,11 +7584,6 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
> wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root);
>
> while (1) {
> - if (!for_reloc && btrfs_need_cleaner_sleep(root)) {
> - pr_debug("btrfs: drop snapshot early exit\n");
> - err = -EAGAIN;
> - goto out_end_trans;
> - }
>
> ret = walk_down_tree(trans, root, path, wc);
> if (ret < 0) {
> @@ -7616,7 +7611,8 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
> }
>
> BUG_ON(wc->level == 0);
> - if (btrfs_should_end_transaction(trans, tree_root)) {
> + if (btrfs_should_end_transaction(trans, tree_root) ||
> + (!for_reloc && btrfs_need_cleaner_sleep(root))) {
> ret = btrfs_update_root(trans, tree_root,
> &root->root_key,
> root_item);
> @@ -7627,6 +7623,12 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
> }
>
> btrfs_end_transaction_throttle(trans, tree_root);
> + if (!for_reloc && btrfs_need_cleaner_sleep(root))
> {
> + pr_debug("btrfs: drop snapshot early
> exit\n");
> + err = -EAGAIN;
> + goto out_free;
> + }
> +
> trans = btrfs_start_transaction(tree_root, 0);
> if (IS_ERR(trans)) {
> err = PTR_ERR(trans);
> --
> 1.7.7.6
>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html