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);
}
/*