lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 009/158] btrfs: fix lost error handling when looking up extended ref on log replay
    Date
    From: Filipe Manana <fdmanana@suse.com>

    commit 7a6b75b79902e47f46328b57733f2604774fa2d9 upstream.

    During log replay, when processing inode references, if we get an error
    when looking up for an extended reference at __add_inode_ref(), we ignore
    it and proceed, returning success (0) if no other error happens after the
    lookup. This is obviously wrong because in case an extended reference
    exists and it encodes some name not in the log, we need to unlink it,
    otherwise the filesystem state will not match the state it had after the
    last fsync.

    So just make __add_inode_ref() return an error it gets from the extended
    reference lookup.

    Fixes: f186373fef005c ("btrfs: extended inode refs")
    CC: stable@vger.kernel.org # 4.9+
    Signed-off-by: Filipe Manana <fdmanana@suse.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/tree-log.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/fs/btrfs/tree-log.c
    +++ b/fs/btrfs/tree-log.c
    @@ -1075,7 +1075,9 @@ again:
    extref = btrfs_lookup_inode_extref(NULL, root, path, name, namelen,
    inode_objectid, parent_objectid, 0,
    0);
    - if (!IS_ERR_OR_NULL(extref)) {
    + if (IS_ERR(extref)) {
    + return PTR_ERR(extref);
    + } else if (extref) {
    u32 item_size;
    u32 cur_offset = 0;
    unsigned long base;

    \
     
     \ /
      Last update: 2022-08-23 14:28    [W:2.586 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site