Message ID | 20210408124025.ljsgund6jfc5c55y@fiona (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: Correct try_lock_extent() usage in read_extent_buffer_subpage() | expand |
On 2021/4/8 下午8:40, Goldwyn Rodrigues wrote: > 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. > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thankfully the only metadata reader who will pass wait == WAIT_NONE is readahead, so no real damage. But still a nice fix! Thanks, Qu > --- > fs/btrfs/extent_io.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c > index 7ad2169e7487..3536feedd6c5 100644 > --- a/fs/btrfs/extent_io.c > +++ b/fs/btrfs/extent_io.c > @@ -5914,10 +5914,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) >
On 4/8/21 8:40 AM, Goldwyn Rodrigues wrote: > 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. > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Thanks, Josef
On Thu, Apr 08, 2021 at 07:40:25AM -0500, Goldwyn Rodrigues wrote: > 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. > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Added to misc-next, thanks.
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 7ad2169e7487..3536feedd6c5 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -5914,10 +5914,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)
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. Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> --- fs/btrfs/extent_io.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)