lkml.org 
[lkml]   [2020]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 298/343] Btrfs: fix inode cache waiters hanging on path allocation failure
    Date
    From: Filipe Manana <fdmanana@suse.com>

    [ Upstream commit 9d123a35d7e97bb2139747b16127c9b22b6a593e ]

    If the caching thread fails to allocate a path, it returns without waking
    up any cache waiters, leaving them hang forever. Fix this by following the
    same approach as when we fail to start the caching thread: print an error
    message, disable inode caching and make the wakers fallback to non-caching
    mode behaviour (calling btrfs_find_free_objectid()).

    Fixes: 581bb050941b4f ("Btrfs: Cache free inode numbers in memory")
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/btrfs/inode-map.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
    index b1c3a4ec76c8c..2ae32451fb5b0 100644
    --- a/fs/btrfs/inode-map.c
    +++ b/fs/btrfs/inode-map.c
    @@ -55,8 +55,10 @@ static int caching_kthread(void *data)
    return 0;

    path = btrfs_alloc_path();
    - if (!path)
    + if (!path) {
    + fail_caching_thread(root);
    return -ENOMEM;
    + }

    /* Since the commit root is read-only, we can safely skip locking. */
    path->skip_locking = 1;
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-24 11:11    [W:2.902 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site