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 <[email protected]>
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);