summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Brown <neilb@cse.unsw.edu.au>2003-06-23 22:15:28 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2003-06-23 22:15:28 -0700
commit4f819f27863582154ae8a736dcf2e7f1636a6148 (patch)
treea120535905db4315e4e60604053c0861291e0453
parent50030d57afc8c923af41b9ef4100f2a617ff8394 (diff)
[PATCH] Fix byte counting for NFSv3 readdir replies
The amount of free space is calculated wrongly so nfsv3 readdir replies are shorted than they could be.
-rw-r--r--fs/nfsd/nfs3xdr.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index b3bcce53d605..2e53ddd83935 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -780,7 +780,7 @@ encode_entry(struct readdir_cd *ccd, const char *name,
{
struct nfsd3_readdirres *cd = container_of(ccd, struct nfsd3_readdirres, common);
u32 *p = cd->buffer;
- int buflen, slen, elen;
+ int slen, elen;
if (cd->offset)
xdr_encode_hyper(cd->offset, (u64) offset);
@@ -797,7 +797,7 @@ encode_entry(struct readdir_cd *ccd, const char *name,
slen = XDR_QUADLEN(namlen);
elen = slen + NFS3_ENTRY_BAGGAGE
+ (plus? NFS3_ENTRYPLUS_BAGGAGE : 0);
- if ((buflen = cd->buflen - elen) < 0) {
+ if (cd->buflen < elen) {
cd->common.err = nfserr_readdir_nospc;
return -EINVAL;
}
@@ -836,7 +836,7 @@ encode_entry(struct readdir_cd *ccd, const char *name,
}
out:
- cd->buflen = buflen;
+ cd->buflen -= p - cd->buffer;
cd->buffer = p;
cd->common.err = nfs_ok;
return 0;