Skip to content

Commit

Permalink
[PATCH] knfsd: svcrpc: gss: don't call svc_take_page unnecessarily
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Apr 11, 2006
1 parent bb6e8a9 commit dfee55f
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions net/sunrpc/auth_gss/svcauth_gss.c
Original file line number Diff line number Diff line change
Expand Up @@ -1122,18 +1122,20 @@ svcauth_gss_release(struct svc_rqst *rqstp)
integ_len))
BUG();
if (resbuf->page_len == 0
&& resbuf->tail[0].iov_len + RPC_MAX_AUTH_SIZE
&& resbuf->head[0].iov_len + RPC_MAX_AUTH_SIZE
< PAGE_SIZE) {
BUG_ON(resbuf->tail[0].iov_len);
/* Use head for everything */
resv = &resbuf->head[0];
} else if (resbuf->tail[0].iov_base == NULL) {
/* copied from nfsd4_encode_read */
svc_take_page(rqstp);
resbuf->tail[0].iov_base = page_address(rqstp
->rq_respages[rqstp->rq_resused-1]);
rqstp->rq_restailpage = rqstp->rq_resused-1;
if (resbuf->head[0].iov_len + RPC_MAX_AUTH_SIZE
> PAGE_SIZE)
goto out_err;
resbuf->tail[0].iov_base =
resbuf->head[0].iov_base
+ resbuf->head[0].iov_len;
resbuf->tail[0].iov_len = 0;
rqstp->rq_restailpage = 0;
resv = &resbuf->tail[0];
} else {
resv = &resbuf->tail[0];
Expand Down

0 comments on commit dfee55f

Please sign in to comment.