summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2001-11-12 02:33:52 +0000
committeralfred <alfred@FreeBSD.org>2001-11-12 02:33:52 +0000
commitfa9d19d5b5a167a7b50a018bacf9d0bf68db9491 (patch)
tree661a9bb10d2313edc596f0373f96041cee806ac5 /sys/nfsclient
parentbdcad4abe9842b7ce28d140987a31959a30d3665 (diff)
downloadFreeBSD-src-fa9d19d5b5a167a7b50a018bacf9d0bf68db9491.zip
FreeBSD-src-fa9d19d5b5a167a7b50a018bacf9d0bf68db9491.tar.gz
Allow users to use the 'nolockd' or -L options with mount_nfs in order
to avoid the need for rpc.lockd to perform client locks. Using this option a user can revert back to using local locks for NFS mounts like we did before we had rpc.lockd.
Diffstat (limited to 'sys/nfsclient')
-rw-r--r--sys/nfsclient/nfs_vfsops.c6
-rw-r--r--sys/nfsclient/nfs_vnops.c5
-rw-r--r--sys/nfsclient/nfsargs.h1
3 files changed, 9 insertions, 3 deletions
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index e80adad..f49d56a 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -763,12 +763,12 @@ nfs_mount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
return (EIO);
/*
* When doing an update, we can't change from or to
- * v3, or change cookie translation
+ * v3, switch lockd strategies or change cookie translation
*/
args.flags = (args.flags &
- ~(NFSMNT_NFSV3 /*|NFSMNT_XLATECOOKIE*/)) |
+ ~(NFSMNT_NFSV3 | NFSMNT_NOLOCKD /*|NFSMNT_XLATECOOKIE*/)) |
(nmp->nm_flag &
- (NFSMNT_NFSV3 /*|NFSMNT_XLATECOOKIE*/));
+ (NFSMNT_NFSV3 | NFSMNT_NOLOCKD /*|NFSMNT_XLATECOOKIE*/));
nfs_decode_args(nmp, &args);
return (0);
}
diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c
index fdb0fca..ae81f0f 100644
--- a/sys/nfsclient/nfs_vnops.c
+++ b/sys/nfsclient/nfs_vnops.c
@@ -2838,6 +2838,11 @@ static int
nfs_advlock(struct vop_advlock_args *ap)
{
+ if ((VFSTONFS(ap->a_vp->v_mount)->nm_flag & NFSMNT_NOLOCKD) != 0) {
+ struct nfsnode *np = VTONFS(ap->a_vp);
+
+ return (lf_advlock(ap, &(np->n_lockf), np->n_size));
+ }
return (nfs_dolock(ap));
}
diff --git a/sys/nfsclient/nfsargs.h b/sys/nfsclient/nfsargs.h
index d53e4e0..7f4c636 100644
--- a/sys/nfsclient/nfsargs.h
+++ b/sys/nfsclient/nfsargs.h
@@ -94,5 +94,6 @@ struct nfs_args {
#define NFSMNT_ACREGMAX 0x00080000
#define NFSMNT_ACDIRMIN 0x00100000
#define NFSMNT_ACDIRMAX 0x00200000
+#define NFSMNT_NOLOCKD 0x00400000 /* Locks are local */
#endif
OpenPOWER on IntegriCloud