Commit 4b8f930f authored by Steve French's avatar Steve French

[CIFS] Free small buffers earlier so we exceed the cifs

small req buffer pool less often.
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 184ed211
...@@ -1070,7 +1070,7 @@ CIFSSMBRead(const int xid, struct cifsTconInfo *tcon, ...@@ -1070,7 +1070,7 @@ CIFSSMBRead(const int xid, struct cifsTconInfo *tcon,
} }
} }
cifs_small_buf_release(pSMB); /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */
if(*buf) { if(*buf) {
if(resp_buf_type == CIFS_SMALL_BUFFER) if(resp_buf_type == CIFS_SMALL_BUFFER)
cifs_small_buf_release(iov[0].iov_base); cifs_small_buf_release(iov[0].iov_base);
...@@ -1274,7 +1274,7 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon, ...@@ -1274,7 +1274,7 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
*nbytes += le16_to_cpu(pSMBr->Count); *nbytes += le16_to_cpu(pSMBr->Count);
} }
cifs_small_buf_release(pSMB); /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */
if(resp_buf_type == CIFS_SMALL_BUFFER) if(resp_buf_type == CIFS_SMALL_BUFFER)
cifs_small_buf_release(iov[0].iov_base); cifs_small_buf_release(iov[0].iov_base);
else if(resp_buf_type == CIFS_LARGE_BUFFER) else if(resp_buf_type == CIFS_LARGE_BUFFER)
...@@ -2606,7 +2606,7 @@ CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon, __u16 fid, ...@@ -2606,7 +2606,7 @@ CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon, __u16 fid,
cifs_small_buf_release(iov[0].iov_base); cifs_small_buf_release(iov[0].iov_base);
else if(buf_type == CIFS_LARGE_BUFFER) else if(buf_type == CIFS_LARGE_BUFFER)
cifs_buf_release(iov[0].iov_base); cifs_buf_release(iov[0].iov_base);
cifs_small_buf_release(pSMB); /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */
return rc; return rc;
} }
......
...@@ -122,8 +122,7 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, const int type, ...@@ -122,8 +122,7 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, const int type,
/* rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buf_type, 0); */ /* rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buf_type, 0); */
/* SMB request buf freed in SendReceive2 */
cifs_small_buf_release(smb_buffer);
return rc; return rc;
} }
......
...@@ -309,17 +309,16 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, ...@@ -309,17 +309,16 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
*pRespBufType = CIFS_NO_BUFFER; /* no response buf yet */ *pRespBufType = CIFS_NO_BUFFER; /* no response buf yet */
if (ses == NULL) { if ((ses == NULL) || (ses->server == NULL)) {
cERROR(1,("Null smb session")); cifs_small_buf_release(in_buf);
return -EIO; cERROR(1,("Null session"));
}
if(ses->server == NULL) {
cERROR(1,("Null tcp session"));
return -EIO; return -EIO;
} }
if(ses->server->tcpStatus == CifsExiting) if(ses->server->tcpStatus == CifsExiting) {
cifs_small_buf_release(in_buf);
return -ENOENT; return -ENOENT;
}
/* Ensure that we do not send more than 50 overlapping requests /* Ensure that we do not send more than 50 overlapping requests
to the same server. We may make this configurable later or to the same server. We may make this configurable later or
...@@ -346,6 +345,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, ...@@ -346,6 +345,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
} else { } else {
if(ses->server->tcpStatus == CifsExiting) { if(ses->server->tcpStatus == CifsExiting) {
spin_unlock(&GlobalMid_Lock); spin_unlock(&GlobalMid_Lock);
cifs_small_buf_release(in_buf);
return -ENOENT; return -ENOENT;
} }
...@@ -385,6 +385,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, ...@@ -385,6 +385,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
midQ = AllocMidQEntry(in_buf, ses); midQ = AllocMidQEntry(in_buf, ses);
if (midQ == NULL) { if (midQ == NULL) {
up(&ses->server->tcpSem); up(&ses->server->tcpSem);
cifs_small_buf_release(in_buf);
/* If not lock req, update # of requests on wire to server */ /* If not lock req, update # of requests on wire to server */
if(long_op < 3) { if(long_op < 3) {
atomic_dec(&ses->server->inFlight); atomic_dec(&ses->server->inFlight);
...@@ -408,14 +409,18 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, ...@@ -408,14 +409,18 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
if(rc < 0) { if(rc < 0) {
DeleteMidQEntry(midQ); DeleteMidQEntry(midQ);
up(&ses->server->tcpSem); up(&ses->server->tcpSem);
cifs_small_buf_release(in_buf);
/* If not lock req, update # of requests on wire to server */ /* If not lock req, update # of requests on wire to server */
if(long_op < 3) { if(long_op < 3) {
atomic_dec(&ses->server->inFlight); atomic_dec(&ses->server->inFlight);
wake_up(&ses->server->request_q); wake_up(&ses->server->request_q);
} }
return rc; return rc;
} else } else {
up(&ses->server->tcpSem); up(&ses->server->tcpSem);
cifs_small_buf_release(in_buf);
}
if (long_op == -1) if (long_op == -1)
goto cifs_no_response_exit2; goto cifs_no_response_exit2;
else if (long_op == 2) /* writes past end of file can take loong time */ else if (long_op == 2) /* writes past end of file can take loong time */
...@@ -543,6 +548,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, ...@@ -543,6 +548,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
out_unlock2: out_unlock2:
up(&ses->server->tcpSem); up(&ses->server->tcpSem);
cifs_small_buf_release(in_buf);
/* If not lock req, update # of requests on wire to server */ /* If not lock req, update # of requests on wire to server */
if(long_op < 3) { if(long_op < 3) {
atomic_dec(&ses->server->inFlight); atomic_dec(&ses->server->inFlight);
......
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