Module Name:    src
Committed By:   hannken
Date:           Wed Jan 14 11:21:31 UTC 2015

Modified Files:
        src/sys/ufs/mfs: mfs_vfsops.c mfs_vnops.c

Log Message:
Change mfs to use an anonymous vnode obtained with bdevvp()
for the specdev it mounts on.


To generate a diff of this commit:
cvs rdiff -u -r1.108 -r1.109 src/sys/ufs/mfs/mfs_vfsops.c
cvs rdiff -u -r1.55 -r1.56 src/sys/ufs/mfs/mfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ufs/mfs/mfs_vfsops.c
diff -u src/sys/ufs/mfs/mfs_vfsops.c:1.108 src/sys/ufs/mfs/mfs_vfsops.c:1.109
--- src/sys/ufs/mfs/mfs_vfsops.c:1.108	Thu May  8 08:21:53 2014
+++ src/sys/ufs/mfs/mfs_vfsops.c	Wed Jan 14 11:21:31 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: mfs_vfsops.c,v 1.108 2014/05/08 08:21:53 hannken Exp $	*/
+/*	$NetBSD: mfs_vfsops.c,v 1.109 2015/01/14 11:21:31 hannken Exp $	*/
 
 /*
  * Copyright (c) 1989, 1990, 1993, 1994
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.108 2014/05/08 08:21:53 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.109 2015/01/14 11:21:31 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -71,7 +71,7 @@ MODULE(MODULE_CLASS_VFS, mfs, "ffs");
 kmutex_t mfs_lock;	/* global lock */
 
 /* used for building internal dev_t, minor == 0 reserved for miniroot */
-static int mfs_minor = 1;
+static devminor_t mfs_minor = 1;
 static int mfs_initcnt;
 
 extern int (**mfs_vnodeop_p)(void *);
@@ -246,6 +246,7 @@ mfs_mount(struct mount *mp, const char *
 	struct fs *fs;
 	struct mfsnode *mfsp;
 	struct proc *p;
+	devminor_t minor;
 	int flags, error = 0;
 
 	if (args == NULL)
@@ -307,14 +308,20 @@ mfs_mount(struct mount *mp, const char *
 			return EINVAL;
 		return (0);
 	}
-	error = getnewvnode(VT_MFS, NULL, mfs_vnodeop_p, NULL, &devvp);
+	mutex_enter(&mfs_lock);
+	minor = mfs_minor++;
+	mutex_exit(&mfs_lock);
+	error = bdevvp(makedev(255, minor), &devvp);
 	if (error)
 		return (error);
-	devvp->v_vflag |= VV_MPSAFE;
-	devvp->v_type = VBLK;
-	spec_node_init(devvp, makedev(255, mfs_minor));
-	mfs_minor++;
 	mfsp = kmem_alloc(sizeof(*mfsp), KM_SLEEP);
+	/*
+	 * Changing v_op and v_data here is safe as we are
+	 * the exclusive owner of this device node.
+	 */
+	KASSERT(devvp->v_op == spec_vnodeop_p);
+	KASSERT(devvp->v_data == NULL);
+	devvp->v_op = mfs_vnodeop_p;
 	devvp->v_data = mfsp;
 	mfsp->mfs_baseoff = args->base;
 	mfsp->mfs_size = args->size;

Index: src/sys/ufs/mfs/mfs_vnops.c
diff -u src/sys/ufs/mfs/mfs_vnops.c:1.55 src/sys/ufs/mfs/mfs_vnops.c:1.56
--- src/sys/ufs/mfs/mfs_vnops.c:1.55	Fri Jul 25 08:20:53 2014
+++ src/sys/ufs/mfs/mfs_vnops.c	Wed Jan 14 11:21:31 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: mfs_vnops.c,v 1.55 2014/07/25 08:20:53 dholland Exp $	*/
+/*	$NetBSD: mfs_vnops.c,v 1.56 2015/01/14 11:21:31 hannken Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.55 2014/07/25 08:20:53 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.56 2015/01/14 11:21:31 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -280,8 +280,8 @@ mfs_inactive(void *v)
 	if (bufq_peek(mfsp->mfs_buflist) != NULL)
 		panic("mfs_inactive: not inactive (mfs_buflist %p)",
 			bufq_peek(mfsp->mfs_buflist));
-	VOP_UNLOCK(vp);
-	return (0);
+
+	return VOCALL(spec_vnodeop_p,  VOFFSET(vop_inactive), ap);
 }
 
 /*
@@ -308,7 +308,7 @@ mfs_reclaim(void *v)
 		kmem_free(mfsp, sizeof(*mfsp));
 	}
 
-	return (0);
+	return VOCALL(spec_vnodeop_p,  VOFFSET(vop_reclaim), ap);
 }
 
 /*

Reply via email to