]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
smb: client: let smbd_disconnect_rdma_connection() disable all work but disconnect_work
authorStefan Metzmacher <metze@samba.org>
Thu, 28 Aug 2025 10:15:11 +0000 (12:15 +0200)
committerSteve French <stfrench@microsoft.com>
Sun, 28 Sep 2025 23:29:51 +0000 (18:29 -0500)
There's no point run these if we already know the connection
is broken.

Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smbdirect.c

index 86d32bd5f1136609d23d67fd9e301797538f0a59..155d69745adf196697b27cabee72c0f161d26bc7 100644 (file)
@@ -220,6 +220,16 @@ static void smbd_disconnect_rdma_work(struct work_struct *work)
 
 static void smbd_disconnect_rdma_connection(struct smbdirect_socket *sc)
 {
+       /*
+        * make sure other work (than disconnect_work) is
+        * not queued again but here we don't block and avoid
+        * disable[_delayed]_work_sync()
+        */
+       disable_work(&sc->recv_io.posted.refill_work);
+       disable_work(&sc->mr_io.recovery_work);
+       disable_work(&sc->idle.immediate_work);
+       disable_delayed_work(&sc->idle.timer_work);
+
        if (sc->first_error == 0)
                sc->first_error = -ECONNABORTED;