From owner-p4-projects@FreeBSD.ORG Fri May 28 06:25:10 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4B8CC1065670; Fri, 28 May 2010 06:25:10 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1047B1065677 for ; Fri, 28 May 2010 06:25:10 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from repoman.freebsd.org (unknown [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D7ECF8FC1B for ; Fri, 28 May 2010 06:25:09 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o4S6P9Zu089796 for ; Fri, 28 May 2010 06:25:09 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o4S6P9B5089794 for perforce@freebsd.org; Fri, 28 May 2010 06:25:09 GMT (envelope-from ilya@FreeBSD.org) Date: Fri, 28 May 2010 06:25:09 GMT Message-Id: <201005280625.o4S6P9B5089794@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 178900 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 May 2010 06:25:10 -0000 http://p4web.freebsd.org/@@178900?ac=10 Change 178900 by ilya@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 #include #include +#include #include @@ -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;