mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 06:41:39 -04:00
smb: smbdirect: fix the logic in smbdirect_socket_destroy_sync() without an error
If smbdirect_socket_destroy_sync() and sc->first_error was not set we should set -ESHUTDOWN, that's a better condition doing it only implicitly with the sc->status < SMBDIRECT_SOCKET_DISCONNECTING check. Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: Namjae Jeon <linkinjeon@kernel.org> Cc: David Howells <dhowells@redhat.com> Cc: Henrique Carvalho <henrique.carvalho@suse.com> 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>
This commit is contained in:
committed by
Steve French
parent
3892007f2b
commit
25c2e34931
@@ -600,13 +600,20 @@ void smbdirect_socket_destroy_sync(struct smbdirect_socket *sc)
|
||||
*/
|
||||
WARN_ON_ONCE(in_interrupt());
|
||||
|
||||
smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO,
|
||||
"cancelling and disable disconnect_work\n");
|
||||
disable_work_sync(&sc->disconnect_work);
|
||||
/*
|
||||
* First we try to disable the work
|
||||
* without disable_work_sync() in a
|
||||
* non blocking way, if it's already
|
||||
* running it will be handles by
|
||||
* disable_work_sync() below.
|
||||
*
|
||||
* Here we just want to make sure queue_work() in
|
||||
* smbdirect_socket_schedule_cleanup_lvl()
|
||||
* is a no-op.
|
||||
*/
|
||||
disable_work(&sc->disconnect_work);
|
||||
|
||||
smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO,
|
||||
"destroying rdma session\n");
|
||||
if (sc->status < SMBDIRECT_SOCKET_DISCONNECTING) {
|
||||
if (!sc->first_error)
|
||||
/*
|
||||
* SMBDIRECT_LOG_INFO is enough here
|
||||
* as this is the typical case where
|
||||
@@ -615,8 +622,15 @@ void smbdirect_socket_destroy_sync(struct smbdirect_socket *sc)
|
||||
smbdirect_socket_schedule_cleanup_lvl(sc,
|
||||
SMBDIRECT_LOG_INFO,
|
||||
-ESHUTDOWN);
|
||||
|
||||
smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO,
|
||||
"cancelling and disable disconnect_work\n");
|
||||
disable_work_sync(&sc->disconnect_work);
|
||||
|
||||
smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO,
|
||||
"destroying rdma session\n");
|
||||
if (sc->status < SMBDIRECT_SOCKET_DISCONNECTING)
|
||||
smbdirect_socket_cleanup_work(&sc->disconnect_work);
|
||||
}
|
||||
if (sc->status < SMBDIRECT_SOCKET_DISCONNECTED) {
|
||||
smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO,
|
||||
"wait for transport being disconnected\n");
|
||||
|
||||
Reference in New Issue
Block a user