summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_subr.c39
-rw-r--r--sys/kern/vnode_if.src4
2 files changed, 43 insertions, 0 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 795eac5..97ab886 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -4722,6 +4722,45 @@ vop_symlink_post(void *ap, int rc)
VFS_KNOTE_LOCKED(a->a_dvp, NOTE_WRITE);
}
+void
+vop_open_post(void *ap, int rc)
+{
+ struct vop_open_args *a = ap;
+
+ if (!rc)
+ VFS_KNOTE_LOCKED(a->a_vp, NOTE_OPEN);
+}
+
+void
+vop_close_post(void *ap, int rc)
+{
+ struct vop_close_args *a = ap;
+
+ if (!rc && (a->a_cred != NOCRED || /* filter out revokes */
+ (a->a_vp->v_iflag & VI_DOOMED) == 0)) {
+ VFS_KNOTE_LOCKED(a->a_vp, (a->a_fflag & FWRITE) != 0 ?
+ NOTE_CLOSE_WRITE : NOTE_CLOSE);
+ }
+}
+
+void
+vop_read_post(void *ap, int rc)
+{
+ struct vop_read_args *a = ap;
+
+ if (!rc)
+ VFS_KNOTE_LOCKED(a->a_vp, NOTE_READ);
+}
+
+void
+vop_readdir_post(void *ap, int rc)
+{
+ struct vop_readdir_args *a = ap;
+
+ if (!rc)
+ VFS_KNOTE_LOCKED(a->a_vp, NOTE_READ);
+}
+
static struct knlist fs_knlist;
static void
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src
index 1b07a36..0350e0e 100644
--- a/sys/kern/vnode_if.src
+++ b/sys/kern/vnode_if.src
@@ -121,6 +121,7 @@ vop_mknod {
%% open vp L L L
+%! open post vop_open_post
vop_open {
IN struct vnode *vp;
@@ -132,6 +133,7 @@ vop_open {
%% close vp L L L
+%! close post vop_close_post
vop_close {
IN struct vnode *vp;
@@ -186,6 +188,7 @@ vop_markatime {
};
%% read vp L L L
+%! read post vop_read_post
vop_read {
IN struct vnode *vp;
@@ -326,6 +329,7 @@ vop_symlink {
%% readdir vp L L L
+%! readdir post vop_readdir_post
vop_readdir {
IN struct vnode *vp;
OpenPOWER on IntegriCloud