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);

Reply via email to