lkml.org 
[lkml]   [2022]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 0045/1126] cifs: we do not need a spinlock around the tree access during umount
    Date
    From: Ronnie Sahlberg <lsahlber@redhat.com>

    commit 9a14b65d590105d393b63f5320e1594edda7c672 upstream.

    Remove the spinlock around the tree traversal as we are calling possibly
    sleeping functions.
    We do not need a spinlock here as there will be no modifications to this
    tree at this point.

    This prevents warnings like this to occur in dmesg:
    [ 653.774996] BUG: sleeping function called from invalid context at kernel/loc\
    king/mutex.c:280
    [ 653.775088] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1827, nam\
    e: umount
    [ 653.775152] preempt_count: 1, expected: 0
    [ 653.775191] CPU: 0 PID: 1827 Comm: umount Tainted: G W OE 5.17.0\
    -rc7-00006-g4eb628dd74df #135
    [ 653.775195] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-\
    1.fc33 04/01/2014
    [ 653.775197] Call Trace:
    [ 653.775199] <TASK>
    [ 653.775202] dump_stack_lvl+0x34/0x44
    [ 653.775209] __might_resched.cold+0x13f/0x172
    [ 653.775213] mutex_lock+0x75/0xf0
    [ 653.775217] ? __mutex_lock_slowpath+0x10/0x10
    [ 653.775220] ? _raw_write_lock_irq+0xd0/0xd0
    [ 653.775224] ? dput+0x6b/0x360
    [ 653.775228] cifs_kill_sb+0xff/0x1d0 [cifs]
    [ 653.775285] deactivate_locked_super+0x85/0x130
    [ 653.775289] cleanup_mnt+0x32c/0x4d0
    [ 653.775292] ? path_umount+0x228/0x380
    [ 653.775296] task_work_run+0xd8/0x180
    [ 653.775301] exit_to_user_mode_loop+0x152/0x160
    [ 653.775306] exit_to_user_mode_prepare+0x89/0xd0
    [ 653.775315] syscall_exit_to_user_mode+0x12/0x30
    [ 653.775322] do_syscall_64+0x48/0x90
    [ 653.775326] entry_SYSCALL_64_after_hwframe+0x44/0xae

    Fixes: 187af6e98b44e5d8f25e1d41a92db138eb54416f ("cifs: fix handlecache and multiuser")
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/cifs/cifsfs.c | 2 --
    1 file changed, 2 deletions(-)

    --- a/fs/cifs/cifsfs.c
    +++ b/fs/cifs/cifsfs.c
    @@ -266,7 +266,6 @@ static void cifs_kill_sb(struct super_bl
    dput(cifs_sb->root);
    cifs_sb->root = NULL;
    }
    - spin_lock(&cifs_sb->tlink_tree_lock);
    node = rb_first(root);
    while (node != NULL) {
    tlink = rb_entry(node, struct tcon_link, tl_rbnode);
    @@ -280,7 +279,6 @@ static void cifs_kill_sb(struct super_bl
    mutex_unlock(&cfid->fid_mutex);
    node = rb_next(node);
    }
    - spin_unlock(&cifs_sb->tlink_tree_lock);

    kill_anon_super(sb);
    cifs_umount(cifs_sb);

    \
     
     \ /
      Last update: 2022-04-05 09:43    [W:3.774 / U:1.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site