Module Name: src Committed By: hannken Date: Thu May 19 14:47:33 UTC 2016
Modified Files: src/sys/kern: vfs_mount.c vfs_vnode.c src/sys/sys: vnode.h Log Message: Add VFS_VNODE_PRIVATE protected operations vnalloc_marker() to create, vnfree_marker() to destroy and vnis_marker() to test for marker vnodes. Make operations vnalloc() and vnfree() local to vfs_vnode.c. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/kern/vfs_mount.c cvs rdiff -u -r1.47 -r1.48 src/sys/kern/vfs_vnode.c cvs rdiff -u -r1.259 -r1.260 src/sys/sys/vnode.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/vfs_mount.c diff -u src/sys/kern/vfs_mount.c:1.37 src/sys/kern/vfs_mount.c:1.38 --- src/sys/kern/vfs_mount.c:1.37 Wed Aug 19 08:40:02 2015 +++ src/sys/kern/vfs_mount.c Thu May 19 14:47:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.37 2015/08/19 08:40:02 hannken Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.38 2016/05/19 14:47:33 hannken Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.37 2015/08/19 08:40:02 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.38 2016/05/19 14:47:33 hannken Exp $"); #define _VFS_VNODE_PRIVATE @@ -346,7 +346,7 @@ vfs_vnode_iterator_init(struct mount *mp { struct vnode *vp; - vp = vnalloc(mp); + vp = vnalloc_marker(mp); mutex_enter(&mntvnode_lock); TAILQ_INSERT_HEAD(&mp->mnt_vnodelist, vp, v_mntvnodes); @@ -362,13 +362,13 @@ vfs_vnode_iterator_destroy(struct vnode_ struct vnode *mvp = &vi->vi_vnode; mutex_enter(&mntvnode_lock); - KASSERT(ISSET(mvp->v_iflag, VI_MARKER)); + KASSERT(vnis_marker(mvp)); if (mvp->v_usecount != 0) { TAILQ_REMOVE(&mvp->v_mount->mnt_vnodelist, mvp, v_mntvnodes); mvp->v_usecount = 0; } mutex_exit(&mntvnode_lock); - vnfree(mvp); + vnfree_marker(mvp); } struct vnode * @@ -380,7 +380,7 @@ vfs_vnode_iterator_next(struct vnode_ite struct vnode *vp; int error; - KASSERT(ISSET(mvp->v_iflag, VI_MARKER)); + KASSERT(vnis_marker(mvp)); do { mutex_enter(&mntvnode_lock); @@ -393,7 +393,7 @@ again: return NULL; } mutex_enter(vp->v_interlock); - if (ISSET(vp->v_iflag, VI_MARKER) || + if (vnis_marker(vp) || ISSET(vp->v_iflag, VI_XLOCK) || (f && !(*f)(cl, vp))) { mutex_exit(vp->v_interlock); Index: src/sys/kern/vfs_vnode.c diff -u src/sys/kern/vfs_vnode.c:1.47 src/sys/kern/vfs_vnode.c:1.48 --- src/sys/kern/vfs_vnode.c:1.47 Fri Apr 22 15:01:54 2016 +++ src/sys/kern/vfs_vnode.c Thu May 19 14:47:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnode.c,v 1.47 2016/04/22 15:01:54 riastradh Exp $ */ +/* $NetBSD: vfs_vnode.c,v 1.48 2016/05/19 14:47:33 hannken Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -116,7 +116,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.47 2016/04/22 15:01:54 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.48 2016/05/19 14:47:33 hannken Exp $"); #define _VFS_VNODE_PRIVATE @@ -195,6 +195,8 @@ static void vclean(vnode_t *); static void vrelel(vnode_t *, int); static void vdrain_thread(void *); static void vrele_thread(void *); +static vnode_t * vnalloc(struct mount *); +static void vnfree(vnode_t *); static void vnpanic(vnode_t *, const char *, ...) __printflike(2, 3); static void vwait(vnode_t *, int); @@ -236,10 +238,41 @@ vfs_vnode_sysinit(void) } /* + * Allocate a new marker vnode. + */ +vnode_t * +vnalloc_marker(struct mount *mp) +{ + + return vnalloc(mp); +} + +/* + * Free a marker vnode. + */ +void +vnfree_marker(vnode_t *vp) +{ + + KASSERT(ISSET(vp->v_iflag, VI_MARKER)); + vnfree(vp); +} + +/* + * Test a vnode for being a marker vnode. + */ +bool +vnis_marker(vnode_t *vp) +{ + + return (ISSET(vp->v_iflag, VI_MARKER)); +} + +/* * Allocate a new, uninitialized vnode. If 'mp' is non-NULL, this is a * marker vnode. */ -vnode_t * +static vnode_t * vnalloc(struct mount *mp) { vnode_t *vp; @@ -280,7 +313,7 @@ vnalloc(struct mount *mp) /* * Free an unused, unreferenced vnode. */ -void +static void vnfree(vnode_t *vp) { Index: src/sys/sys/vnode.h diff -u src/sys/sys/vnode.h:1.259 src/sys/sys/vnode.h:1.260 --- src/sys/sys/vnode.h:1.259 Sat Jan 23 16:08:20 2016 +++ src/sys/sys/vnode.h Thu May 19 14:47:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: vnode.h,v 1.259 2016/01/23 16:08:20 christos Exp $ */ +/* $NetBSD: vnode.h,v 1.260 2016/05/19 14:47:33 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -546,9 +546,6 @@ int vtruncbuf(struct vnode *, daddr_t, b void vwakeup(struct buf *); int vdead_check(struct vnode *, int); void vrevoke(struct vnode *); -struct vnode * - vnalloc(struct mount *); -void vnfree(struct vnode *); void vremfree(struct vnode *); int vcache_get(struct mount *, const void *, size_t, struct vnode **); int vcache_new(struct mount *, struct vnode *, @@ -605,6 +602,16 @@ void vfs_mount_print(struct mount *, int __printflike(1, 2)); #endif /* DDB */ +#ifdef _VFS_VNODE_PRIVATE +/* + * Private vnode manipulation functions. + */ +struct vnode * + vnalloc_marker(struct mount *); +void vnfree_marker(vnode_t *); +bool vnis_marker(vnode_t *); +#endif /* _VFS_VNODE_PRIVATE */ + #endif /* _KERNEL */ #endif /* !_SYS_VNODE_H_ */