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