summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_vnops.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nfsclient/nfs_vnops.c')
-rw-r--r--sys/nfsclient/nfs_vnops.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c
index 2b90abd..14a50c1 100644
--- a/sys/nfsclient/nfs_vnops.c
+++ b/sys/nfsclient/nfs_vnops.c
@@ -129,6 +129,7 @@ static vop_access_t nfsspec_access;
static vop_readlink_t nfs_readlink;
static vop_print_t nfs_print;
static vop_advlock_t nfs_advlock;
+static vop_advlockasync_t nfs_advlockasync;
/*
* Global vfs data structures for nfs
@@ -137,6 +138,7 @@ struct vop_vector nfs_vnodeops = {
.vop_default = &default_vnodeops,
.vop_access = nfs_access,
.vop_advlock = nfs_advlock,
+ .vop_advlockasync = nfs_advlockasync,
.vop_close = nfs_close,
.vop_create = nfs_create,
.vop_fsync = nfs_fsync,
@@ -3052,6 +3054,27 @@ out:
}
/*
+ * NFS advisory byte-level locks.
+ */
+static int
+nfs_advlockasync(struct vop_advlockasync_args *ap)
+{
+ int error;
+
+ mtx_lock(&Giant);
+ if ((VFSTONFS(ap->a_vp->v_mount)->nm_flag & NFSMNT_NOLOCKD) != 0) {
+ struct nfsnode *np = VTONFS(ap->a_vp);
+
+ error = lf_advlockasync(ap, &(np->n_lockf), np->n_size);
+ goto out;
+ }
+ error = EOPNOTSUPP;
+out:
+ mtx_unlock(&Giant);
+ return (error);
+}
+
+/*
* Print out the contents of an nfsnode.
*/
static int
OpenPOWER on IntegriCloud