lkml.org 
[lkml]   [2019]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 063/106] btrfs: improve error handling of btrfs_add_link
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit 1690dd41e0cb1dade80850ed8a3eb0121b96d22f ]

    In the error handling block, err holds the return value of either
    btrfs_del_root_ref() or btrfs_del_inode_ref() but it hasn't been checked
    since it's introduction with commit fe66a05a0679 (Btrfs: improve error
    handling for btrfs_insert_dir_item callers) in 2012.

    If the error handling in the error handling fails, there's not much left
    to do and the abort either happened earlier in the callees or is
    necessary here.

    So if one of btrfs_del_root_ref() or btrfs_del_inode_ref() failed, abort
    the transaction, but still return the original code of the failure
    stored in 'ret' as this will be reported to the user.

    Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/btrfs/inode.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
    index 4f6dc56b4f4d..83b3a626c796 100644
    --- a/fs/btrfs/inode.c
    +++ b/fs/btrfs/inode.c
    @@ -6440,14 +6440,19 @@ fail_dir_item:
    err = btrfs_del_root_ref(trans, key.objectid,
    root->root_key.objectid, parent_ino,
    &local_index, name, name_len);
    -
    + if (err)
    + btrfs_abort_transaction(trans, err);
    } else if (add_backref) {
    u64 local_index;
    int err;

    err = btrfs_del_inode_ref(trans, root, name, name_len,
    ino, parent_ino, &local_index);
    + if (err)
    + btrfs_abort_transaction(trans, err);
    }
    +
    + /* Return the original error code */
    return ret;
    }

    --
    2.19.1


    \
     
     \ /
      Last update: 2019-01-24 20:53    [W:4.247 / U:0.668 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site