From: Shyam Prasad N Date: Tue, 27 Dec 2022 11:29:28 +0000 (+0000) Subject: cifs: refcount only the selected iface during interface update X-Git-Tag: v6.1.8~539 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94d0e33c5f5270ff3615ba3d173bf37dfcf1e64a;p=platform%2Fkernel%2Flinux-starfive.git cifs: refcount only the selected iface during interface update commit 7246210ecdd0cda97fa3e3bb15c32c6c2d9a23b5 upstream. When the server interface for a channel is not active anymore, we have the logic to select an alternative interface. However this was not breaking out of the loop as soon as a new alternative was found. As a result, some interfaces may get refcounted unintentionally. There was also a bug in checking if we found an alternate iface. Fixed that too. Fixes: b54034a73baf ("cifs: during reconnect, update interface if necessary") Cc: stable@vger.kernel.org # 5.19+ Signed-off-by: Shyam Prasad N Reviewed-by: Paulo Alcantara (SUSE) Signed-off-by: Steve French Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c index 9e7d9f0..0b842a0 100644 --- a/fs/cifs/sess.c +++ b/fs/cifs/sess.c @@ -292,9 +292,10 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server) continue; } kref_get(&iface->refcount); + break; } - if (!list_entry_is_head(iface, &ses->iface_list, iface_head)) { + if (list_entry_is_head(iface, &ses->iface_list, iface_head)) { rc = 1; iface = NULL; cifs_dbg(FYI, "unable to find a suitable iface\n");