diff options
| author | NeilBrown <neilb@suse.de> | 2006-04-11 01:55:34 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-11 09:18:52 -0400 |
| commit | dfee55f06213a23b250ea63ba41caa461cdd5e72 (patch) | |
| tree | cfee86e10c5f5406bf7f1fa98c2b5d73d66d259b | |
| parent | bb6e8a9f4005237401a45f1ea43db060ea5f9725 (diff) | |
[PATCH] knfsd: svcrpc: gss: don't call svc_take_page unnecessarily
We're using svc_take_page here to get another page for the tail in case one
wasn't already allocated. But there isn't always guaranteed to be another
page available.
Also fix a typo that made us check the tail buffer for space when we meant to
be checking the head buffer.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | net/sunrpc/auth_gss/svcauth_gss.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 4d7eb9e704da..d51e316c5821 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c | |||
| @@ -1122,18 +1122,20 @@ svcauth_gss_release(struct svc_rqst *rqstp) | |||
| 1122 | integ_len)) | 1122 | integ_len)) |
| 1123 | BUG(); | 1123 | BUG(); |
| 1124 | if (resbuf->page_len == 0 | 1124 | if (resbuf->page_len == 0 |
| 1125 | && resbuf->tail[0].iov_len + RPC_MAX_AUTH_SIZE | 1125 | && resbuf->head[0].iov_len + RPC_MAX_AUTH_SIZE |
| 1126 | < PAGE_SIZE) { | 1126 | < PAGE_SIZE) { |
| 1127 | BUG_ON(resbuf->tail[0].iov_len); | 1127 | BUG_ON(resbuf->tail[0].iov_len); |
| 1128 | /* Use head for everything */ | 1128 | /* Use head for everything */ |
| 1129 | resv = &resbuf->head[0]; | 1129 | resv = &resbuf->head[0]; |
| 1130 | } else if (resbuf->tail[0].iov_base == NULL) { | 1130 | } else if (resbuf->tail[0].iov_base == NULL) { |
| 1131 | /* copied from nfsd4_encode_read */ | 1131 | if (resbuf->head[0].iov_len + RPC_MAX_AUTH_SIZE |
| 1132 | svc_take_page(rqstp); | 1132 | > PAGE_SIZE) |
| 1133 | resbuf->tail[0].iov_base = page_address(rqstp | 1133 | goto out_err; |
| 1134 | ->rq_respages[rqstp->rq_resused-1]); | 1134 | resbuf->tail[0].iov_base = |
| 1135 | rqstp->rq_restailpage = rqstp->rq_resused-1; | 1135 | resbuf->head[0].iov_base |
| 1136 | + resbuf->head[0].iov_len; | ||
| 1136 | resbuf->tail[0].iov_len = 0; | 1137 | resbuf->tail[0].iov_len = 0; |
| 1138 | rqstp->rq_restailpage = 0; | ||
| 1137 | resv = &resbuf->tail[0]; | 1139 | resv = &resbuf->tail[0]; |
| 1138 | } else { | 1140 | } else { |
| 1139 | resv = &resbuf->tail[0]; | 1141 | resv = &resbuf->tail[0]; |
