cifs: Move the in_send statistic to __smb_send_rqst()
[ Upstream commit d0dc41119905f740e8d5594adce277f7c0de8c92 ]
When send SMB_COM_NT_CANCEL and RFC1002_SESSION_REQUEST, the
in_send statistic was lost.
Let's move the in_send statistic to the send function to avoid
this scenario.
Fixes: 7ee1af765d
("[CIFS]")
Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
06c208002d
commit
d7e48aa17a
@ -312,7 +312,7 @@ static int
|
||||
__smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||
struct smb_rqst *rqst)
|
||||
{
|
||||
int rc = 0;
|
||||
int rc;
|
||||
struct kvec *iov;
|
||||
int n_vec;
|
||||
unsigned int send_length = 0;
|
||||
@ -324,6 +324,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||
int val = 1;
|
||||
__be32 rfc1002_marker;
|
||||
|
||||
cifs_in_send_inc(server);
|
||||
if (cifs_rdma_enabled(server)) {
|
||||
/* return -EAGAIN when connecting or reconnecting */
|
||||
rc = -EAGAIN;
|
||||
@ -332,14 +333,17 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||
goto smbd_done;
|
||||
}
|
||||
|
||||
rc = -EAGAIN;
|
||||
if (ssocket == NULL)
|
||||
return -EAGAIN;
|
||||
goto out;
|
||||
|
||||
rc = -ERESTARTSYS;
|
||||
if (fatal_signal_pending(current)) {
|
||||
cifs_dbg(FYI, "signal pending before send request\n");
|
||||
return -ERESTARTSYS;
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
/* cork the socket */
|
||||
kernel_setsockopt(ssocket, SOL_TCP, TCP_CORK,
|
||||
(char *)&val, sizeof(val));
|
||||
@ -453,7 +457,8 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||
rc);
|
||||
else if (rc > 0)
|
||||
rc = 0;
|
||||
|
||||
out:
|
||||
cifs_in_send_dec(server);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -830,9 +835,7 @@ cifs_call_async(struct TCP_Server_Info *server, struct smb_rqst *rqst,
|
||||
* I/O response may come back and free the mid entry on another thread.
|
||||
*/
|
||||
cifs_save_when_sent(mid);
|
||||
cifs_in_send_inc(server);
|
||||
rc = smb_send_rqst(server, 1, rqst, flags);
|
||||
cifs_in_send_dec(server);
|
||||
|
||||
if (rc < 0) {
|
||||
revert_current_mid(server, mid->credits);
|
||||
@ -1095,9 +1098,7 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
|
||||
else
|
||||
midQ[i]->callback = cifs_compound_last_callback;
|
||||
}
|
||||
cifs_in_send_inc(server);
|
||||
rc = smb_send_rqst(server, num_rqst, rqst, flags);
|
||||
cifs_in_send_dec(server);
|
||||
|
||||
for (i = 0; i < num_rqst; i++)
|
||||
cifs_save_when_sent(midQ[i]);
|
||||
@ -1332,9 +1333,7 @@ SendReceive(const unsigned int xid, struct cifs_ses *ses,
|
||||
|
||||
midQ->mid_state = MID_REQUEST_SUBMITTED;
|
||||
|
||||
cifs_in_send_inc(server);
|
||||
rc = smb_send(server, in_buf, len);
|
||||
cifs_in_send_dec(server);
|
||||
cifs_save_when_sent(midQ);
|
||||
|
||||
if (rc < 0)
|
||||
@ -1471,9 +1470,7 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
}
|
||||
|
||||
midQ->mid_state = MID_REQUEST_SUBMITTED;
|
||||
cifs_in_send_inc(server);
|
||||
rc = smb_send(server, in_buf, len);
|
||||
cifs_in_send_dec(server);
|
||||
cifs_save_when_sent(midQ);
|
||||
|
||||
if (rc < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user