PERFORCE change 178900 for review
Ilya Putsikau
ilya at FreeBSD.org
Fri May 28 06:25:10 UTC 2010
http://p4web.freebsd.org/@@178900?ac=10
Change 178900 by ilya at ilya_triton on 2010/05/28 06:24:34
Import initial version.
Affected files ...
.. //depot/projects/soc2010/ilya_fsnotify/src/sys/kern/vfs_notify.c#1 add
.. //depot/projects/soc2010/ilya_fsnotify/src/sys/kern/vfs_subr.c#2 edit
.. //depot/projects/soc2010/ilya_fsnotify/src/sys/modules/fsnotify/Makefile#1 add
.. //depot/projects/soc2010/ilya_fsnotify/src/sys/sys/fsnotify.h#1 add
Differences ...
==== //depot/projects/soc2010/ilya_fsnotify/src/sys/kern/vfs_subr.c#2 (text+ko) ====
@@ -71,6 +71,7 @@
#include <sys/syslog.h>
#include <sys/vmmeter.h>
#include <sys/vnode.h>
+#include <sys/fsnotify.h>
#include <machine/stdarg.h>
@@ -271,6 +272,24 @@
SYSCTL_INT(_debug, OID_AUTO, vnlru_nowhere, CTLFLAG_RW,
&vnlru_nowhere, 0, "Number of times the vnlru process ran without success");
+/*
+ * fsnotify hooks
+ */
+vop_create_t *fsnotify_hook_create = NULL;
+vop_link_t *fsnotify_hook_link = NULL;
+vop_mkdir_t *fsnotify_hook_mkdir = NULL;
+vop_remove_t *fsnotify_hook_remove = NULL;
+vop_rename_t *fsnotify_hook_rename = NULL;
+vop_rmdir_t *fsnotify_hook_rmdir = NULL;
+vop_symlink_t *fsnotify_hook_symlink = NULL;
+
+#define FSNOTIFY_FUNCPTR(f) __CONCAT(fsnotify_hook_, f)
+
+#define FSNOTIFY(f, a) do { \
+ if (FSNOTIFY_FUNCPTR(f) != NULL) \
+ (FSNOTIFY_FUNCPTR(f))(a); \
+ } while (0)
+
/*
* Macros to control when a vnode is freed and recycled. All require
* the vnode interlock.
@@ -3913,8 +3932,10 @@
{
struct vop_create_args *a = ap;
- if (!rc)
+ if (!rc) {
VFS_KNOTE_LOCKED(a->a_dvp, NOTE_WRITE);
+ FSNOTIFY(create, ap);
+ }
}
void
@@ -3925,6 +3946,7 @@
if (!rc) {
VFS_KNOTE_LOCKED(a->a_vp, NOTE_LINK);
VFS_KNOTE_LOCKED(a->a_tdvp, NOTE_WRITE);
+ FSNOTIFY(link, ap);
}
}
@@ -3933,8 +3955,10 @@
{
struct vop_mkdir_args *a = ap;
- if (!rc)
+ if (!rc) {
VFS_KNOTE_LOCKED(a->a_dvp, NOTE_WRITE | NOTE_LINK);
+ FSNOTIFY(mkdir, ap);
+ }
}
void
@@ -3954,6 +3978,7 @@
if (!rc) {
VFS_KNOTE_LOCKED(a->a_dvp, NOTE_WRITE);
VFS_KNOTE_LOCKED(a->a_vp, NOTE_DELETE);
+ FSNOTIFY(remove, ap);
}
}
@@ -3968,6 +3993,7 @@
VFS_KNOTE_UNLOCKED(a->a_fvp, NOTE_RENAME);
if (a->a_tvp)
VFS_KNOTE_UNLOCKED(a->a_tvp, NOTE_DELETE);
+ FSNOTIFY(rename, ap);
}
if (a->a_tdvp != a->a_fdvp)
vdrop(a->a_fdvp);
@@ -3986,6 +4012,7 @@
if (!rc) {
VFS_KNOTE_LOCKED(a->a_dvp, NOTE_WRITE | NOTE_LINK);
VFS_KNOTE_LOCKED(a->a_vp, NOTE_DELETE);
+ FSNOTIFY(rmdir, ap);
}
}
@@ -3996,6 +4023,7 @@
if (!rc)
VFS_KNOTE_LOCKED(a->a_vp, NOTE_ATTRIB);
+
}
void
@@ -4003,8 +4031,10 @@
{
struct vop_symlink_args *a = ap;
- if (!rc)
+ if (!rc) {
VFS_KNOTE_LOCKED(a->a_dvp, NOTE_WRITE);
+ FSNOTIFY(symlink, ap);
+ }
}
static struct knlist fs_knlist;
More information about the p4-projects
mailing list