From fa9d19d5b5a167a7b50a018bacf9d0bf68db9491 Mon Sep 17 00:00:00 2001 From: alfred Date: Mon, 12 Nov 2001 02:33:52 +0000 Subject: 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. --- sys/nfsclient/nfs_vfsops.c | 6 +++--- sys/nfsclient/nfs_vnops.c | 5 +++++ sys/nfsclient/nfsargs.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'sys/nfsclient') 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 -- cgit v1.1