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