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