public inbox for linux-cifs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/7] cifs: change_conf needs to be called for session setup
@ 2026-04-14 13:59 nspmangalore
  2026-04-14 13:59 ` [PATCH 2/7] cifs: abort open_cached_dir if we don't request leases nspmangalore
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: nspmangalore @ 2026-04-14 13:59 UTC (permalink / raw)
  To: linux-cifs, smfrench, pc, bharathsm, dhowells, henrique.carvalho,
	ematsumiya
  Cc: Shyam Prasad N, stable

From: Shyam Prasad N <sprasad@microsoft.com>

Today we skip calling change_conf for negotiates and session setup
requests. This can be a problem for mchan as the immediate next call
after session setup could be due to an I/O that is made on the
mount point. For single channel, this is not a problem as
there will be several calls after setting up session.

This change enforces calling change_conf for the last session setup
response, so that echoes and oplocks are not disabled before the
first request to the server. So if that first request is an open,
it does not need to disable requesting leases.

Cc: <stable@vger.kernel.org>
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
---
 fs/smb/client/smb2ops.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
index 509fcea28a429..3625030d1912f 100644
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -111,10 +111,19 @@ smb2_add_credits(struct TCP_Server_Info *server,
 				      cifs_trace_rw_credits_zero_in_flight);
 	}
 	server->in_flight--;
+
+	/*
+	 * Rebalance credits when an op drains in_flight. For session setup,
+	 * do this only when the server actually granted positive credits (>2) so a
+	 * newly established secondary channel can reserve echo/oplock credits.
+	 */
 	if (server->in_flight == 0 &&
 	   ((optype & CIFS_OP_MASK) != CIFS_NEG_OP) &&
 	   ((optype & CIFS_OP_MASK) != CIFS_SESS_OP))
 		rc = change_conf(server);
+	else if (server->in_flight == 0 &&
+		 ((optype & CIFS_OP_MASK) == CIFS_SESS_OP) && add > 2)
+		rc = change_conf(server);
 	/*
 	 * Sometimes server returns 0 credits on oplock break ack - we need to
 	 * rebalance credits in this case.
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-04-15 23:11 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-14 13:59 [PATCH 1/7] cifs: change_conf needs to be called for session setup nspmangalore
2026-04-14 13:59 ` [PATCH 2/7] cifs: abort open_cached_dir if we don't request leases nspmangalore
2026-04-14 13:59 ` [PATCH 3/7] cifs: invalidate cfid on unlink/rename/rmdir nspmangalore
2026-04-14 13:59 ` [PATCH 4/7] cifs: define variable sized buffer for querydir responses nspmangalore
2026-04-14 13:59 ` [PATCH 5/7] cifs: optimize readdir for small directories nspmangalore
2026-04-14 13:59 ` [PATCH 6/7] cifs: optimize readdir for larger directories nspmangalore
2026-04-15 23:08   ` Steve French
2026-04-15 23:11     ` Steve French
2026-04-14 13:59 ` [PATCH 7/7] cifs: reorganize cached dir helpers nspmangalore

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox