diff options
author | jhb <jhb@FreeBSD.org> | 2011-12-23 20:11:37 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2011-12-23 20:11:37 +0000 |
commit | 33f06e36cf482807ff85997787e2b99952b68c4c (patch) | |
tree | 29c40988b2d39e863f8a5217d7937b10f86b0a34 /sys | |
parent | b63346bb14e9639acc776319af569d6550cfe069 (diff) | |
download | FreeBSD-src-33f06e36cf482807ff85997787e2b99952b68c4c.zip FreeBSD-src-33f06e36cf482807ff85997787e2b99952b68c4c.tar.gz |
Add post-VOP hooks for VOP_DELETEEXTATTR() and VOP_SETEXTATTR() and use
these to trigger a NOTE_ATTRIB EVFILT_VNODE kevent when the extended
attributes of a vnode are changed.
Note that OS X already implements this behavior.
Reviewed by: rwatson
MFC after: 2 weeks
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/vfs_subr.c | 18 | ||||
-rw-r--r-- | sys/kern/vnode_if.src | 2 | ||||
-rw-r--r-- | sys/sys/vnode.h | 2 |
3 files changed, 22 insertions, 0 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 2872f77..544b1cc 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -4033,6 +4033,15 @@ vop_create_post(void *ap, int rc) } void +vop_deleteextattr_post(void *ap, int rc) +{ + struct vop_setattr_args *a = ap; + + if (!rc) + VFS_KNOTE_LOCKED(a->a_vp, NOTE_ATTRIB); +} + +void vop_link_post(void *ap, int rc) { struct vop_link_args *a = ap; @@ -4114,6 +4123,15 @@ vop_setattr_post(void *ap, int rc) } void +vop_setextattr_post(void *ap, int rc) +{ + struct vop_setattr_args *a = ap; + + if (!rc) + VFS_KNOTE_LOCKED(a->a_vp, NOTE_ATTRIB); +} + +void vop_symlink_post(void *ap, int rc) { struct vop_symlink_args *a = ap; diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src index 6f24d17..334ce16 100644 --- a/sys/kern/vnode_if.src +++ b/sys/kern/vnode_if.src @@ -569,6 +569,7 @@ vop_openextattr { %% deleteextattr vp E E E +%! deleteextattr post vop_deleteextattr_post vop_deleteextattr { IN struct vnode *vp; @@ -580,6 +581,7 @@ vop_deleteextattr { %% setextattr vp E E E +%! setextattr post vop_setextattr_post vop_setextattr { IN struct vnode *vp; diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 7382336..7f364ad 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -705,6 +705,7 @@ int vop_panic(struct vop_generic_args *ap); /* These are called from within the actual VOPS. */ void vop_create_post(void *a, int rc); +void vop_deleteextattr_post(void *a, int rc); void vop_link_post(void *a, int rc); void vop_lock_pre(void *a); void vop_lock_post(void *a, int rc); @@ -717,6 +718,7 @@ void vop_rename_post(void *a, int rc); void vop_rename_pre(void *a); void vop_rmdir_post(void *a, int rc); void vop_setattr_post(void *a, int rc); +void vop_setextattr_post(void *a, int rc); void vop_strategy_pre(void *a); void vop_symlink_post(void *a, int rc); void vop_unlock_post(void *a, int rc); |