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:

committed by
Greg Kroah-Hartman

parent
a3c502218c
commit
ed9ed2f58c
@@ -312,7 +312,7 @@ static int
|
|||||||
__smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
__smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||||
struct smb_rqst *rqst)
|
struct smb_rqst *rqst)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc;
|
||||||
struct kvec *iov;
|
struct kvec *iov;
|
||||||
int n_vec;
|
int n_vec;
|
||||||
unsigned int send_length = 0;
|
unsigned int send_length = 0;
|
||||||
@@ -323,6 +323,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
|||||||
struct msghdr smb_msg = {};
|
struct msghdr smb_msg = {};
|
||||||
__be32 rfc1002_marker;
|
__be32 rfc1002_marker;
|
||||||
|
|
||||||
|
cifs_in_send_inc(server);
|
||||||
if (cifs_rdma_enabled(server)) {
|
if (cifs_rdma_enabled(server)) {
|
||||||
/* return -EAGAIN when connecting or reconnecting */
|
/* return -EAGAIN when connecting or reconnecting */
|
||||||
rc = -EAGAIN;
|
rc = -EAGAIN;
|
||||||
@@ -331,14 +332,17 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
|||||||
goto smbd_done;
|
goto smbd_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = -EAGAIN;
|
||||||
if (ssocket == NULL)
|
if (ssocket == NULL)
|
||||||
return -EAGAIN;
|
goto out;
|
||||||
|
|
||||||
|
rc = -ERESTARTSYS;
|
||||||
if (fatal_signal_pending(current)) {
|
if (fatal_signal_pending(current)) {
|
||||||
cifs_dbg(FYI, "signal pending before send request\n");
|
cifs_dbg(FYI, "signal pending before send request\n");
|
||||||
return -ERESTARTSYS;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = 0;
|
||||||
/* cork the socket */
|
/* cork the socket */
|
||||||
tcp_sock_set_cork(ssocket->sk, true);
|
tcp_sock_set_cork(ssocket->sk, true);
|
||||||
|
|
||||||
@@ -449,7 +453,8 @@ smbd_done:
|
|||||||
rc);
|
rc);
|
||||||
else if (rc > 0)
|
else if (rc > 0)
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
out:
|
||||||
|
cifs_in_send_dec(server);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -826,9 +831,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.
|
* I/O response may come back and free the mid entry on another thread.
|
||||||
*/
|
*/
|
||||||
cifs_save_when_sent(mid);
|
cifs_save_when_sent(mid);
|
||||||
cifs_in_send_inc(server);
|
|
||||||
rc = smb_send_rqst(server, 1, rqst, flags);
|
rc = smb_send_rqst(server, 1, rqst, flags);
|
||||||
cifs_in_send_dec(server);
|
|
||||||
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
revert_current_mid(server, mid->credits);
|
revert_current_mid(server, mid->credits);
|
||||||
@@ -1117,9 +1120,7 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
|
|||||||
else
|
else
|
||||||
midQ[i]->callback = cifs_compound_last_callback;
|
midQ[i]->callback = cifs_compound_last_callback;
|
||||||
}
|
}
|
||||||
cifs_in_send_inc(server);
|
|
||||||
rc = smb_send_rqst(server, num_rqst, rqst, flags);
|
rc = smb_send_rqst(server, num_rqst, rqst, flags);
|
||||||
cifs_in_send_dec(server);
|
|
||||||
|
|
||||||
for (i = 0; i < num_rqst; i++)
|
for (i = 0; i < num_rqst; i++)
|
||||||
cifs_save_when_sent(midQ[i]);
|
cifs_save_when_sent(midQ[i]);
|
||||||
@@ -1356,9 +1357,7 @@ SendReceive(const unsigned int xid, struct cifs_ses *ses,
|
|||||||
|
|
||||||
midQ->mid_state = MID_REQUEST_SUBMITTED;
|
midQ->mid_state = MID_REQUEST_SUBMITTED;
|
||||||
|
|
||||||
cifs_in_send_inc(server);
|
|
||||||
rc = smb_send(server, in_buf, len);
|
rc = smb_send(server, in_buf, len);
|
||||||
cifs_in_send_dec(server);
|
|
||||||
cifs_save_when_sent(midQ);
|
cifs_save_when_sent(midQ);
|
||||||
|
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
@@ -1495,9 +1494,7 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifs_tcon *tcon,
|
|||||||
}
|
}
|
||||||
|
|
||||||
midQ->mid_state = MID_REQUEST_SUBMITTED;
|
midQ->mid_state = MID_REQUEST_SUBMITTED;
|
||||||
cifs_in_send_inc(server);
|
|
||||||
rc = smb_send(server, in_buf, len);
|
rc = smb_send(server, in_buf, len);
|
||||||
cifs_in_send_dec(server);
|
|
||||||
cifs_save_when_sent(midQ);
|
cifs_save_when_sent(midQ);
|
||||||
|
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
|
Reference in New Issue
Block a user