diff options
author | Steve French <sfrench@us.ibm.com> | 2006-02-26 11:41:18 -0500 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2006-02-26 11:41:18 -0500 |
commit | 4b8f930ff83aaed39fd5f935aeacc25f2549a51e (patch) | |
tree | 364547184a71367a12bb5eee44569d305c8efdd6 /fs | |
parent | 184ed2110ae6bfdb8dc91085149f04f2f4d2169e (diff) |
[CIFS] Free small buffers earlier so we exceed the cifs
small req buffer pool less often.
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/cifssmb.c | 6 | ||||
-rw-r--r-- | fs/cifs/ntlmssp.c | 3 | ||||
-rw-r--r-- | fs/cifs/transport.c | 22 |
3 files changed, 18 insertions, 13 deletions
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 9d7bbd225eff..e567f4e6196a 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
@@ -1070,7 +1070,7 @@ CIFSSMBRead(const int xid, struct cifsTconInfo *tcon, | |||
1070 | } | 1070 | } |
1071 | } | 1071 | } |
1072 | 1072 | ||
1073 | cifs_small_buf_release(pSMB); | 1073 | /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */ |
1074 | if(*buf) { | 1074 | if(*buf) { |
1075 | if(resp_buf_type == CIFS_SMALL_BUFFER) | 1075 | if(resp_buf_type == CIFS_SMALL_BUFFER) |
1076 | cifs_small_buf_release(iov[0].iov_base); | 1076 | cifs_small_buf_release(iov[0].iov_base); |
@@ -1274,7 +1274,7 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon, | |||
1274 | *nbytes += le16_to_cpu(pSMBr->Count); | 1274 | *nbytes += le16_to_cpu(pSMBr->Count); |
1275 | } | 1275 | } |
1276 | 1276 | ||
1277 | cifs_small_buf_release(pSMB); | 1277 | /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */ |
1278 | if(resp_buf_type == CIFS_SMALL_BUFFER) | 1278 | if(resp_buf_type == CIFS_SMALL_BUFFER) |
1279 | cifs_small_buf_release(iov[0].iov_base); | 1279 | cifs_small_buf_release(iov[0].iov_base); |
1280 | else if(resp_buf_type == CIFS_LARGE_BUFFER) | 1280 | else if(resp_buf_type == CIFS_LARGE_BUFFER) |
@@ -2606,7 +2606,7 @@ qsec_out: | |||
2606 | cifs_small_buf_release(iov[0].iov_base); | 2606 | cifs_small_buf_release(iov[0].iov_base); |
2607 | else if(buf_type == CIFS_LARGE_BUFFER) | 2607 | else if(buf_type == CIFS_LARGE_BUFFER) |
2608 | cifs_buf_release(iov[0].iov_base); | 2608 | cifs_buf_release(iov[0].iov_base); |
2609 | cifs_small_buf_release(pSMB); | 2609 | /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */ |
2610 | return rc; | 2610 | return rc; |
2611 | } | 2611 | } |
2612 | 2612 | ||
diff --git a/fs/cifs/ntlmssp.c b/fs/cifs/ntlmssp.c index 4aabe2d7cb7b..78866f925747 100644 --- a/fs/cifs/ntlmssp.c +++ b/fs/cifs/ntlmssp.c | |||
@@ -122,8 +122,7 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, const int type, | |||
122 | 122 | ||
123 | 123 | ||
124 | /* rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buf_type, 0); */ | 124 | /* rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buf_type, 0); */ |
125 | 125 | /* SMB request buf freed in SendReceive2 */ | |
126 | cifs_small_buf_release(smb_buffer); | ||
127 | 126 | ||
128 | return rc; | 127 | return rc; |
129 | } | 128 | } |
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index b12cb8a7da7c..3da80409466c 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c | |||
@@ -309,17 +309,16 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, | |||
309 | 309 | ||
310 | *pRespBufType = CIFS_NO_BUFFER; /* no response buf yet */ | 310 | *pRespBufType = CIFS_NO_BUFFER; /* no response buf yet */ |
311 | 311 | ||
312 | if (ses == NULL) { | 312 | if ((ses == NULL) || (ses->server == NULL)) { |
313 | cERROR(1,("Null smb session")); | 313 | cifs_small_buf_release(in_buf); |
314 | return -EIO; | 314 | cERROR(1,("Null session")); |
315 | } | ||
316 | if(ses->server == NULL) { | ||
317 | cERROR(1,("Null tcp session")); | ||
318 | return -EIO; | 315 | return -EIO; |
319 | } | 316 | } |
320 | 317 | ||
321 | if(ses->server->tcpStatus == CifsExiting) | 318 | if(ses->server->tcpStatus == CifsExiting) { |
319 | cifs_small_buf_release(in_buf); | ||
322 | return -ENOENT; | 320 | return -ENOENT; |
321 | } | ||
323 | 322 | ||
324 | /* Ensure that we do not send more than 50 overlapping requests | 323 | /* Ensure that we do not send more than 50 overlapping requests |
325 | to the same server. We may make this configurable later or | 324 | to the same server. We may make this configurable later or |
@@ -346,6 +345,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, | |||
346 | } else { | 345 | } else { |
347 | if(ses->server->tcpStatus == CifsExiting) { | 346 | if(ses->server->tcpStatus == CifsExiting) { |
348 | spin_unlock(&GlobalMid_Lock); | 347 | spin_unlock(&GlobalMid_Lock); |
348 | cifs_small_buf_release(in_buf); | ||
349 | return -ENOENT; | 349 | return -ENOENT; |
350 | } | 350 | } |
351 | 351 | ||
@@ -385,6 +385,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, | |||
385 | midQ = AllocMidQEntry(in_buf, ses); | 385 | midQ = AllocMidQEntry(in_buf, ses); |
386 | if (midQ == NULL) { | 386 | if (midQ == NULL) { |
387 | up(&ses->server->tcpSem); | 387 | up(&ses->server->tcpSem); |
388 | cifs_small_buf_release(in_buf); | ||
388 | /* If not lock req, update # of requests on wire to server */ | 389 | /* If not lock req, update # of requests on wire to server */ |
389 | if(long_op < 3) { | 390 | if(long_op < 3) { |
390 | atomic_dec(&ses->server->inFlight); | 391 | atomic_dec(&ses->server->inFlight); |
@@ -408,14 +409,18 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, | |||
408 | if(rc < 0) { | 409 | if(rc < 0) { |
409 | DeleteMidQEntry(midQ); | 410 | DeleteMidQEntry(midQ); |
410 | up(&ses->server->tcpSem); | 411 | up(&ses->server->tcpSem); |
412 | cifs_small_buf_release(in_buf); | ||
411 | /* If not lock req, update # of requests on wire to server */ | 413 | /* If not lock req, update # of requests on wire to server */ |
412 | if(long_op < 3) { | 414 | if(long_op < 3) { |
413 | atomic_dec(&ses->server->inFlight); | 415 | atomic_dec(&ses->server->inFlight); |
414 | wake_up(&ses->server->request_q); | 416 | wake_up(&ses->server->request_q); |
415 | } | 417 | } |
416 | return rc; | 418 | return rc; |
417 | } else | 419 | } else { |
418 | up(&ses->server->tcpSem); | 420 | up(&ses->server->tcpSem); |
421 | cifs_small_buf_release(in_buf); | ||
422 | } | ||
423 | |||
419 | if (long_op == -1) | 424 | if (long_op == -1) |
420 | goto cifs_no_response_exit2; | 425 | goto cifs_no_response_exit2; |
421 | else if (long_op == 2) /* writes past end of file can take loong time */ | 426 | else if (long_op == 2) /* writes past end of file can take loong time */ |
@@ -543,6 +548,7 @@ cifs_no_response_exit2: | |||
543 | 548 | ||
544 | out_unlock2: | 549 | out_unlock2: |
545 | up(&ses->server->tcpSem); | 550 | up(&ses->server->tcpSem); |
551 | cifs_small_buf_release(in_buf); | ||
546 | /* If not lock req, update # of requests on wire to server */ | 552 | /* If not lock req, update # of requests on wire to server */ |
547 | if(long_op < 3) { | 553 | if(long_op < 3) { |
548 | atomic_dec(&ses->server->inFlight); | 554 | atomic_dec(&ses->server->inFlight); |