summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzml <zml@FreeBSD.org>2010-05-12 21:24:46 +0000
committerzml <zml@FreeBSD.org>2010-05-12 21:24:46 +0000
commit773cda6040b0b1d6fe89422c1946947d521fd2eb (patch)
treece67b9798568e20fc8bce6cc7b78d0c998d7bf42
parent9fed13dcbad587e7ad67a1970047081baec1a257 (diff)
downloadFreeBSD-src-773cda6040b0b1d6fe89422c1946947d521fd2eb.zip
FreeBSD-src-773cda6040b0b1d6fe89422c1946947d521fd2eb.tar.gz
Add VOP_ADVLOCKPURGE so that the file system is called when purging
locks (in the case where the VFS impl isn't using lf_*) Submitted by: Matthew Fleming <matthew.fleming@isilon.com> Reviewed by: zml, dfr
-rw-r--r--sys/kern/vfs_default.c11
-rw-r--r--sys/kern/vfs_subr.c2
-rw-r--r--sys/kern/vnode_if.src7
-rw-r--r--sys/sys/vnode.h1
4 files changed, 20 insertions, 1 deletions
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index 3788147..2d9a908 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -98,6 +98,7 @@ struct vop_vector default_vnodeops = {
.vop_accessx = vop_stdaccessx,
.vop_advlock = vop_stdadvlock,
.vop_advlockasync = vop_stdadvlockasync,
+ .vop_advlockpurge = vop_stdadvlockpurge,
.vop_bmap = vop_stdbmap,
.vop_close = VOP_NULL,
.vop_fsync = VOP_NULL,
@@ -413,6 +414,16 @@ vop_stdadvlockasync(struct vop_advlockasync_args *ap)
return (lf_advlockasync(ap, &(vp->v_lockf), vattr.va_size));
}
+int
+vop_stdadvlockpurge(struct vop_advlockpurge_args *ap)
+{
+ struct vnode *vp;
+
+ vp = ap->a_vp;
+ lf_purgelocks(vp, &vp->v_lockf);
+ return (0);
+}
+
/*
* vop_stdpathconf:
*
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 1fb131a..d44b735 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -2585,7 +2585,7 @@ vgonel(struct vnode *vp)
/*
* Clear the advisory locks and wake up waiting threads.
*/
- lf_purgelocks(vp, &(vp->v_lockf));
+ (void)VOP_ADVLOCKPURGE(vp);
/*
* Delete from old mount point vnode list.
*/
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src
index c9f20e3..304e009 100644
--- a/sys/kern/vnode_if.src
+++ b/sys/kern/vnode_if.src
@@ -453,6 +453,13 @@ vop_advlockasync {
};
+%% advlockpurge vp E E E
+
+vop_advlockpurge {
+ IN struct vnode *vp;
+};
+
+
%% reallocblks vp E E E
vop_reallocblks {
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 64b3ce4..4c79ea5 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -692,6 +692,7 @@ int vop_stdaccess(struct vop_access_args *ap);
int vop_stdaccessx(struct vop_accessx_args *ap);
int vop_stdadvlock(struct vop_advlock_args *ap);
int vop_stdadvlockasync(struct vop_advlockasync_args *ap);
+int vop_stdadvlockpurge(struct vop_advlockpurge_args *ap);
int vop_stdpathconf(struct vop_pathconf_args *);
int vop_stdpoll(struct vop_poll_args *);
int vop_stdvptocnp(struct vop_vptocnp_args *ap);
OpenPOWER on IntegriCloud