diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/nfsclient/nfs_vfsops.c | 6 | ||||
-rw-r--r-- | sys/nfsclient/nfs_vnops.c | 5 | ||||
-rw-r--r-- | sys/nfsclient/nfsargs.h | 1 |
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 |