svn commit: r251590 - in head/sys: kern sys
Pawel Jakub Dawidek
pjd at FreeBSD.org
Mon Jun 10 01:06:58 UTC 2013
On Sun, Jun 09, 2013 at 11:51:27PM +0000, Marcel Moolenaar wrote:
> Author: marcel
> Date: Sun Jun 9 23:51:26 2013
> New Revision: 251590
> URL: http://svnweb.freebsd.org/changeset/base/251590
>
> Log:
> 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.
Both handlers are executes after dropping the locks. How can you safely
use 'newdp' in vfs_mounted and 'mp' in vfs_unmounted?
> Submitted by: stevek at juniper.net
> Obtained from: Juniper Networks, Inc
>
> Modified:
> head/sys/kern/vfs_mount.c
> head/sys/sys/mount.h
>
> Modified: head/sys/kern/vfs_mount.c
> ==============================================================================
> --- head/sys/kern/vfs_mount.c Sun Jun 9 23:50:30 2013 (r251589)
> +++ head/sys/kern/vfs_mount.c Sun Jun 9 23:51:26 2013 (r251590)
> @@ -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);
>
> Modified: head/sys/sys/mount.h
> ==============================================================================
> --- head/sys/sys/mount.h Sun Jun 9 23:50:30 2013 (r251589)
> +++ head/sys/sys/mount.h Sun Jun 9 23:51:26 2013 (r251590)
> @@ -39,6 +39,7 @@
> #include <sys/lock.h>
> #include <sys/lockmgr.h>
> #include <sys/_mutex.h>
> +#include <sys/eventhandler.h>
> #endif
>
> /*
> @@ -798,6 +799,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
> */
>
--
Pawel Jakub Dawidek http://www.wheelsystems.com
FreeBSD committer http://www.FreeBSD.org
Am I Evil? Yes, I Am! http://mobter.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-all/attachments/20130610/963bba7b/attachment.sig>
More information about the svn-src-all
mailing list