diff options
author | Shyam Prasad N <sprasad@microsoft.com> | 2022-07-06 16:29:12 +0200 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2022-07-12 17:35:48 +0200 |
commit | 2883f4b5a0e1ac9472c7e3ae9bbdb4ea5a2117c6 (patch) | |
tree | 2b432ca2e97cd32b0d85854d31ad7bf51dd33d6b | |
parent | cifs: fix race condition with delayed threads (diff) | |
download | linux-2883f4b5a0e1ac9472c7e3ae9bbdb4ea5a2117c6.tar.xz linux-2883f4b5a0e1ac9472c7e3ae9bbdb4ea5a2117c6.zip |
cifs: remove unnecessary locking of chan_lock while freeing session
In cifs_put_smb_ses, when we're freeing the last ref count to
the session, we need to free up each channel. At this point,
it is unnecessary to take chan_lock, since we have the last
reference to the ses.
Picking up this lock also introduced a deadlock because it calls
cifs_put_tcp_ses, which locks cifs_tcp_ses_lock.
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Acked-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
-rw-r--r-- | fs/cifs/connect.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index fa29c9aae24b..386bb523c69e 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -1918,7 +1918,6 @@ void cifs_put_smb_ses(struct cifs_ses *ses) list_del_init(&ses->smb_ses_list); spin_unlock(&cifs_tcp_ses_lock); - spin_lock(&ses->chan_lock); chan_count = ses->chan_count; /* close any extra channels */ @@ -1934,7 +1933,6 @@ void cifs_put_smb_ses(struct cifs_ses *ses) ses->chans[i].server = NULL; } } - spin_unlock(&ses->chan_lock); sesInfoFree(ses); cifs_put_tcp_session(server, 0); |