From: NeilBrown <neilb@cse.unsw.edu.au>
{
int maxcount;
loff_t offset;
- u32 *page;
+ u32 *page, *savep;
ENCODE_HEAD;
if (nfserr)
return nfserr_resource;
RESERVE_SPACE(8); /* verifier */
+ savep = p;
/* XXX: Following NFSv3, we ignore the READDIR verifier for now. */
WRITE32(0);
* pointer and eof field.
*/
maxcount = (maxcount >> 2) - 4;
- if (maxcount < 0)
- return nfserr_toosmall;
+ if (maxcount < 0) {
+ nfserr = nfserr_toosmall;
+ goto err_no_verf;
+ }
svc_take_page(resp->rqstp);
page = page_address(resp->rqstp->rq_respages[resp->rqstp->rq_resused-1]);
readdir->buffer == page)
nfserr = nfserr_toosmall;
if (nfserr)
- return nfserr;
+ goto err_no_verf;
if (readdir->offset)
xdr_encode_hyper(readdir->offset, offset);
resp->end = resp->p + PAGE_SIZE/4;
return 0;
+err_no_verf:
+ p = savep;
+ ADJUST_ARGS();
+ return nfserr;
}
static void