Module Name: src
Committed By: hannken
Date: Wed Feb 20 10:07:27 UTC 2019
Modified Files:
src/sys/kern: init_main.c vfs_mount.c vfs_trans.c vfs_vnode.c
src/sys/miscfs/genfs: genfs_vfsops.c
src/sys/rump/librump/rumpvfs: rump_vfs.c
src/sys/sys: fstypes.h
Log Message:
Attach "mnt_transinfo" to "dead_rootmount" so every mount has a
valid "mnt_transinfo" and remove now unneeded flag IMNT_HAS_TRANS.
Run fstrans_start()/fstrans_done() on dead_rootmount if FSTRANS_DEAD_ENABLED.
Should become the default for DIAGNOSTIC in the future.
To generate a diff of this commit:
cvs rdiff -u -r1.502 -r1.503 src/sys/kern/init_main.c
cvs rdiff -u -r1.68 -r1.69 src/sys/kern/vfs_mount.c
cvs rdiff -u -r1.51 -r1.52 src/sys/kern/vfs_trans.c
cvs rdiff -u -r1.102 -r1.103 src/sys/kern/vfs_vnode.c
cvs rdiff -u -r1.8 -r1.9 src/sys/miscfs/genfs/genfs_vfsops.c
cvs rdiff -u -r1.87 -r1.88 src/sys/rump/librump/rumpvfs/rump_vfs.c
cvs rdiff -u -r1.36 -r1.37 src/sys/sys/fstypes.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/init_main.c
diff -u src/sys/kern/init_main.c:1.502 src/sys/kern/init_main.c:1.503
--- src/sys/kern/init_main.c:1.502 Wed Jan 23 13:38:30 2019
+++ src/sys/kern/init_main.c Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: init_main.c,v 1.502 2019/01/23 13:38:30 kamil Exp $ */
+/* $NetBSD: init_main.c,v 1.503 2019/02/20 10:07:27 hannken Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.502 2019/01/23 13:38:30 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.503 2019/02/20 10:07:27 hannken Exp $");
#include "opt_ddb.h"
#include "opt_inet.h"
@@ -466,12 +466,13 @@ main(void)
if (usevnodes > desiredvnodes)
desiredvnodes = usevnodes;
#endif
- vfsinit();
- lf_init();
/* Initialize fstrans. */
fstrans_init();
+ vfsinit();
+ lf_init();
+
/* Initialize the file descriptor system. */
fd_sys_init();
Index: src/sys/kern/vfs_mount.c
diff -u src/sys/kern/vfs_mount.c:1.68 src/sys/kern/vfs_mount.c:1.69
--- src/sys/kern/vfs_mount.c:1.68 Tue Feb 5 09:49:44 2019
+++ src/sys/kern/vfs_mount.c Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_mount.c,v 1.68 2019/02/05 09:49:44 hannken Exp $ */
+/* $NetBSD: vfs_mount.c,v 1.69 2019/02/20 10:07:27 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.68 2019/02/05 09:49:44 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.69 2019/02/20 10:07:27 hannken Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -149,7 +149,6 @@ vfs_mountalloc(struct vfsops *vfsops, vn
{
struct mount *mp;
int error __diagused;
- extern struct vfsops dead_vfsops;
mp = kmem_zalloc(sizeof(*mp), KM_SLEEP);
mp->mnt_op = vfsops;
@@ -159,10 +158,9 @@ vfs_mountalloc(struct vfsops *vfsops, vn
mutex_init(&mp->mnt_updating, MUTEX_DEFAULT, IPL_NONE);
mp->mnt_vnodecovered = vp;
mount_initspecific(mp);
- if (vfsops != &dead_vfsops) {
- error = fstrans_mount(mp);
- KASSERT(error == 0);
- }
+
+ error = fstrans_mount(mp);
+ KASSERT(error == 0);
mutex_enter(&mountgen_lock);
mp->mnt_gen = mountgen++;
Index: src/sys/kern/vfs_trans.c
diff -u src/sys/kern/vfs_trans.c:1.51 src/sys/kern/vfs_trans.c:1.52
--- src/sys/kern/vfs_trans.c:1.51 Fri Oct 5 09:51:55 2018
+++ src/sys/kern/vfs_trans.c Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_trans.c,v 1.51 2018/10/05 09:51:55 hannken Exp $ */
+/* $NetBSD: vfs_trans.c,v 1.52 2019/02/20 10:07:27 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.51 2018/10/05 09:51:55 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_trans.c,v 1.52 2019/02/20 10:07:27 hannken Exp $");
/*
* File system transaction operations.
@@ -104,6 +104,8 @@ static bool cow_state_change_done(const
static void cow_change_enter(const struct mount *);
static void cow_change_done(const struct mount *);
+extern struct mount *dead_rootmount;
+
/*
* Initialize.
*/
@@ -136,8 +138,6 @@ fstrans_normalize_mount(struct mount *mp
mp = mp->mnt_lower;
if (mp == NULL)
return NULL;
- if ((mp->mnt_iflag & IMNT_HAS_TRANS) == 0)
- return NULL;
return mp;
}
@@ -182,7 +182,6 @@ fstrans_mount_dtor(struct mount *mp)
KASSERT(fmi->fmi_state == FSTRANS_NORMAL);
KASSERT(LIST_FIRST(&fmi->fmi_cow_handler) == NULL);
- mp->mnt_iflag &= ~IMNT_HAS_TRANS;
mp->mnt_transinfo = NULL;
mutex_exit(&fstrans_mount_lock);
@@ -207,7 +206,6 @@ fstrans_mount(struct mount *mp)
mutex_enter(&fstrans_mount_lock);
mp->mnt_transinfo = newfmi;
- mp->mnt_iflag |= IMNT_HAS_TRANS;
mutex_exit(&fstrans_mount_lock);
vfs_ref(mp);
@@ -222,9 +220,6 @@ void
fstrans_unmount(struct mount *mp)
{
- if ((mp->mnt_iflag & IMNT_HAS_TRANS) == 0)
- return;
-
KASSERT(mp->mnt_transinfo != NULL);
fstrans_mount_dtor(mp);
@@ -361,6 +356,11 @@ _fstrans_start(struct mount *mp, enum fs
struct fstrans_lwp_info *fli;
struct fstrans_mount_info *fmi;
+#ifndef FSTRANS_DEAD_ENABLED
+ if (mp == dead_rootmount)
+ return 0;
+#endif
+
if ((lmp = fstrans_normalize_mount(mp)) == NULL)
return 0;
@@ -444,6 +444,11 @@ fstrans_done(struct mount *mp)
struct fstrans_lwp_info *fli;
struct fstrans_mount_info *fmi;
+#ifndef FSTRANS_DEAD_ENABLED
+ if (mp == dead_rootmount)
+ return;
+#endif
+
if ((mp = fstrans_normalize_mount(mp)) == NULL)
return;
if ((fli = fstrans_get_lwp_info(mp, false)) == NULL)
@@ -482,6 +487,8 @@ fstrans_is_owner(struct mount *mp)
{
struct fstrans_lwp_info *fli;
+ KASSERT(mp != dead_rootmount);
+
if ((mp = fstrans_normalize_mount(mp)) == NULL)
return 0;
if ((fli = fstrans_get_lwp_info(mp, false)) == NULL)
@@ -532,6 +539,8 @@ fstrans_setstate(struct mount *mp, enum
enum fstrans_state old_state;
struct fstrans_mount_info *fmi;
+ KASSERT(mp != dead_rootmount);
+
fmi = mp->mnt_transinfo;
old_state = fmi->fmi_state;
if (old_state == new_state)
@@ -574,6 +583,8 @@ fstrans_getstate(struct mount *mp)
{
struct fstrans_mount_info *fmi;
+ KASSERT(mp != dead_rootmount);
+
fmi = mp->mnt_transinfo;
KASSERT(fmi != NULL);
@@ -588,6 +599,8 @@ vfs_suspend(struct mount *mp, int nowait
{
int error;
+ KASSERT(mp != dead_rootmount);
+
if ((mp = fstrans_normalize_mount(mp)) == NULL)
return EOPNOTSUPP;
if (nowait) {
@@ -609,6 +622,8 @@ void
vfs_resume(struct mount *mp)
{
+ KASSERT(mp != dead_rootmount);
+
mp = fstrans_normalize_mount(mp);
KASSERT(mp != NULL);
@@ -702,8 +717,7 @@ fscow_establish(struct mount *mp, int (*
struct fstrans_mount_info *fmi;
struct fscow_handler *newch;
- if ((mp->mnt_iflag & IMNT_HAS_TRANS) == 0)
- return EINVAL;
+ KASSERT(mp != dead_rootmount);
fmi = mp->mnt_transinfo;
KASSERT(fmi != NULL);
@@ -729,8 +743,7 @@ fscow_disestablish(struct mount *mp, int
struct fstrans_mount_info *fmi;
struct fscow_handler *hp = NULL;
- if ((mp->mnt_iflag & IMNT_HAS_TRANS) == 0)
- return EINVAL;
+ KASSERT(mp != dead_rootmount);
fmi = mp->mnt_transinfo;
KASSERT(fmi != NULL);
@@ -773,7 +786,7 @@ fscow_run(struct buf *bp, bool data_vali
mp = spec_node_getmountedfs(bp->b_vp);
else
mp = bp->b_vp->v_mount;
- if (mp == NULL || (mp->mnt_iflag & IMNT_HAS_TRANS) == 0) {
+ if (mp == NULL || mp == dead_rootmount) {
bp->b_flags |= B_COWDONE;
return 0;
}
Index: src/sys/kern/vfs_vnode.c
diff -u src/sys/kern/vfs_vnode.c:1.102 src/sys/kern/vfs_vnode.c:1.103
--- src/sys/kern/vfs_vnode.c:1.102 Wed Feb 20 10:06:33 2019
+++ src/sys/kern/vfs_vnode.c Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_vnode.c,v 1.102 2019/02/20 10:06:33 hannken Exp $ */
+/* $NetBSD: vfs_vnode.c,v 1.103 2019/02/20 10:07:27 hannken Exp $ */
/*-
* Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -156,7 +156,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.102 2019/02/20 10:06:33 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.103 2019/02/20 10:07:27 hannken Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -382,7 +382,7 @@ vfs_vnode_sysinit(void)
dead_rootmount = vfs_mountalloc(&dead_vfsops, NULL);
KASSERT(dead_rootmount != NULL);
- dead_rootmount->mnt_iflag = IMNT_MPSAFE;
+ dead_rootmount->mnt_iflag |= IMNT_MPSAFE;
mutex_init(&vdrain_lock, MUTEX_DEFAULT, IPL_NONE);
TAILQ_INIT(&lru_free_list);
@@ -1030,8 +1030,7 @@ void
vgone(vnode_t *vp)
{
- KASSERT((vp->v_mount->mnt_iflag & IMNT_HAS_TRANS) == 0 ||
- fstrans_is_owner(vp->v_mount));
+ KASSERT(vp->v_mount == dead_rootmount || fstrans_is_owner(vp->v_mount));
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
mutex_enter(vp->v_interlock);
@@ -1684,8 +1683,7 @@ vcache_make_anon(vnode_t *vp)
bool recycle;
KASSERT(vp->v_type == VBLK || vp->v_type == VCHR);
- KASSERT((vp->v_mount->mnt_iflag & IMNT_HAS_TRANS) == 0 ||
- fstrans_is_owner(vp->v_mount));
+ KASSERT(vp->v_mount == dead_rootmount || fstrans_is_owner(vp->v_mount));
VSTATE_ASSERT_UNLOCKED(vp, VS_ACTIVE);
/* Remove from vnode cache. */
Index: src/sys/miscfs/genfs/genfs_vfsops.c
diff -u src/sys/miscfs/genfs/genfs_vfsops.c:1.8 src/sys/miscfs/genfs/genfs_vfsops.c:1.9
--- src/sys/miscfs/genfs/genfs_vfsops.c:1.8 Fri Oct 5 09:51:55 2018
+++ src/sys/miscfs/genfs/genfs_vfsops.c Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: genfs_vfsops.c,v 1.8 2018/10/05 09:51:55 hannken Exp $ */
+/* $NetBSD: genfs_vfsops.c,v 1.9 2019/02/20 10:07:27 hannken Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.8 2018/10/05 09:51:55 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.9 2019/02/20 10:07:27 hannken Exp $");
#include <sys/types.h>
#include <sys/mount.h>
@@ -78,9 +78,6 @@ genfs_suspendctl(struct mount *mp, int c
int error;
int error2 __diagused;
- if ((mp->mnt_iflag & IMNT_HAS_TRANS) == 0)
- return EOPNOTSUPP;
-
switch (cmd) {
case SUSPEND_SUSPEND:
error = fstrans_setstate(mp, FSTRANS_SUSPENDING);
Index: src/sys/rump/librump/rumpvfs/rump_vfs.c
diff -u src/sys/rump/librump/rumpvfs/rump_vfs.c:1.87 src/sys/rump/librump/rumpvfs/rump_vfs.c:1.88
--- src/sys/rump/librump/rumpvfs/rump_vfs.c:1.87 Sat Apr 1 19:35:57 2017
+++ src/sys/rump/librump/rumpvfs/rump_vfs.c Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rump_vfs.c,v 1.87 2017/04/01 19:35:57 riastradh Exp $ */
+/* $NetBSD: rump_vfs.c,v 1.88 2019/02/20 10:07:27 hannken Exp $ */
/*
* Copyright (c) 2008 Antti Kantee. All Rights Reserved.
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.87 2017/04/01 19:35:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.88 2019/02/20 10:07:27 hannken Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -122,12 +122,12 @@ RUMP_COMPONENT(RUMP__FACTION_VFS)
}
bufq_init();
+ fstrans_init();
vfsinit();
bufinit();
cwd_sys_init();
lf_init();
spec_init();
- fstrans_init();
root_device = &rump_rootdev;
Index: src/sys/sys/fstypes.h
diff -u src/sys/sys/fstypes.h:1.36 src/sys/sys/fstypes.h:1.37
--- src/sys/sys/fstypes.h:1.36 Tue Jan 9 03:31:13 2018
+++ src/sys/sys/fstypes.h Wed Feb 20 10:07:27 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fstypes.h,v 1.36 2018/01/09 03:31:13 christos Exp $ */
+/* $NetBSD: fstypes.h,v 1.37 2019/02/20 10:07:27 hannken Exp $ */
/*
* Copyright (c) 1989, 1991, 1993
@@ -221,7 +221,6 @@ typedef struct fhandle fhandle_t;
#define IMNT_WANTRDWR 0x00000004 /* upgrade to read/write requested */
#define IMNT_WANTRDONLY 0x00000008 /* upgrade to readonly requested */
#define IMNT_DTYPE 0x00000040 /* returns d_type fields */
-#define IMNT_HAS_TRANS 0x00000080 /* supports transactions */
#define IMNT_MPSAFE 0x00000100 /* file system code MP safe */
#define IMNT_CAN_RWTORO 0x00000200 /* can downgrade fs to from rw to r/o */
#define IMNT_ONWORKLIST 0x00000400 /* on syncer worklist */
@@ -272,7 +271,6 @@ typedef struct fhandle fhandle_t;
"\13IMNT_ONWORKLIST" \
"\12IMNT_CAN_RWTORO" \
"\11IMNT_MPSAFE" \
- "\10IMNT_HAS_TRANS" \
"\07IMNT_DTYPE" \
"\04IMNT_WANTRDONLY" \
"\03IMNT_WANTRDWR" \