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 | |
| 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>
| -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); |
