lkml.org 
[lkml]   [2019]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 021/123] f2fs: do not use mutex lock in atomic context
    Date
    From: Sahitya Tummala <stummala@codeaurora.org>

    [ Upstream commit 9083977dabf3833298ddcd40dee28687f1e6b483 ]

    Fix below warning coming because of using mutex lock in atomic context.

    BUG: sleeping function called from invalid context at kernel/locking/mutex.c:98
    in_atomic(): 1, irqs_disabled(): 0, pid: 585, name: sh
    Preemption disabled at: __radix_tree_preload+0x28/0x130
    Call trace:
    dump_backtrace+0x0/0x2b4
    show_stack+0x20/0x28
    dump_stack+0xa8/0xe0
    ___might_sleep+0x144/0x194
    __might_sleep+0x58/0x8c
    mutex_lock+0x2c/0x48
    f2fs_trace_pid+0x88/0x14c
    f2fs_set_node_page_dirty+0xd0/0x184

    Do not use f2fs_radix_tree_insert() to avoid doing cond_resched() with
    spin_lock() acquired.

    Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
    Reviewed-by: Chao Yu <yuchao0@huawei.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/f2fs/trace.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    diff --git a/fs/f2fs/trace.c b/fs/f2fs/trace.c
    index bccbbf2616d2..8ac1851a21c0 100644
    --- a/fs/f2fs/trace.c
    +++ b/fs/f2fs/trace.c
    @@ -61,6 +61,7 @@ void f2fs_trace_pid(struct page *page)

    set_page_private(page, (unsigned long)pid);

    +retry:
    if (radix_tree_preload(GFP_NOFS))
    return;

    @@ -71,7 +72,12 @@ void f2fs_trace_pid(struct page *page)
    if (p)
    radix_tree_delete(&pids, pid);

    - f2fs_radix_tree_insert(&pids, pid, current);
    + if (radix_tree_insert(&pids, pid, current)) {
    + spin_unlock(&pids_lock);
    + radix_tree_preload_end();
    + cond_resched();
    + goto retry;
    + }

    trace_printk("%3x:%3x %4x %-16s\n",
    MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev),
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-03-27 19:54    [W:4.154 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site