Message ID | 20220315034404.623539-1-lsahlber@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | cifs: we do not need a spinlock around the tree access during umount | expand |
tentatively merged into cifs-2.6.git for-next pending testing On Mon, Mar 14, 2022 at 10:44 PM Ronnie Sahlberg <lsahlber@redhat.com> wrote: > > 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> > Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> > --- > fs/cifs/cifsfs.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c > index 677c02aa8731..6e5246122ee2 100644 > --- a/fs/cifs/cifsfs.c > +++ b/fs/cifs/cifsfs.c > @@ -269,7 +269,6 @@ static void cifs_kill_sb(struct super_block *sb) > 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); > @@ -283,7 +282,6 @@ static void cifs_kill_sb(struct super_block *sb) > mutex_unlock(&cfid->fid_mutex); > node = rb_next(node); > } > - spin_unlock(&cifs_sb->tlink_tree_lock); > > kill_anon_super(sb); > cifs_umount(cifs_sb); > -- > 2.30.2 >
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 677c02aa8731..6e5246122ee2 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -269,7 +269,6 @@ static void cifs_kill_sb(struct super_block *sb) 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); @@ -283,7 +282,6 @@ static void cifs_kill_sb(struct super_block *sb) mutex_unlock(&cfid->fid_mutex); node = rb_next(node); } - spin_unlock(&cifs_sb->tlink_tree_lock); kill_anon_super(sb); cifs_umount(cifs_sb);
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> Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> --- fs/cifs/cifsfs.c | 2 -- 1 file changed, 2 deletions(-)