Commit d0dc4111 authored by Zhang Xiaoxu's avatar Zhang Xiaoxu Committed by Steve French

cifs: Move the in_send statistic to __smb_send_rqst()

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: 7ee1af76 ("[CIFS]")
Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent fe15c26e
...@@ -278,7 +278,7 @@ static int ...@@ -278,7 +278,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;
...@@ -289,6 +289,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, ...@@ -289,6 +289,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;
...@@ -297,14 +298,17 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, ...@@ -297,14 +298,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);
...@@ -407,7 +411,8 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, ...@@ -407,7 +411,8 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
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, ...@@ -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);
...@@ -1144,9 +1147,7 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses, ...@@ -1144,9 +1147,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]);
...@@ -1396,9 +1397,7 @@ SendReceive(const unsigned int xid, struct cifs_ses *ses, ...@@ -1396,9 +1397,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)
...@@ -1539,9 +1538,7 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -1539,9 +1538,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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment