btrfs: correct try_lock_extent() usage in read_extent_buffer_subpage()
authorGoldwyn Rodrigues <rgoldwyn@suse.de>
Thu, 8 Apr 2021 12:40:25 +0000 (07:40 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jun 2021 13:19:04 +0000 (15:19 +0200)
try_lock_extent() returns 1 on success or 0 for failure and not an error
code. If try_lock_extent() fails, read_extent_buffer_subpage() returns
zero indicating subpage extent read success.

Return EAGAIN/EWOULDBLOCK if try_lock_extent() fails in locking the
extent.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index dee2dafbc872f379aa2fc861a822104aea7768f0..74ba2e1a39277574107dee0004562aed9b2cb4d3 100644 (file)
@@ -6184,10 +6184,8 @@ static int read_extent_buffer_subpage(struct extent_buffer *eb, int wait,
        io_tree = &BTRFS_I(fs_info->btree_inode)->io_tree;
 
        if (wait == WAIT_NONE) {
-               ret = try_lock_extent(io_tree, eb->start,
-                                     eb->start + eb->len - 1);
-               if (ret <= 0)
-                       return ret;
+               if (!try_lock_extent(io_tree, eb->start, eb->start + eb->len - 1))
+                       return -EAGAIN;
        } else {
                ret = lock_extent(io_tree, eb->start, eb->start + eb->len - 1);
                if (ret < 0)