lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 268/775] btrfs: clarify error returns values in __load_free_space_cache
    Date
    From: Zhihao Cheng <chengzhihao1@huawei.com>

    [ Upstream commit 3cc64e7ebfb0d7faaba2438334c43466955a96e8 ]

    Return value in __load_free_space_cache is not properly set after
    (unlikely) memory allocation failures and 0 is returned instead.
    This is not a problem for the caller load_free_space_cache because only
    value 1 is considered as 'cache loaded' but for clarity it's better
    to set the errors accordingly.

    Fixes: a67509c30079 ("Btrfs: add a io_ctl struct and helpers for dealing with the space cache")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.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/free-space-cache.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
    index 4d8897879c9cb..71d0d14bc18b3 100644
    --- a/fs/btrfs/free-space-cache.c
    +++ b/fs/btrfs/free-space-cache.c
    @@ -775,8 +775,10 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
    while (num_entries) {
    e = kmem_cache_zalloc(btrfs_free_space_cachep,
    GFP_NOFS);
    - if (!e)
    + if (!e) {
    + ret = -ENOMEM;
    goto free_cache;
    + }

    ret = io_ctl_read_entry(&io_ctl, e, &type);
    if (ret) {
    @@ -785,6 +787,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
    }

    if (!e->bytes) {
    + ret = -1;
    kmem_cache_free(btrfs_free_space_cachep, e);
    goto free_cache;
    }
    @@ -805,6 +808,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
    e->bitmap = kmem_cache_zalloc(
    btrfs_free_space_bitmap_cachep, GFP_NOFS);
    if (!e->bitmap) {
    + ret = -ENOMEM;
    kmem_cache_free(
    btrfs_free_space_cachep, e);
    goto free_cache;
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 02:40    [W:2.668 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site