Module Name: src Committed By: hannken Date: Mon Sep 30 18:58:00 UTC 2013
Modified Files: src/sys/fs/adosfs: advfsops.c src/sys/fs/cd9660: cd9660_vfsops.c src/sys/fs/filecorefs: filecore_vfsops.c src/sys/fs/msdosfs: msdosfs_vfsops.c src/sys/fs/nilfs: nilfs_vfsops.c src/sys/fs/ntfs: ntfs_vfsops.c src/sys/fs/udf: udf_vfsops.c src/sys/kern: vfs_bio.c vfs_mount.c vfs_subr.c vfs_trans.c src/sys/miscfs/specfs: spec_vnops.c specdev.h src/sys/sys: param.h wapbl.h src/sys/ufs/chfs: chfs_vfsops.c src/sys/ufs/ext2fs: ext2fs_vfsops.c src/sys/ufs/ffs: ffs_alloc.c ffs_snapshot.c ffs_vfsops.c src/sys/ufs/lfs: lfs_vfsops.c Log Message: Replace macro v_specmountpoint with two functions spec_node_getmountedfs() and spec_node_setmountedfs() to manage the file system mounted on a device. Assert the device is a block device. Welcome to 6.99.24 Discussed on tech-kern@ some time ago. Reviewed by: David Holland <dholl...@netbsd.org> To generate a diff of this commit: cvs rdiff -u -r1.66 -r1.67 src/sys/fs/adosfs/advfsops.c cvs rdiff -u -r1.78 -r1.79 src/sys/fs/cd9660/cd9660_vfsops.c cvs rdiff -u -r1.70 -r1.71 src/sys/fs/filecorefs/filecore_vfsops.c cvs rdiff -u -r1.101 -r1.102 src/sys/fs/msdosfs/msdosfs_vfsops.c cvs rdiff -u -r1.10 -r1.11 src/sys/fs/nilfs/nilfs_vfsops.c cvs rdiff -u -r1.87 -r1.88 src/sys/fs/ntfs/ntfs_vfsops.c cvs rdiff -u -r1.63 -r1.64 src/sys/fs/udf/udf_vfsops.c cvs rdiff -u -r1.246 -r1.247 src/sys/kern/vfs_bio.c cvs rdiff -u -r1.20 -r1.21 src/sys/kern/vfs_mount.c cvs rdiff -u -r1.437 -r1.438 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.26 -r1.27 src/sys/kern/vfs_trans.c cvs rdiff -u -r1.140 -r1.141 src/sys/miscfs/specfs/spec_vnops.c cvs rdiff -u -r1.41 -r1.42 src/sys/miscfs/specfs/specdev.h cvs rdiff -u -r1.432 -r1.433 src/sys/sys/param.h cvs rdiff -u -r1.14 -r1.15 src/sys/sys/wapbl.h cvs rdiff -u -r1.7 -r1.8 src/sys/ufs/chfs/chfs_vfsops.c cvs rdiff -u -r1.172 -r1.173 src/sys/ufs/ext2fs/ext2fs_vfsops.c cvs rdiff -u -r1.139 -r1.140 src/sys/ufs/ffs/ffs_alloc.c cvs rdiff -u -r1.128 -r1.129 src/sys/ufs/ffs/ffs_snapshot.c cvs rdiff -u -r1.288 -r1.289 src/sys/ufs/ffs/ffs_vfsops.c cvs rdiff -u -r1.313 -r1.314 src/sys/ufs/lfs/lfs_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/fs/adosfs/advfsops.c diff -u src/sys/fs/adosfs/advfsops.c:1.66 src/sys/fs/adosfs/advfsops.c:1.67 --- src/sys/fs/adosfs/advfsops.c:1.66 Thu Dec 20 08:03:41 2012 +++ src/sys/fs/adosfs/advfsops.c Mon Sep 30 18:57:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: advfsops.c,v 1.66 2012/12/20 08:03:41 hannken Exp $ */ +/* $NetBSD: advfsops.c,v 1.67 2013/09/30 18:57:59 hannken Exp $ */ /* * Copyright (c) 1994 Christian E. Hopps @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: advfsops.c,v 1.66 2012/12/20 08:03:41 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: advfsops.c,v 1.67 2013/09/30 18:57:59 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -319,7 +319,7 @@ adosfs_unmount(struct mount *mp, int mnt return (error); amp = VFSTOADOSFS(mp); if (amp->devvp->v_type != VBAD) - amp->devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(amp->devvp, NULL); vn_lock(amp->devvp, LK_EXCLUSIVE | LK_RETRY); error = VOP_CLOSE(amp->devvp, FREAD, NOCRED); vput(amp->devvp); Index: src/sys/fs/cd9660/cd9660_vfsops.c diff -u src/sys/fs/cd9660/cd9660_vfsops.c:1.78 src/sys/fs/cd9660/cd9660_vfsops.c:1.79 --- src/sys/fs/cd9660/cd9660_vfsops.c:1.78 Sun Jun 23 07:28:36 2013 +++ src/sys/fs/cd9660/cd9660_vfsops.c Mon Sep 30 18:57:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: cd9660_vfsops.c,v 1.78 2013/06/23 07:28:36 dholland Exp $ */ +/* $NetBSD: cd9660_vfsops.c,v 1.79 2013/09/30 18:57:59 hannken Exp $ */ /*- * Copyright (c) 1994 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.78 2013/06/23 07:28:36 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.79 2013/09/30 18:57:59 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -523,7 +523,7 @@ iso_mountfs(struct vnode *devvp, struct supbp = NULL; } - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); return 0; out: @@ -568,7 +568,7 @@ cd9660_unmount(struct mount *mp, int mnt isomp = VFSTOISOFS(mp); if (isomp->im_devvp->v_type != VBAD) - isomp->im_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(isomp->im_devvp, NULL); vn_lock(isomp->im_devvp, LK_EXCLUSIVE | LK_RETRY); error = VOP_CLOSE(isomp->im_devvp, FREAD, NOCRED); Index: src/sys/fs/filecorefs/filecore_vfsops.c diff -u src/sys/fs/filecorefs/filecore_vfsops.c:1.70 src/sys/fs/filecorefs/filecore_vfsops.c:1.71 --- src/sys/fs/filecorefs/filecore_vfsops.c:1.70 Thu Dec 20 08:03:42 2012 +++ src/sys/fs/filecorefs/filecore_vfsops.c Mon Sep 30 18:57:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: filecore_vfsops.c,v 1.70 2012/12/20 08:03:42 hannken Exp $ */ +/* $NetBSD: filecore_vfsops.c,v 1.71 2013/09/30 18:57:59 hannken Exp $ */ /*- * Copyright (c) 1994 The Regents of the University of California. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: filecore_vfsops.c,v 1.70 2012/12/20 08:03:42 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: filecore_vfsops.c,v 1.71 2013/09/30 18:57:59 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -456,7 +456,7 @@ filecore_unmount(struct mount *mp, int m fcmp = VFSTOFILECORE(mp); if (fcmp->fc_devvp->v_type != VBAD) - fcmp->fc_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(fcmp->fc_devvp, NULL); vn_lock(fcmp->fc_devvp, LK_EXCLUSIVE | LK_RETRY); error = VOP_CLOSE(fcmp->fc_devvp, FREAD, NOCRED); vput(fcmp->fc_devvp); Index: src/sys/fs/msdosfs/msdosfs_vfsops.c diff -u src/sys/fs/msdosfs/msdosfs_vfsops.c:1.101 src/sys/fs/msdosfs/msdosfs_vfsops.c:1.102 --- src/sys/fs/msdosfs/msdosfs_vfsops.c:1.101 Mon Apr 15 14:10:59 2013 +++ src/sys/fs/msdosfs/msdosfs_vfsops.c Mon Sep 30 18:57:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: msdosfs_vfsops.c,v 1.101 2013/04/15 14:10:59 jakllsch Exp $ */ +/* $NetBSD: msdosfs_vfsops.c,v 1.102 2013/09/30 18:57:59 hannken Exp $ */ /*- * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.101 2013/04/15 14:10:59 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.102 2013/09/30 18:57:59 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -836,7 +836,7 @@ msdosfs_mountfs(struct vnode *devvp, str * in the directory entry where we could put uid's and gid's. */ - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); return (0); @@ -876,7 +876,7 @@ msdosfs_unmount(struct mount *mp, int mn return (error); pmp = VFSTOMSDOSFS(mp); if (pmp->pm_devvp->v_type != VBAD) - pmp->pm_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(pmp->pm_devvp, NULL); #ifdef MSDOSFS_DEBUG { struct vnode *vp = pmp->pm_devvp; Index: src/sys/fs/nilfs/nilfs_vfsops.c diff -u src/sys/fs/nilfs/nilfs_vfsops.c:1.10 src/sys/fs/nilfs/nilfs_vfsops.c:1.11 --- src/sys/fs/nilfs/nilfs_vfsops.c:1.10 Thu Dec 20 08:03:43 2012 +++ src/sys/fs/nilfs/nilfs_vfsops.c Mon Sep 30 18:57:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: nilfs_vfsops.c,v 1.10 2012/12/20 08:03:43 hannken Exp $ */ +/* $NetBSD: nilfs_vfsops.c,v 1.11 2013/09/30 18:57:59 hannken Exp $ */ /* * Copyright (c) 2008, 2009 Reinoud Zandijk @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__KERNEL_RCSID(0, "$NetBSD: nilfs_vfsops.c,v 1.10 2012/12/20 08:03:43 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nilfs_vfsops.c,v 1.11 2013/09/30 18:57:59 hannken Exp $"); #endif /* not lint */ @@ -506,7 +506,7 @@ nilfs_unmount_device(struct nilfs_device DPRINTF(VOLUMES, ("closing device\n")); /* remove our mount reference before closing device */ - nilfsdev->devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(nilfsdev->devvp, NULL); /* devvp is still locked by us */ vn_lock(nilfsdev->devvp, LK_EXCLUSIVE | LK_RETRY); @@ -895,12 +895,12 @@ nilfs_mount(struct mount *mp, const char #endif /* DONT register our nilfs mountpoint on our vfs mountpoint */ - devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(devvp, NULL); #if 0 - if (devvp->v_specmountpoint == NULL) - devvp->v_specmountpoint = mp; + if (spec_node_getmountedfs(devvp) == NULL) + spec_node_setmountedfs(devvp, mp); if ((mp->mnt_flag & MNT_RDONLY) == 0) - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); #endif /* add our mountpoint */ Index: src/sys/fs/ntfs/ntfs_vfsops.c diff -u src/sys/fs/ntfs/ntfs_vfsops.c:1.87 src/sys/fs/ntfs/ntfs_vfsops.c:1.88 --- src/sys/fs/ntfs/ntfs_vfsops.c:1.87 Mon Nov 14 18:35:13 2011 +++ src/sys/fs/ntfs/ntfs_vfsops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ntfs_vfsops.c,v 1.87 2011/11/14 18:35:13 hannken Exp $ */ +/* $NetBSD: ntfs_vfsops.c,v 1.88 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 1998, 1999 Semen Ustimenko @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.87 2011/11/14 18:35:13 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.88 2013/09/30 18:58:00 hannken Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -455,7 +455,7 @@ ntfs_mountfs(struct vnode *devvp, struct mp->mnt_stat.f_fsid = mp->mnt_stat.f_fsidx.__fsid_val[0]; mp->mnt_stat.f_namemax = NTFS_MAXFILENAME; mp->mnt_flag |= MNT_LOCAL; - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); return (0); out1: @@ -466,7 +466,7 @@ out1: dprintf(("ntfs_mountfs: vflush failed\n")); } out: - devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(devvp, NULL); if (bp) brelse(bp, 0); @@ -532,7 +532,7 @@ ntfs_unmount( * field is NULL and touching it causes null pointer derefercence. */ if (ntmp->ntm_devvp->v_type != VBAD) - ntmp->ntm_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(ntmp->ntm_devvp, NULL); vinvalbuf(ntmp->ntm_devvp, V_SAVE, NOCRED, l, 0, 0); Index: src/sys/fs/udf/udf_vfsops.c diff -u src/sys/fs/udf/udf_vfsops.c:1.63 src/sys/fs/udf/udf_vfsops.c:1.64 --- src/sys/fs/udf/udf_vfsops.c:1.63 Tue Mar 13 18:40:51 2012 +++ src/sys/fs/udf/udf_vfsops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udf_vfsops.c,v 1.63 2012/03/13 18:40:51 elad Exp $ */ +/* $NetBSD: udf_vfsops.c,v 1.64 2013/09/30 18:58:00 hannken Exp $ */ /* * Copyright (c) 2006, 2008 Reinoud Zandijk @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.63 2012/03/13 18:40:51 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.64 2013/09/30 18:58:00 hannken Exp $"); #endif /* not lint */ @@ -419,7 +419,7 @@ udf_mount(struct mount *mp, const char * } /* register our mountpoint being on this device */ - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); /* successfully mounted */ DPRINTF(VOLUMES, ("udf_mount() successfull\n")); @@ -541,7 +541,7 @@ udf_unmount(struct mount *mp, int mntfla DPRINTF(VOLUMES, ("device close ok\n")); /* clear our mount reference and release device node */ - ump->devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(ump->devvp, NULL); vput(ump->devvp); /* free our ump */ @@ -729,9 +729,6 @@ udf_mountfs(struct vnode *devvp, struct return error; } - /* do we have to set this? */ - devvp->v_specmountpoint = mp; - /* success! */ return 0; } Index: src/sys/kern/vfs_bio.c diff -u src/sys/kern/vfs_bio.c:1.246 src/sys/kern/vfs_bio.c:1.247 --- src/sys/kern/vfs_bio.c:1.246 Sun Sep 15 15:57:26 2013 +++ src/sys/kern/vfs_bio.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_bio.c,v 1.246 2013/09/15 15:57:26 martin Exp $ */ +/* $NetBSD: vfs_bio.c,v 1.247 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -123,7 +123,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_bio.c,v 1.246 2013/09/15 15:57:26 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_bio.c,v 1.247 2013/09/30 18:58:00 hannken Exp $"); #include "opt_bufcache.h" @@ -693,7 +693,7 @@ bio_doread(struct vnode *vp, daddr_t blk brelse(bp, 0); if (vp->v_type == VBLK) - mp = vp->v_specmountpoint; + mp = spec_node_getmountedfs(vp); else mp = vp->v_mount; @@ -800,7 +800,7 @@ bwrite(buf_t *bp) if (vp != NULL) { KASSERT(bp->b_objlock == vp->v_interlock); if (vp->v_type == VBLK) - mp = vp->v_specmountpoint; + mp = spec_node_getmountedfs(vp); else mp = vp->v_mount; } else { Index: src/sys/kern/vfs_mount.c diff -u src/sys/kern/vfs_mount.c:1.20 src/sys/kern/vfs_mount.c:1.21 --- src/sys/kern/vfs_mount.c:1.20 Fri Aug 30 12:58:22 2013 +++ src/sys/kern/vfs_mount.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.20 2013/08/30 12:58:22 hannken Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.21 2013/09/30 18:58:00 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.20 2013/08/30 12:58:22 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.21 2013/09/30 18:58:00 hannken Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -1286,10 +1286,10 @@ vfs_mountedon(vnode_t *vp) if (vp->v_type != VBLK) return ENOTBLK; - if (vp->v_specmountpoint != NULL) + if (spec_node_getmountedfs(vp) != NULL) return EBUSY; if (spec_node_lookup_by_dev(vp->v_type, vp->v_rdev, &vq) == 0) { - if (vq->v_specmountpoint != NULL) + if (spec_node_getmountedfs(vq) != NULL) error = EBUSY; vrele(vq); } Index: src/sys/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.437 src/sys/kern/vfs_subr.c:1.438 --- src/sys/kern/vfs_subr.c:1.437 Mon Mar 18 19:35:43 2013 +++ src/sys/kern/vfs_subr.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.437 2013/03/18 19:35:43 plunky Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.438 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.437 2013/03/18 19:35:43 plunky Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.438 2013/09/30 18:58:00 hannken Exp $"); #include "opt_ddb.h" #include "opt_compat_netbsd.h" @@ -460,7 +460,7 @@ reassignbuf(struct buf *bp, struct vnode delayx = dirdelay; break; case VBLK: - if (vp->v_specmountpoint != NULL) { + if (spec_node_getmountedfs(vp) != NULL) { delayx = metadelay; break; } Index: src/sys/kern/vfs_trans.c diff -u src/sys/kern/vfs_trans.c:1.26 src/sys/kern/vfs_trans.c:1.27 --- src/sys/kern/vfs_trans.c:1.26 Mon Jan 21 09:14:01 2013 +++ src/sys/kern/vfs_trans.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_trans.c,v 1.26 2013/01/21 09:14:01 hannken Exp $ */ +/* $NetBSD: vfs_trans.c,v 1.27 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_trans.c,v 1.26 2013/01/21 09:14:01 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_trans.c,v 1.27 2013/09/30 18:58:00 hannken Exp $"); /* * File system transaction operations. @@ -657,7 +657,7 @@ fscow_run(struct buf *bp, bool data_vali return 0; } if (bp->b_vp->v_type == VBLK) - mp = bp->b_vp->v_specmountpoint; + mp = spec_node_getmountedfs(bp->b_vp); else mp = bp->b_vp->v_mount; if (mp == NULL || (mp->mnt_iflag & IMNT_HAS_TRANS) == 0) { Index: src/sys/miscfs/specfs/spec_vnops.c diff -u src/sys/miscfs/specfs/spec_vnops.c:1.140 src/sys/miscfs/specfs/spec_vnops.c:1.141 --- src/sys/miscfs/specfs/spec_vnops.c:1.140 Sat Jul 20 23:00:08 2013 +++ src/sys/miscfs/specfs/spec_vnops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: spec_vnops.c,v 1.140 2013/07/20 23:00:08 dholland Exp $ */ +/* $NetBSD: spec_vnops.c,v 1.141 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.140 2013/07/20 23:00:08 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.141 2013/09/30 18:58:00 hannken Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -330,7 +330,8 @@ spec_node_lookup_by_mount(struct mount * if (vp->v_type != VBLK) continue; vq = vp->v_specnode->sn_dev->sd_bdevvp; - if (vq != NULL && vq->v_specmountpoint == mp) + if (vq != NULL && + vq->v_specnode->sn_dev->sd_mountpoint == mp) break; vq = NULL; } @@ -351,6 +352,32 @@ spec_node_lookup_by_mount(struct mount * } /* + * Get the file system mounted on this block device. + */ +struct mount * +spec_node_getmountedfs(vnode_t *devvp) +{ + struct mount *mp; + + KASSERT(devvp->v_type == VBLK); + mp = devvp->v_specnode->sn_dev->sd_mountpoint; + + return mp; +} + +/* + * Set the file system mounted on this block device. + */ +void +spec_node_setmountedfs(vnode_t *devvp, struct mount *mp) +{ + + KASSERT(devvp->v_type == VBLK); + KASSERT(devvp->v_specnode->sn_dev->sd_mountpoint == NULL || mp == NULL); + devvp->v_specnode->sn_dev->sd_mountpoint = mp; +} + +/* * A vnode representing a special device is going away. Close * the device if the vnode holds it open. */ @@ -961,7 +988,7 @@ spec_fsync(void *v) int error; if (vp->v_type == VBLK) { - if ((mp = vp->v_specmountpoint) != NULL) { + if ((mp = spec_node_getmountedfs(vp)) != NULL) { error = VFS_FSYNC(mp, vp, ap->a_flags); if (error != EOPNOTSUPP) return error; Index: src/sys/miscfs/specfs/specdev.h diff -u src/sys/miscfs/specfs/specdev.h:1.41 src/sys/miscfs/specfs/specdev.h:1.42 --- src/sys/miscfs/specfs/specdev.h:1.41 Sun Apr 21 04:55:40 2013 +++ src/sys/miscfs/specfs/specdev.h Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: specdev.h,v 1.41 2013/04/21 04:55:40 dholland Exp $ */ +/* $NetBSD: specdev.h,v 1.42 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -86,7 +86,6 @@ typedef struct specdev { #define v_specnext v_specnode->sn_next #define v_rdev v_specnode->sn_rdev #define v_speclockf v_specnode->sn_dev->sd_lockf -#define v_specmountpoint v_specnode->sn_dev->sd_mountpoint /* * Special device management @@ -95,6 +94,8 @@ void spec_node_init(vnode_t *, dev_t); void spec_node_destroy(vnode_t *); int spec_node_lookup_by_dev(enum vtype, dev_t, vnode_t **); int spec_node_lookup_by_mount(struct mount *, vnode_t **); +struct mount *spec_node_getmountedfs(vnode_t *); +void spec_node_setmountedfs(vnode_t *, struct mount *); void spec_node_revoke(vnode_t *); /* Index: src/sys/sys/param.h diff -u src/sys/sys/param.h:1.432 src/sys/sys/param.h:1.433 --- src/sys/sys/param.h:1.432 Sun Jun 30 00:00:53 2013 +++ src/sys/sys/param.h Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.432 2013/06/30 00:00:53 rmind Exp $ */ +/* $NetBSD: param.h,v 1.433 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 1982, 1986, 1989, 1993 @@ -63,7 +63,7 @@ * 2.99.9 (299000900) */ -#define __NetBSD_Version__ 699002300 /* NetBSD 6.99.23 */ +#define __NetBSD_Version__ 699002400 /* NetBSD 6.99.24 */ #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \ (m) * 1000000) + (p) * 100) <= __NetBSD_Version__) Index: src/sys/sys/wapbl.h diff -u src/sys/sys/wapbl.h:1.14 src/sys/sys/wapbl.h:1.15 --- src/sys/sys/wapbl.h:1.14 Wed Sep 18 14:37:24 2013 +++ src/sys/sys/wapbl.h Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: wapbl.h,v 1.14 2013/09/18 14:37:24 christos Exp $ */ +/* $NetBSD: wapbl.h,v 1.15 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2003,2008 The NetBSD Foundation, Inc. @@ -189,7 +189,7 @@ wapbl_vptomp(struct vnode *vp) mp = NULL; if (vp != NULL) { if (vp->v_type == VBLK) - mp = vp->v_specmountpoint; + mp = spec_node_getmountedfs(vp); else mp = vp->v_mount; } Index: src/sys/ufs/chfs/chfs_vfsops.c diff -u src/sys/ufs/chfs/chfs_vfsops.c:1.7 src/sys/ufs/chfs/chfs_vfsops.c:1.8 --- src/sys/ufs/chfs/chfs_vfsops.c:1.7 Tue Jan 22 09:39:15 2013 +++ src/sys/ufs/chfs/chfs_vfsops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: chfs_vfsops.c,v 1.7 2013/01/22 09:39:15 dholland Exp $ */ +/* $NetBSD: chfs_vfsops.c,v 1.8 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2010 Department of Software Engineering, @@ -353,7 +353,7 @@ chfs_mountfs(struct vnode *devvp, struct chfs_gc_trigger(chmp); mutex_exit(&chmp->chm_lock_mountfields); - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); return 0; fail: @@ -411,7 +411,7 @@ chfs_unmount(struct mount *mp, int mntfl /* Unmount UFS. */ if (ump->um_devvp->v_type != VBAD) { - ump->um_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(ump->um_devvp, NULL); } vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY); (void)VOP_CLOSE(ump->um_devvp, FREAD|FWRITE, NOCRED); Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.172 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.173 --- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.172 Sun Aug 11 04:36:17 2013 +++ src/sys/ufs/ext2fs/ext2fs_vfsops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs_vfsops.c,v 1.172 2013/08/11 04:36:17 dholland Exp $ */ +/* $NetBSD: ext2fs_vfsops.c,v 1.173 2013/09/30 18:58:00 hannken Exp $ */ /* * Copyright (c) 1989, 1991, 1993, 1994 @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.172 2013/08/11 04:36:17 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.173 2013/09/30 18:58:00 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -763,7 +763,7 @@ ext2fs_mountfs(struct vnode *devvp, stru ump->um_maxsymlinklen = EXT2_MAXSYMLINKLEN; ump->um_dirblksiz = m_fs->e2fs_bsize; ump->um_maxfilesize = ((uint64_t)0x80000000 * m_fs->e2fs_bsize - 1); - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); return (0); out: @@ -801,7 +801,7 @@ ext2fs_unmount(struct mount *mp, int mnt (void) ext2fs_sbupdate(ump, MNT_WAIT); } if (ump->um_devvp->v_type != VBAD) - ump->um_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(ump->um_devvp, NULL); vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY); error = VOP_CLOSE(ump->um_devvp, fs->e2fs_ronly ? FREAD : FREAD|FWRITE, NOCRED); Index: src/sys/ufs/ffs/ffs_alloc.c diff -u src/sys/ufs/ffs/ffs_alloc.c:1.139 src/sys/ufs/ffs/ffs_alloc.c:1.140 --- src/sys/ufs/ffs/ffs_alloc.c:1.139 Thu Sep 12 20:00:15 2013 +++ src/sys/ufs/ffs/ffs_alloc.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_alloc.c,v 1.139 2013/09/12 20:00:15 martin Exp $ */ +/* $NetBSD: ffs_alloc.c,v 1.140 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.139 2013/09/12 20:00:15 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.140 2013/09/30 18:58:00 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -1570,7 +1570,7 @@ ffs_blkfree_cg(struct fs *fs, struct vno cg = dtog(fs, bno); dev = devvp->v_rdev; - ump = VFSTOUFS(devvp->v_specmountpoint); + ump = VFSTOUFS(spec_node_getmountedfs(devvp)); KASSERT(fs == ump->um_fs); cgblkno = FFS_FSBTODB(fs, cgtod(fs, cg)); @@ -1735,7 +1735,7 @@ ffs_blkfree(struct fs *fs, struct vnode struct discardopdata *td; dev = devvp->v_rdev; - ump = VFSTOUFS(devvp->v_specmountpoint); + ump = VFSTOUFS(spec_node_getmountedfs(devvp)); if (ffs_snapblkfree(fs, devvp, bno, size, inum)) return; Index: src/sys/ufs/ffs/ffs_snapshot.c diff -u src/sys/ufs/ffs/ffs_snapshot.c:1.128 src/sys/ufs/ffs/ffs_snapshot.c:1.129 --- src/sys/ufs/ffs/ffs_snapshot.c:1.128 Fri Sep 13 20:15:33 2013 +++ src/sys/ufs/ffs/ffs_snapshot.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_snapshot.c,v 1.128 2013/09/13 20:15:33 joerg Exp $ */ +/* $NetBSD: ffs_snapshot.c,v 1.129 2013/09/30 18:58:00 hannken Exp $ */ /* * Copyright 2000 Marshall Kirk McKusick. All Rights Reserved. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_snapshot.c,v 1.128 2013/09/13 20:15:33 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_snapshot.c,v 1.129 2013/09/30 18:58:00 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -1374,7 +1374,7 @@ void ffs_snapgone(struct vnode *vp) { struct inode *xp, *ip = VTOI(vp); - struct mount *mp = ip->i_devvp->v_specmountpoint; + struct mount *mp = spec_node_getmountedfs(ip->i_devvp); struct fs *fs; struct snap_info *si; int snaploc; @@ -1425,7 +1425,7 @@ ffs_snapremove(struct vnode *vp) struct inode *ip = VTOI(vp), *xp; struct vnode *devvp = ip->i_devvp; struct fs *fs = ip->i_fs; - struct mount *mp = devvp->v_specmountpoint; + struct mount *mp = spec_node_getmountedfs(devvp); struct buf *ibp; struct snap_info *si; struct lwp *l = curlwp; @@ -1541,7 +1541,7 @@ int ffs_snapblkfree(struct fs *fs, struct vnode *devvp, daddr_t bno, long size, ino_t inum) { - struct mount *mp = devvp->v_specmountpoint; + struct mount *mp = spec_node_getmountedfs(devvp); struct buf *ibp; struct inode *ip; struct vnode *vp = NULL; @@ -1877,7 +1877,7 @@ ffs_copyonwrite(void *v, struct buf *bp, struct fs *fs; struct inode *ip; struct vnode *devvp = v, *vp = NULL; - struct mount *mp = devvp->v_specmountpoint; + struct mount *mp = spec_node_getmountedfs(devvp); struct snap_info *si; void *saved_data = NULL; daddr_t lbn, blkno, *snapblklist; Index: src/sys/ufs/ffs/ffs_vfsops.c diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.288 src/sys/ufs/ffs/ffs_vfsops.c:1.289 --- src/sys/ufs/ffs/ffs_vfsops.c:1.288 Mon Sep 16 12:36:54 2013 +++ src/sys/ufs/ffs/ffs_vfsops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_vfsops.c,v 1.288 2013/09/16 12:36:54 hannken Exp $ */ +/* $NetBSD: ffs_vfsops.c,v 1.289 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.288 2013/09/16 12:36:54 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.289 2013/09/30 18:58:00 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -1255,7 +1255,7 @@ ffs_mountfs(struct vnode *devvp, struct ump->um_seqinc = fs->fs_frag; for (i = 0; i < MAXQUOTAS; i++) ump->um_quotas[i] = NULLVP; - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); if (ronly == 0 && fs->fs_snapinum[0] != 0) ffs_snapshot_mount(mp); #ifdef WAPBL @@ -1320,7 +1320,7 @@ out: fstrans_unmount(mp); if (fs) kmem_free(fs, fs->fs_sbsize); - devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(devvp, NULL); if (bp) brelse(bp, bset); if (ump) { @@ -1499,7 +1499,7 @@ ffs_unmount(struct mount *mp, int mntfla #endif /* WAPBL */ if (ump->um_devvp->v_type != VBAD) - ump->um_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(ump->um_devvp, NULL); vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY); (void)VOP_CLOSE(ump->um_devvp, fs->fs_ronly ? FREAD : FREAD | FWRITE, NOCRED); @@ -2129,7 +2129,7 @@ ffs_vfs_fsync(vnode_t *vp, int flags) #endif KASSERT(vp->v_type == VBLK); - KASSERT(vp->v_specmountpoint != NULL); + KASSERT(spec_node_getmountedfs(vp) != NULL); /* * Flush all dirty data associated with the vnode. @@ -2143,7 +2143,7 @@ ffs_vfs_fsync(vnode_t *vp, int flags) return error; #ifdef WAPBL - mp = vp->v_specmountpoint; + mp = spec_node_getmountedfs(vp); if (mp && mp->mnt_wapbl) { /* * Don't bother writing out metadata if the syncer is Index: src/sys/ufs/lfs/lfs_vfsops.c diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.313 src/sys/ufs/lfs/lfs_vfsops.c:1.314 --- src/sys/ufs/lfs/lfs_vfsops.c:1.313 Sun Jul 28 01:26:13 2013 +++ src/sys/ufs/lfs/lfs_vfsops.c Mon Sep 30 18:58:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_vfsops.c,v 1.313 2013/07/28 01:26:13 dholland Exp $ */ +/* $NetBSD: lfs_vfsops.c,v 1.314 2013/09/30 18:58:00 hannken Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007 @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.313 2013/07/28 01:26:13 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.314 2013/09/30 18:58:00 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_lfs.h" @@ -1070,7 +1070,7 @@ lfs_mountfs(struct vnode *devvp, struct ump->um_devvp = devvp; for (i = 0; i < ULFS_MAXQUOTAS; i++) ump->um_quotas[i] = NULLVP; - devvp->v_specmountpoint = mp; + spec_node_setmountedfs(devvp, mp); /* Set up reserved memory for pageout */ lfs_setup_resblks(fs); @@ -1325,7 +1325,7 @@ lfs_unmount(struct mount *mp, int mntfla ronly = !fs->lfs_ronly; if (ump->um_devvp->v_type != VBAD) - ump->um_devvp->v_specmountpoint = NULL; + spec_node_setmountedfs(ump->um_devvp, NULL); vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY); error = VOP_CLOSE(ump->um_devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED);