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_ */

Reply via email to