CVS commit: src/sys/ufs/mfs
Module Name:src Committed By: hannken Date: Sat Mar 19 13:48:42 UTC 2022 Modified Files: src/sys/ufs/mfs: mfs_vfsops.c mfs_vnops.c Log Message: Switch MFS device node to real vnode locking, VV_LOCKSWORK now. To generate a diff of this commit: cvs rdiff -u -r1.114 -r1.115 src/sys/ufs/mfs/mfs_vfsops.c cvs rdiff -u -r1.63 -r1.64 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.114 src/sys/ufs/mfs/mfs_vfsops.c:1.115 --- src/sys/ufs/mfs/mfs_vfsops.c:1.114 Mon Mar 16 21:20:13 2020 +++ src/sys/ufs/mfs/mfs_vfsops.c Sat Mar 19 13:48:42 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: mfs_vfsops.c,v 1.114 2020/03/16 21:20:13 pgoyette Exp $ */ +/* $NetBSD: mfs_vfsops.c,v 1.115 2022/03/19 13:48:42 hannken Exp $ */ /* * Copyright (c) 1989, 1990, 1993, 1994 @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.114 2020/03/16 21:20:13 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.115 2022/03/19 13:48:42 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -208,6 +208,7 @@ mfs_mountroot(void) rootvp->v_data = mfsp; rootvp->v_op = mfs_vnodeop_p; rootvp->v_tag = VT_MFS; + rootvp->v_vflag |= VV_LOCKSWORK; mfsp->mfs_baseoff = mfs_rootbase; mfsp->mfs_size = mfs_rootsize; mfsp->mfs_vnode = rootvp; @@ -326,6 +327,7 @@ mfs_mount(struct mount *mp, const char * KASSERT(devvp->v_data == NULL); devvp->v_op = mfs_vnodeop_p; devvp->v_data = mfsp; + devvp->v_vflag |= VV_LOCKSWORK; mfsp->mfs_baseoff = args->base; mfsp->mfs_size = args->size; mfsp->mfs_vnode = devvp; Index: src/sys/ufs/mfs/mfs_vnops.c diff -u src/sys/ufs/mfs/mfs_vnops.c:1.63 src/sys/ufs/mfs/mfs_vnops.c:1.64 --- src/sys/ufs/mfs/mfs_vnops.c:1.63 Sun Jul 18 23:57:15 2021 +++ src/sys/ufs/mfs/mfs_vnops.c Sat Mar 19 13:48:42 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: mfs_vnops.c,v 1.63 2021/07/18 23:57:15 dholland Exp $ */ +/* $NetBSD: mfs_vnops.c,v 1.64 2022/03/19 13:48:42 hannken Exp $ */ /* * Copyright (c) 1989, 1993 @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.63 2021/07/18 23:57:15 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.64 2022/03/19 13:48:42 hannken Exp $"); #include #include @@ -89,12 +89,12 @@ const struct vnodeopv_entry_desc mfs_vno { _abortop_desc, genfs_badop }, /* abortop */ { _inactive_desc, mfs_inactive }, /* inactive */ { _reclaim_desc, mfs_reclaim }, /* reclaim */ - { _lock_desc, genfs_nolock }, /* lock */ - { _unlock_desc, genfs_nounlock }, /* unlock */ + { _lock_desc, genfs_lock }, /* lock */ + { _unlock_desc, genfs_unlock }, /* unlock */ { _bmap_desc, mfs_bmap }, /* bmap */ { _strategy_desc, mfs_strategy }, /* strategy */ { _print_desc, mfs_print }, /* print */ - { _islocked_desc, genfs_noislocked }, /* islocked */ + { _islocked_desc, genfs_islocked }, /* islocked */ { _pathconf_desc, genfs_badop }, /* pathconf */ { _advlock_desc, genfs_badop }, /* advlock */ { _bwrite_desc, vn_bwrite }, /* bwrite */
CVS commit: src/sys/ufs/mfs
Module Name:src Committed By: hannken Date: Sat Mar 19 13:48:42 UTC 2022 Modified Files: src/sys/ufs/mfs: mfs_vfsops.c mfs_vnops.c Log Message: Switch MFS device node to real vnode locking, VV_LOCKSWORK now. To generate a diff of this commit: cvs rdiff -u -r1.114 -r1.115 src/sys/ufs/mfs/mfs_vfsops.c cvs rdiff -u -r1.63 -r1.64 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.
CVS commit: src/sys/ufs/mfs
Module Name:src Committed By: hannken Date: Wed Feb 20 10:03:56 UTC 2019 Modified Files: src/sys/ufs/mfs: mfs_vnops.c Log Message: Remove superfluous VOP_UNLOCK(), vnode will be unlocked from spec_reclaim(). To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 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_vnops.c diff -u src/sys/ufs/mfs/mfs_vnops.c:1.58 src/sys/ufs/mfs/mfs_vnops.c:1.59 --- src/sys/ufs/mfs/mfs_vnops.c:1.58 Fri May 26 14:21:02 2017 +++ src/sys/ufs/mfs/mfs_vnops.c Wed Feb 20 10:03:55 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: mfs_vnops.c,v 1.58 2017/05/26 14:21:02 riastradh Exp $ */ +/* $NetBSD: mfs_vnops.c,v 1.59 2019/02/20 10:03:55 hannken Exp $ */ /* * Copyright (c) 1989, 1993 @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.58 2017/05/26 14:21:02 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.59 2019/02/20 10:03:55 hannken Exp $"); #include #include @@ -297,8 +297,6 @@ mfs_reclaim(void *v) struct mfsnode *mfsp = VTOMFS(vp); int refcnt; - VOP_UNLOCK(vp); - mutex_enter(_lock); vp->v_data = NULL; refcnt = --mfsp->mfs_refcnt;
CVS commit: src/sys/ufs/mfs
Module Name:src Committed By: hannken Date: Wed Feb 20 10:03:56 UTC 2019 Modified Files: src/sys/ufs/mfs: mfs_vnops.c Log Message: Remove superfluous VOP_UNLOCK(), vnode will be unlocked from spec_reclaim(). To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 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.
CVS commit: src/sys/ufs/mfs
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); } /*
CVS commit: src/sys/ufs/mfs
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.
CVS commit: src/sys/ufs/mfs
Module Name:src Committed By: pooka Date: Tue Mar 2 17:20:03 UTC 2010 Modified Files: src/sys/ufs/mfs: mfs_extern.h mfs_vfsops.c Added Files: src/sys/ufs/mfs: mfs_miniroot.c Log Message: Make mfs_initminiroot() mandatory. Allows to remove #ifdef MFS. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/ufs/mfs/mfs_extern.h cvs rdiff -u -r0 -r1.1 src/sys/ufs/mfs/mfs_miniroot.c cvs rdiff -u -r1.101 -r1.102 src/sys/ufs/mfs/mfs_vfsops.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_extern.h diff -u src/sys/ufs/mfs/mfs_extern.h:1.30 src/sys/ufs/mfs/mfs_extern.h:1.31 --- src/sys/ufs/mfs/mfs_extern.h:1.30 Sat Jun 28 01:34:05 2008 +++ src/sys/ufs/mfs/mfs_extern.h Tue Mar 2 17:20:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mfs_extern.h,v 1.30 2008/06/28 01:34:05 rumble Exp $ */ +/* $NetBSD: mfs_extern.h,v 1.31 2010/03/02 17:20:02 pooka Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -69,6 +69,8 @@ #include sys/mutex.h extern kmutex_t mfs_lock; +extern void *mfs_rootbase; +extern u_long mfs_rootsize; #endif Index: src/sys/ufs/mfs/mfs_vfsops.c diff -u src/sys/ufs/mfs/mfs_vfsops.c:1.101 src/sys/ufs/mfs/mfs_vfsops.c:1.102 --- src/sys/ufs/mfs/mfs_vfsops.c:1.101 Tue Jan 13 13:35:54 2009 +++ src/sys/ufs/mfs/mfs_vfsops.c Tue Mar 2 17:20:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mfs_vfsops.c,v 1.101 2009/01/13 13:35:54 yamt Exp $ */ +/* $NetBSD: mfs_vfsops.c,v 1.102 2010/03/02 17:20:02 pooka Exp $ */ /* * Copyright (c) 1989, 1990, 1993, 1994 @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: mfs_vfsops.c,v 1.101 2009/01/13 13:35:54 yamt Exp $); +__KERNEL_RCSID(0, $NetBSD: mfs_vfsops.c,v 1.102 2010/03/02 17:20:02 pooka Exp $); #if defined(_KERNEL_OPT) #include opt_compat_netbsd.h @@ -68,11 +68,10 @@ MODULE(MODULE_CLASS_VFS, mfs, ffs); -void * mfs_rootbase; /* address of mini-root in kernel virtual memory */ -u_long mfs_rootsize; /* size of mini-root in bytes */ kmutex_t mfs_lock; /* global lock */ -static int mfs_minor; /* used for building internal dev_t */ +/* used for building internal dev_t, minor == 0 reserved for miniroot */ +static int mfs_minor = 1; static int mfs_initcnt; extern int (**mfs_vnodeop_p)(void *); @@ -241,27 +240,6 @@ } /* - * This is called early in boot to set the base address and size - * of the mini-root. - */ -int -mfs_initminiroot(void *base) -{ - struct fs *fs = (struct fs *)((char *)base + SBLOCK_UFS1); - - /* check for valid super block */ - if (fs-fs_magic != FS_UFS1_MAGIC || fs-fs_bsize MAXBSIZE || - fs-fs_bsize sizeof(struct fs)) - return (0); - rootfstype = MOUNT_MFS; - mfs_rootbase = base; - mfs_rootsize = fs-fs_fsize * fs-fs_size; - rootdev = makedev(255, mfs_minor); - mfs_minor++; - return (mfs_rootsize); -} - -/* * VFS Operations. * * mount system call Added files: Index: src/sys/ufs/mfs/mfs_miniroot.c diff -u /dev/null src/sys/ufs/mfs/mfs_miniroot.c:1.1 --- /dev/null Tue Mar 2 17:20:03 2010 +++ src/sys/ufs/mfs/mfs_miniroot.c Tue Mar 2 17:20:02 2010 @@ -0,0 +1,68 @@ +/* $NetBSD: mfs_miniroot.c,v 1.1 2010/03/02 17:20:02 pooka Exp $ */ + +/* + * Copyright (c) 1989, 1990, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + *may be used to endorse or promote products derived from this software + *without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)mfs_vfsops.c 8.11 (Berkeley) 6/19/95 + */ + +#include sys/cdefs.h +__KERNEL_RCSID(0, $NetBSD: mfs_miniroot.c,v 1.1
CVS commit: src/sys/ufs/mfs
Module Name:src Committed By: pooka Date: Tue Mar 2 17:20:03 UTC 2010 Modified Files: src/sys/ufs/mfs: mfs_extern.h mfs_vfsops.c Added Files: src/sys/ufs/mfs: mfs_miniroot.c Log Message: Make mfs_initminiroot() mandatory. Allows to remove #ifdef MFS. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/ufs/mfs/mfs_extern.h cvs rdiff -u -r0 -r1.1 src/sys/ufs/mfs/mfs_miniroot.c cvs rdiff -u -r1.101 -r1.102 src/sys/ufs/mfs/mfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.