I already have this patch in my for-next branch (which also includes the Reviewed-by from Shyam) On Tue, Jul 1, 2025 at 11:44 AM David Howells <dhowells@xxxxxxxxxx> wrote: > > From: Paulo Alcantara <pc@xxxxxxxxxxxxx> > > When reconnecting a channel in smb2_reconnect_server(), a dummy tcon > is passed down to smb2_reconnect() with ->query_interface > uninitialized, so we can't call queue_delayed_work() on it. > > Fix the following warning by ensuring that we're queueing the delayed > worker from correct tcon. > > WARNING: CPU: 4 PID: 1126 at kernel/workqueue.c:2498 __queue_delayed_work+0x1d2/0x200 > Modules linked in: cifs cifs_arc4 nls_ucs2_utils cifs_md4 [last unloaded: cifs] > CPU: 4 UID: 0 PID: 1126 Comm: kworker/4:0 Not tainted 6.16.0-rc3 #5 PREEMPT(voluntary) > Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-4.fc42 04/01/2014 > Workqueue: cifsiod smb2_reconnect_server [cifs] > RIP: 0010:__queue_delayed_work+0x1d2/0x200 > Code: 41 5e 41 5f e9 7f ee ff ff 90 0f 0b 90 e9 5d ff ff ff bf 02 00 > 00 00 e8 6c f3 07 00 89 c3 eb bd 90 0f 0b 90 e9 57 f> 0b 90 e9 65 fe > ff ff 90 0f 0b 90 e9 72 fe ff ff 90 0f 0b 90 e9 > RSP: 0018:ffffc900014afad8 EFLAGS: 00010003 > RAX: 0000000000000000 RBX: ffff888124d99988 RCX: ffffffff81399cc1 > RDX: dffffc0000000000 RSI: ffff888114326e00 RDI: ffff888124d999f0 > RBP: 000000000000ea60 R08: 0000000000000001 R09: ffffed10249b3331 > R10: ffff888124d9998f R11: 0000000000000004 R12: 0000000000000040 > R13: ffff888114326e00 R14: ffff888124d999d8 R15: ffff888114939020 > FS: 0000000000000000(0000) GS:ffff88829f7fe000(0000) knlGS:0000000000000000 > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > CR2: 00007ffe7a2b4038 CR3: 0000000120a6f000 CR4: 0000000000750ef0 > PKRU: 55555554 > Call Trace: > <TASK> > queue_delayed_work_on+0xb4/0xc0 > smb2_reconnect+0xb22/0xf50 [cifs] > smb2_reconnect_server+0x413/0xd40 [cifs] > ? __pfx_smb2_reconnect_server+0x10/0x10 [cifs] > ? local_clock_noinstr+0xd/0xd0 > ? local_clock+0x15/0x30 > ? lock_release+0x29b/0x390 > process_one_work+0x4c5/0xa10 > ? __pfx_process_one_work+0x10/0x10 > ? __list_add_valid_or_report+0x37/0x120 > worker_thread+0x2f1/0x5a0 > ? __kthread_parkme+0xde/0x100 > ? __pfx_worker_thread+0x10/0x10 > kthread+0x1fe/0x380 > ? kthread+0x10f/0x380 > ? __pfx_kthread+0x10/0x10 > ? local_clock_noinstr+0xd/0xd0 > ? ret_from_fork+0x1b/0x1f0 > ? local_clock+0x15/0x30 > ? lock_release+0x29b/0x390 > ? rcu_is_watching+0x20/0x50 > ? __pfx_kthread+0x10/0x10 > ret_from_fork+0x15b/0x1f0 > ? __pfx_kthread+0x10/0x10 > ret_from_fork_asm+0x1a/0x30 > </TASK> > irq event stamp: 1116206 > hardirqs last enabled at (1116205): [<ffffffff8143af42>] __up_console_sem+0x52/0x60 > hardirqs last disabled at (1116206): [<ffffffff81399f0e>] queue_delayed_work_on+0x6e/0xc0 > softirqs last enabled at (1116138): [<ffffffffc04562fd>] __smb_send_rqst+0x42d/0x950 [cifs] > softirqs last disabled at (1116136): [<ffffffff823d35e1>] release_sock+0x21/0xf0 > > Cc: linux-cifs@xxxxxxxxxxxxxxx > Reported-by: David Howells <dhowells@xxxxxxxxxx> > Fixes: 42ca547b13a2 ("cifs: do not disable interface polling on failure") > Reviewed-by: David Howells <dhowells@xxxxxxxxxx> > Tested-by: David Howells <dhowells@xxxxxxxxxx> > Signed-off-by: Paulo Alcantara (Red Hat) <pc@xxxxxxxxxxxxx> > Signed-off-by: David Howells <dhowells@xxxxxxxxxx> > Tested-by: Steve French <sfrench@xxxxxxxxx> > --- > fs/smb/client/cifsglob.h | 1 + > fs/smb/client/smb2pdu.c | 10 ++++------ > 2 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h > index 318a8405d475..fdd95e5100cd 100644 > --- a/fs/smb/client/cifsglob.h > +++ b/fs/smb/client/cifsglob.h > @@ -1303,6 +1303,7 @@ struct cifs_tcon { > bool use_persistent:1; /* use persistent instead of durable handles */ > bool no_lease:1; /* Do not request leases on files or directories */ > bool use_witness:1; /* use witness protocol */ > + bool dummy:1; /* dummy tcon used for reconnecting channels */ > __le32 capabilities; > __u32 share_flags; > __u32 maximal_access; > diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c > index 084ee66e73fd..572cfc42dda8 100644 > --- a/fs/smb/client/smb2pdu.c > +++ b/fs/smb/client/smb2pdu.c > @@ -424,9 +424,9 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon, > free_xid(xid); > ses->flags &= ~CIFS_SES_FLAGS_PENDING_QUERY_INTERFACES; > > - /* regardless of rc value, setup polling */ > - queue_delayed_work(cifsiod_wq, &tcon->query_interfaces, > - (SMB_INTERFACE_POLL_INTERVAL * HZ)); > + if (!tcon->ipc && !tcon->dummy) > + queue_delayed_work(cifsiod_wq, &tcon->query_interfaces, > + (SMB_INTERFACE_POLL_INTERVAL * HZ)); > > mutex_unlock(&ses->session_mutex); > > @@ -4229,10 +4229,8 @@ void smb2_reconnect_server(struct work_struct *work) > } > goto done; > } > - > tcon->status = TID_GOOD; > - tcon->retry = false; > - tcon->need_reconnect = false; > + tcon->dummy = true; > > /* now reconnect sessions for necessary channels */ > list_for_each_entry_safe(ses, ses2, &tmp_ses_list, rlist) { > > -- Thanks, Steve