Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

cifs: change_conf needs to be called for session setup

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 when the total credits contain
enough for reservations for echoes and oplocks. We expect this to happen
during the last session setup response. This way, 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>
Reviewed-by: Bharath SM <bharathsm@microsoft.com>
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>

authored by

Shyam Prasad N and committed by
Steve French
c208a2b9 8e13b1b4

+11
+11
fs/smb/client/smb2ops.c
··· 111 111 cifs_trace_rw_credits_zero_in_flight); 112 112 } 113 113 server->in_flight--; 114 + 115 + /* 116 + * Rebalance credits when an op drains in_flight. For session setup, 117 + * do this only when the total accumulated credits are high enough (>2) 118 + * so that a newly established secondary channel can reserve credits for 119 + * echoes and oplocks. We expect this to happen at the end of the final 120 + * session setup response. 121 + */ 114 122 if (server->in_flight == 0 && 115 123 ((optype & CIFS_OP_MASK) != CIFS_NEG_OP) && 116 124 ((optype & CIFS_OP_MASK) != CIFS_SESS_OP)) 125 + rc = change_conf(server); 126 + else if (server->in_flight == 0 && 127 + ((optype & CIFS_OP_MASK) == CIFS_SESS_OP) && *val > 2) 117 128 rc = change_conf(server); 118 129 /* 119 130 * Sometimes server returns 0 credits on oplock break ack - we need to