From 8c7ca16f63f0f70ef6ef1c92c1d9aa435391e786 Mon Sep 17 00:00:00 2001 From: Marcel Moolenaar Date: Sun, 9 Jun 2013 23:51:26 +0000 Subject: [PATCH] Add vfs_mounted and vfs_unmounted events so that components can be informed about mount and unmount events. This is used by Juniper to implement a more optimal implementation of NetBSD's veriexec. Submitted by: stevek@juniper.net Obtained from: Juniper Networks, Inc --- sys/kern/vfs_mount.c | 2 ++ sys/sys/mount.h | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 448fdbbbfc6c..2e5d12f02f74 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -864,6 +864,7 @@ vfs_domount_first( VOP_UNLOCK(newdp, 0); VOP_UNLOCK(vp, 0); mountcheckdirs(vp, newdp); + EVENTHANDLER_INVOKE(vfs_mounted, mp, newdp, td); vrele(newdp); if ((mp->mnt_flag & MNT_RDONLY) == 0) vfs_allocate_syncvnode(mp); @@ -1355,6 +1356,7 @@ dounmount(mp, flags, td) mtx_lock(&mountlist_mtx); TAILQ_REMOVE(&mountlist, mp, mnt_list); mtx_unlock(&mountlist_mtx); + EVENTHANDLER_INVOKE(vfs_unmounted, mp, td); if (coveredvp != NULL) { coveredvp->v_mountedhere = NULL; vput(coveredvp); diff --git a/sys/sys/mount.h b/sys/sys/mount.h index a953dae420cd..2938e32bead2 100644 --- a/sys/sys/mount.h +++ b/sys/sys/mount.h @@ -39,6 +39,7 @@ #include #include #include +#include #endif /* @@ -797,6 +798,17 @@ vfs_statfs_t __vfs_statfs; extern char *mountrootfsname; +/* + * Event handlers + */ + +typedef void (*vfs_mounted_notify_fn)(void *, struct mount *, struct vnode *, + struct thread *); +typedef void (*vfs_unmounted_notify_fn)(void *, struct mount *, + struct thread *); +EVENTHANDLER_DECLARE(vfs_mounted, vfs_mounted_notify_fn); +EVENTHANDLER_DECLARE(vfs_unmounted, vfs_unmounted_notify_fn); + /* * exported vnode operations */