summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsclient
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2013-05-12 21:48:08 +0000
committerrmacklem <rmacklem@FreeBSD.org>2013-05-12 21:48:08 +0000
commit4bf4286804208d72b2433020161a2ac465541718 (patch)
tree64bd6812b77ef082a3fb478a9d61d08cb6d83ab8 /sys/fs/nfsclient
parenta29b04fcf3b1dfe691773859175d8fcc46459f11 (diff)
downloadFreeBSD-src-4bf4286804208d72b2433020161a2ac465541718.zip
FreeBSD-src-4bf4286804208d72b2433020161a2ac465541718.tar.gz
Add support for the eofflag to nfs_readdir() in the new NFS
client so that it works under a unionfs mount. Submitted by: Jared Yanovich (slovichon@gmail.com) Reviewed by: kib MFC after: 2 weeks
Diffstat (limited to 'sys/fs/nfsclient')
-rw-r--r--sys/fs/nfsclient/nfs_clvnops.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index 4b52a05..490382d 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -2232,6 +2232,8 @@ nfs_readdir(struct vop_readdir_args *ap)
int error = 0;
struct vattr vattr;
+ if (ap->a_eofflag != NULL)
+ *ap->a_eofflag = 0;
if (vp->v_type != VDIR)
return(EPERM);
@@ -2246,6 +2248,8 @@ nfs_readdir(struct vop_readdir_args *ap)
!NFS_TIMESPEC_COMPARE(&np->n_mtime, &vattr.va_mtime)) {
mtx_unlock(&np->n_mtx);
NFSINCRGLOBAL(newnfsstats.direofcache_hits);
+ if (ap->a_eofflag != NULL)
+ *ap->a_eofflag = 1;
return (0);
} else
mtx_unlock(&np->n_mtx);
@@ -2258,8 +2262,11 @@ nfs_readdir(struct vop_readdir_args *ap)
tresid = uio->uio_resid;
error = ncl_bioread(vp, uio, 0, ap->a_cred);
- if (!error && uio->uio_resid == tresid)
+ if (!error && uio->uio_resid == tresid) {
NFSINCRGLOBAL(newnfsstats.direofcache_misses);
+ if (ap->a_eofflag != NULL)
+ *ap->a_eofflag = 1;
+ }
return (error);
}
OpenPOWER on IntegriCloud