From: Paulo Alcantara Date: Wed, 14 Sep 2022 04:34:51 +0000 (-0700) Subject: cifs: add missing spinlock around tcon refcount X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=621a41ae0834cec9cab312d600d2b9de41dc6eac;p=linux.git cifs: add missing spinlock around tcon refcount Add missing spinlock to protect updates on tcon refcount in cifs_put_tcon(). Fixes: d7d7a66aacd6 ("cifs: avoid use of global locks for high contention data") Signed-off-by: Paulo Alcantara (SUSE) Reviewed-by: Ronnie Sahlberg Signed-off-by: Steve French --- diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 0225f4c8adf0c..7ae6f2c08153e 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -2345,7 +2345,9 @@ cifs_put_tcon(struct cifs_tcon *tcon) ses = tcon->ses; cifs_dbg(FYI, "%s: tc_count=%d\n", __func__, tcon->tc_count); spin_lock(&cifs_tcp_ses_lock); + spin_lock(&tcon->tc_lock); if (--tcon->tc_count > 0) { + spin_unlock(&tcon->tc_lock); spin_unlock(&cifs_tcp_ses_lock); return; } @@ -2354,6 +2356,7 @@ cifs_put_tcon(struct cifs_tcon *tcon) WARN_ON(tcon->tc_count < 0); list_del_init(&tcon->tcon_list); + spin_unlock(&tcon->tc_lock); spin_unlock(&cifs_tcp_ses_lock); /* cancel polling of interfaces */