lkml.org 
[lkml]   [2020]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 160/257] btrfs: reloc: clean dirty subvols if we fail to start a transaction
    Date
    From: Josef Bacik <josef@toxicpanda.com>

    commit 6217b0fadd4473a16fabc6aecd7527a9f71af534 upstream.

    If we do merge_reloc_roots() we could insert a few roots onto the dirty
    subvol roots list, where we hold a ref on them. If we fail to start the
    transaction we need to run clean_dirty_subvols() in order to cleanup the
    refs.

    CC: stable@vger.kernel.org # 5.4+
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/btrfs/relocation.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/fs/btrfs/relocation.c
    +++ b/fs/btrfs/relocation.c
    @@ -4221,10 +4221,10 @@ restart:
    goto out_free;
    }
    btrfs_commit_transaction(trans);
    +out_free:
    ret = clean_dirty_subvols(rc);
    if (ret < 0 && !err)
    err = ret;
    -out_free:
    btrfs_free_block_rsv(fs_info, rc->block_rsv);
    btrfs_free_path(path);
    return err;
    @@ -4622,10 +4622,10 @@ int btrfs_recover_relocation(struct btrf
    trans = btrfs_join_transaction(rc->extent_root);
    if (IS_ERR(trans)) {
    err = PTR_ERR(trans);
    - goto out_free;
    + goto out_clean;
    }
    err = btrfs_commit_transaction(trans);
    -
    +out_clean:
    ret = clean_dirty_subvols(rc);
    if (ret < 0 && !err)
    err = ret;

    \
     
     \ /
      Last update: 2020-04-16 16:58    [W:4.030 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site