lkml.org 
[lkml]   [2021]   [Sep]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 337/432] btrfs: tree-log: check btrfs_lookup_data_extent return value
    Date
    From: Marcos Paulo de Souza <mpdesouza@suse.com>

    [ Upstream commit 3736127a3aa805602b7a2ad60ec9cfce68065fbb ]

    Function btrfs_lookup_data_extent calls btrfs_search_slot to verify if
    the EXTENT_ITEM exists in the extent tree. btrfs_search_slot can return
    values bellow zero if an error happened.

    Function replay_one_extent currently checks if the search found
    something (0 returned) and increments the reference, and if not, it
    seems to evaluate as 'not found'.

    Fix the condition by checking if the value was bellow zero and return
    early.

    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
    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/tree-log.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
    index e6430ac9bbe8..7037e5855d2a 100644
    --- a/fs/btrfs/tree-log.c
    +++ b/fs/btrfs/tree-log.c
    @@ -753,7 +753,9 @@ static noinline int replay_one_extent(struct btrfs_trans_handle *trans,
    */
    ret = btrfs_lookup_data_extent(fs_info, ins.objectid,
    ins.offset);
    - if (ret == 0) {
    + if (ret < 0) {
    + goto out;
    + } else if (ret == 0) {
    btrfs_init_generic_ref(&ref,
    BTRFS_ADD_DELAYED_REF,
    ins.objectid, ins.offset, 0);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-09-16 20:07    [W:2.180 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site