Module Name:    src
Committed By:   hannken
Date:           Fri Feb 17 08:31:26 UTC 2017

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c
        src/sys/coda: coda_vfsops.c
        src/sys/fs/adosfs: advfsops.c
        src/sys/fs/cd9660: cd9660_vfsops.c
        src/sys/fs/efs: efs_vfsops.c
        src/sys/fs/filecorefs: filecore_vfsops.c
        src/sys/fs/hfs: hfs_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/ptyfs: ptyfs_vfsops.c
        src/sys/fs/puffs: puffs_vfsops.c
        src/sys/fs/smbfs: smbfs_vfsops.c
        src/sys/fs/sysvbfs: sysvbfs.c
        src/sys/fs/tmpfs: tmpfs_vfsops.c
        src/sys/fs/udf: udf_vfsops.c
        src/sys/fs/union: union_vfsops.c
        src/sys/fs/v7fs: v7fs_extern.c
        src/sys/miscfs/fdesc: fdesc_vfsops.c
        src/sys/miscfs/genfs: genfs.h genfs_vfsops.c layer_extern.h
            layer_vfsops.c
        src/sys/miscfs/kernfs: kernfs_vfsops.c
        src/sys/miscfs/nullfs: null_vfsops.c
        src/sys/miscfs/overlay: overlay_vfsops.c
        src/sys/miscfs/procfs: procfs_vfsops.c
        src/sys/miscfs/umapfs: umap_vfsops.c
        src/sys/nfs: nfs_vfsops.c
        src/sys/rump/librump/rumpvfs: rumpfs.c
        src/sys/ufs/chfs: chfs_vfsops.c
        src/sys/ufs/ext2fs: ext2fs_vfsops.c
        src/sys/ufs/ffs: ffs_vfsops.c
        src/sys/ufs/lfs: lfs_vfsops.c
        src/sys/ufs/mfs: mfs_vfsops.c

Log Message:
Add generic genfs_suspendctl() and use it for all file systems.
Layered file systems need work.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.84 -r1.85 src/sys/coda/coda_vfsops.c
cvs rdiff -u -r1.75 -r1.76 src/sys/fs/adosfs/advfsops.c
cvs rdiff -u -r1.90 -r1.91 src/sys/fs/cd9660/cd9660_vfsops.c
cvs rdiff -u -r1.27 -r1.28 src/sys/fs/efs/efs_vfsops.c
cvs rdiff -u -r1.78 -r1.79 src/sys/fs/filecorefs/filecore_vfsops.c
cvs rdiff -u -r1.33 -r1.34 src/sys/fs/hfs/hfs_vfsops.c
cvs rdiff -u -r1.121 -r1.122 src/sys/fs/msdosfs/msdosfs_vfsops.c
cvs rdiff -u -r1.22 -r1.23 src/sys/fs/nilfs/nilfs_vfsops.c
cvs rdiff -u -r1.104 -r1.105 src/sys/fs/ntfs/ntfs_vfsops.c
cvs rdiff -u -r1.55 -r1.56 src/sys/fs/ptyfs/ptyfs_vfsops.c
cvs rdiff -u -r1.118 -r1.119 src/sys/fs/puffs/puffs_vfsops.c
cvs rdiff -u -r1.104 -r1.105 src/sys/fs/smbfs/smbfs_vfsops.c
cvs rdiff -u -r1.15 -r1.16 src/sys/fs/sysvbfs/sysvbfs.c
cvs rdiff -u -r1.69 -r1.70 src/sys/fs/tmpfs/tmpfs_vfsops.c
cvs rdiff -u -r1.73 -r1.74 src/sys/fs/udf/udf_vfsops.c
cvs rdiff -u -r1.75 -r1.76 src/sys/fs/union/union_vfsops.c
cvs rdiff -u -r1.4 -r1.5 src/sys/fs/v7fs/v7fs_extern.c
cvs rdiff -u -r1.91 -r1.92 src/sys/miscfs/fdesc/fdesc_vfsops.c
cvs rdiff -u -r1.32 -r1.33 src/sys/miscfs/genfs/genfs.h
cvs rdiff -u -r1.3 -r1.4 src/sys/miscfs/genfs/genfs_vfsops.c
cvs rdiff -u -r1.37 -r1.38 src/sys/miscfs/genfs/layer_extern.h
cvs rdiff -u -r1.46 -r1.47 src/sys/miscfs/genfs/layer_vfsops.c
cvs rdiff -u -r1.95 -r1.96 src/sys/miscfs/kernfs/kernfs_vfsops.c
cvs rdiff -u -r1.90 -r1.91 src/sys/miscfs/nullfs/null_vfsops.c
cvs rdiff -u -r1.63 -r1.64 src/sys/miscfs/overlay/overlay_vfsops.c
cvs rdiff -u -r1.95 -r1.96 src/sys/miscfs/procfs/procfs_vfsops.c
cvs rdiff -u -r1.95 -r1.96 src/sys/miscfs/umapfs/umap_vfsops.c
cvs rdiff -u -r1.231 -r1.232 src/sys/nfs/nfs_vfsops.c
cvs rdiff -u -r1.143 -r1.144 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.15 -r1.16 src/sys/ufs/chfs/chfs_vfsops.c
cvs rdiff -u -r1.204 -r1.205 src/sys/ufs/ext2fs/ext2fs_vfsops.c
cvs rdiff -u -r1.344 -r1.345 src/sys/ufs/ffs/ffs_vfsops.c
cvs rdiff -u -r1.351 -r1.352 src/sys/ufs/lfs/lfs_vfsops.c
cvs rdiff -u -r1.110 -r1.111 src/sys/ufs/mfs/mfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.14 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.15
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.14	Fri Dec  5 09:13:32 2014
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Fri Feb 17 08:31:23 2017
@@ -116,6 +116,7 @@ static struct vfsops zfs_vfsops_template
 	.vfs_fhtovp = (void *)eopnotsupp,
 	.vfs_quotactl = (void *)eopnotsupp,
 	.vfs_extattrctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_fsync = (void *)eopnotsupp,
 };

Index: src/sys/coda/coda_vfsops.c
diff -u src/sys/coda/coda_vfsops.c:1.84 src/sys/coda/coda_vfsops.c:1.85
--- src/sys/coda/coda_vfsops.c:1.84	Sat Dec 13 15:59:30 2014
+++ src/sys/coda/coda_vfsops.c	Fri Feb 17 08:31:23 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: coda_vfsops.c,v 1.84 2014/12/13 15:59:30 hannken Exp $	*/
+/*	$NetBSD: coda_vfsops.c,v 1.85 2017/02/17 08:31:23 hannken Exp $	*/
 
 /*
  *
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.84 2014/12/13 15:59:30 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.85 2017/02/17 08:31:23 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -114,7 +114,7 @@ struct vfsops coda_vfsops = {
 	.vfs_mountroot = (void *)eopnotsupp,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/adosfs/advfsops.c
diff -u src/sys/fs/adosfs/advfsops.c:1.75 src/sys/fs/adosfs/advfsops.c:1.76
--- src/sys/fs/adosfs/advfsops.c:1.75	Wed Nov 18 22:06:25 2015
+++ src/sys/fs/adosfs/advfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: advfsops.c,v 1.75 2015/11/18 22:06:25 phx Exp $	*/
+/*	$NetBSD: advfsops.c,v 1.76 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: advfsops.c,v 1.75 2015/11/18 22:06:25 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: advfsops.c,v 1.76 2017/02/17 08:31:24 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -804,7 +804,7 @@ struct vfsops adosfs_vfsops = {
 	.vfs_done = adosfs_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/cd9660/cd9660_vfsops.c
diff -u src/sys/fs/cd9660/cd9660_vfsops.c:1.90 src/sys/fs/cd9660/cd9660_vfsops.c:1.91
--- src/sys/fs/cd9660/cd9660_vfsops.c:1.90	Sat Mar 28 19:24:05 2015
+++ src/sys/fs/cd9660/cd9660_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_vfsops.c,v 1.90 2015/03/28 19:24:05 maxv Exp $	*/
+/*	$NetBSD: cd9660_vfsops.c,v 1.91 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1994
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.90 2015/03/28 19:24:05 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.91 2017/02/17 08:31:24 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -111,7 +111,7 @@ struct vfsops cd9660_vfsops = {
 	.vfs_mountroot = cd9660_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/efs/efs_vfsops.c
diff -u src/sys/fs/efs/efs_vfsops.c:1.27 src/sys/fs/efs/efs_vfsops.c:1.28
--- src/sys/fs/efs/efs_vfsops.c:1.27	Thu Jul  7 06:55:42 2016
+++ src/sys/fs/efs/efs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: efs_vfsops.c,v 1.27 2016/07/07 06:55:42 msaitoh Exp $	*/
+/*	$NetBSD: efs_vfsops.c,v 1.28 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*
  * Copyright (c) 2006 Stephen M. Rumble <[email protected]>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efs_vfsops.c,v 1.27 2016/07/07 06:55:42 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_vfsops.c,v 1.28 2017/02/17 08:31:24 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -575,7 +575,7 @@ struct vfsops efs_vfsops = {
 	.vfs_mountroot	= (void *)eopnotsupp,
 	.vfs_snapshot	= (void *)eopnotsupp,
 	.vfs_extattrctl	= vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_opv_descs	= efs_vnodeopv_descs
 /*	.vfs_refcount */
 /*	.vfs_list */

Index: src/sys/fs/filecorefs/filecore_vfsops.c
diff -u src/sys/fs/filecorefs/filecore_vfsops.c:1.78 src/sys/fs/filecorefs/filecore_vfsops.c:1.79
--- src/sys/fs/filecorefs/filecore_vfsops.c:1.78	Sat Mar 28 19:24:05 2015
+++ src/sys/fs/filecorefs/filecore_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecore_vfsops.c,v 1.78 2015/03/28 19:24:05 maxv Exp $	*/
+/*	$NetBSD: filecore_vfsops.c,v 1.79 2017/02/17 08:31:24 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.78 2015/03/28 19:24:05 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: filecore_vfsops.c,v 1.79 2017/02/17 08:31:24 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -125,7 +125,7 @@ struct vfsops filecore_vfsops = {
 	.vfs_done = filecore_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/hfs/hfs_vfsops.c
diff -u src/sys/fs/hfs/hfs_vfsops.c:1.33 src/sys/fs/hfs/hfs_vfsops.c:1.34
--- src/sys/fs/hfs/hfs_vfsops.c:1.33	Mon Dec 29 17:17:54 2014
+++ src/sys/fs/hfs/hfs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: hfs_vfsops.c,v 1.33 2014/12/29 17:17:54 maxv Exp $	*/
+/*	$NetBSD: hfs_vfsops.c,v 1.34 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2005, 2007 The NetBSD Foundation, Inc.
@@ -99,7 +99,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hfs_vfsops.c,v 1.33 2014/12/29 17:17:54 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hfs_vfsops.c,v 1.34 2017/02/17 08:31:24 hannken Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -166,7 +166,7 @@ struct vfsops hfs_vfsops = {
 	.vfs_reinit = hfs_reinit,
 	.vfs_done = hfs_done,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/msdosfs/msdosfs_vfsops.c
diff -u src/sys/fs/msdosfs/msdosfs_vfsops.c:1.121 src/sys/fs/msdosfs/msdosfs_vfsops.c:1.122
--- src/sys/fs/msdosfs/msdosfs_vfsops.c:1.121	Fri Feb 17 08:29:11 2017
+++ src/sys/fs/msdosfs/msdosfs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: msdosfs_vfsops.c,v 1.121 2017/02/17 08:29:11 hannken Exp $	*/
+/*	$NetBSD: msdosfs_vfsops.c,v 1.122 2017/02/17 08:31:24 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.121 2017/02/17 08:29:11 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.122 2017/02/17 08:31:24 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -136,7 +136,7 @@ struct vfsops msdosfs_vfsops = {
 	.vfs_mountroot = msdosfs_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = msdosfs_suspendctl,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,
@@ -1109,27 +1109,3 @@ msdosfs_vget(struct mount *mp, ino_t ino
 
 	return (EOPNOTSUPP);
 }
-
-int
-msdosfs_suspendctl(struct mount *mp, int cmd)
-{
-	int error;
-	struct lwp *l = curlwp;
-
-	switch (cmd) {
-	case SUSPEND_SUSPEND:
-		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDING)) != 0)
-			return error;
-		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDED)) != 0) {
-			(void) fstrans_setstate(mp, FSTRANS_NORMAL);
-			return error;
-		}
-		return 0;
-
-	case SUSPEND_RESUME:
-		return fstrans_setstate(mp, FSTRANS_NORMAL);
-
-	default:
-		return EINVAL;
-	}
-}

Index: src/sys/fs/nilfs/nilfs_vfsops.c
diff -u src/sys/fs/nilfs/nilfs_vfsops.c:1.22 src/sys/fs/nilfs/nilfs_vfsops.c:1.23
--- src/sys/fs/nilfs/nilfs_vfsops.c:1.22	Thu Jul  7 06:55:42 2016
+++ src/sys/fs/nilfs/nilfs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: nilfs_vfsops.c,v 1.22 2016/07/07 06:55:42 msaitoh Exp $ */
+/* $NetBSD: nilfs_vfsops.c,v 1.23 2017/02/17 08:31:24 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.22 2016/07/07 06:55:42 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nilfs_vfsops.c,v 1.23 2017/02/17 08:31:24 hannken Exp $");
 #endif /* not lint */
 
 
@@ -182,7 +182,7 @@ struct vfsops nilfs_vfsops = {
 	.vfs_mountroot = nilfs_mountroot,
 	.vfs_snapshot = nilfs_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/ntfs/ntfs_vfsops.c
diff -u src/sys/fs/ntfs/ntfs_vfsops.c:1.104 src/sys/fs/ntfs/ntfs_vfsops.c:1.105
--- src/sys/fs/ntfs/ntfs_vfsops.c:1.104	Sat Mar 28 19:24:05 2015
+++ src/sys/fs/ntfs/ntfs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vfsops.c,v 1.104 2015/03/28 19:24:05 maxv Exp $	*/
+/*	$NetBSD: ntfs_vfsops.c,v 1.105 2017/02/17 08:31:24 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.104 2015/03/28 19:24:05 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.105 2017/02/17 08:31:24 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -883,7 +883,7 @@ struct vfsops ntfs_vfsops = {
 	.vfs_mountroot = ntfs_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/ptyfs/ptyfs_vfsops.c
diff -u src/sys/fs/ptyfs/ptyfs_vfsops.c:1.55 src/sys/fs/ptyfs/ptyfs_vfsops.c:1.56
--- src/sys/fs/ptyfs/ptyfs_vfsops.c:1.55	Tue Oct 21 16:05:01 2014
+++ src/sys/fs/ptyfs/ptyfs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ptyfs_vfsops.c,v 1.55 2014/10/21 16:05:01 christos Exp $	*/
+/*	$NetBSD: ptyfs_vfsops.c,v 1.56 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993, 1995
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ptyfs_vfsops.c,v 1.55 2014/10/21 16:05:01 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ptyfs_vfsops.c,v 1.56 2017/02/17 08:31:24 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -492,7 +492,7 @@ struct vfsops ptyfs_vfsops = {
 	.vfs_done = ptyfs_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = (void *)eopnotsupp,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/puffs/puffs_vfsops.c
diff -u src/sys/fs/puffs/puffs_vfsops.c:1.118 src/sys/fs/puffs/puffs_vfsops.c:1.119
--- src/sys/fs/puffs/puffs_vfsops.c:1.118	Sun Dec 20 01:34:00 2015
+++ src/sys/fs/puffs/puffs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vfsops.c,v 1.118 2015/12/20 01:34:00 christos Exp $	*/
+/*	$NetBSD: puffs_vfsops.c,v 1.119 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.118 2015/12/20 01:34:00 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.119 2017/02/17 08:31:24 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -871,7 +871,7 @@ struct vfsops puffs_vfsops = {
 	.vfs_done = puffs_vfsop_done,
 	.vfs_snapshot = puffs_vfsop_snapshot,
 	.vfs_extattrctl = puffs_vfsop_extattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.104 src/sys/fs/smbfs/smbfs_vfsops.c:1.105
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.104	Sun Dec 21 10:48:53 2014
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.104 2014/12/21 10:48:53 hannken Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.105 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.104 2014/12/21 10:48:53 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.105 2017/02/17 08:31:24 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -97,7 +97,7 @@ struct vfsops smbfs_vfsops = {
 	.vfs_mountroot = (void *)eopnotsupp,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/sysvbfs/sysvbfs.c
diff -u src/sys/fs/sysvbfs/sysvbfs.c:1.15 src/sys/fs/sysvbfs/sysvbfs.c:1.16
--- src/sys/fs/sysvbfs/sysvbfs.c:1.15	Fri Dec 26 15:23:21 2014
+++ src/sys/fs/sysvbfs/sysvbfs.c	Fri Feb 17 08:31:24 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysvbfs.c,v 1.15 2014/12/26 15:23:21 hannken Exp $	*/
+/*	$NetBSD: sysvbfs.c,v 1.16 2017/02/17 08:31:24 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs.c,v 1.15 2014/12/26 15:23:21 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs.c,v 1.16 2017/02/17 08:31:24 hannken Exp $");
 
 #include <sys/resource.h>
 #include <sys/param.h>
@@ -129,7 +129,7 @@ struct vfsops sysvbfs_vfsops = {
 	.vfs_done = sysvbfs_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/tmpfs/tmpfs_vfsops.c
diff -u src/sys/fs/tmpfs/tmpfs_vfsops.c:1.69 src/sys/fs/tmpfs/tmpfs_vfsops.c:1.70
--- src/sys/fs/tmpfs/tmpfs_vfsops.c:1.69	Fri Jan 27 10:47:54 2017
+++ src/sys/fs/tmpfs/tmpfs_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_vfsops.c,v 1.69 2017/01/27 10:47:54 hannken Exp $	*/
+/*	$NetBSD: tmpfs_vfsops.c,v 1.70 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_vfsops.c,v 1.69 2017/01/27 10:47:54 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_vfsops.c,v 1.70 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -483,7 +483,7 @@ struct vfsops tmpfs_vfsops = {
 	.vfs_done = tmpfs_done,
 	.vfs_snapshot = tmpfs_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/udf/udf_vfsops.c
diff -u src/sys/fs/udf/udf_vfsops.c:1.73 src/sys/fs/udf/udf_vfsops.c:1.74
--- src/sys/fs/udf/udf_vfsops.c:1.73	Thu Jul  7 06:55:43 2016
+++ src/sys/fs/udf/udf_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vfsops.c,v 1.73 2016/07/07 06:55:43 msaitoh Exp $ */
+/* $NetBSD: udf_vfsops.c,v 1.74 2017/02/17 08:31:25 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.73 2016/07/07 06:55:43 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.74 2017/02/17 08:31:25 hannken Exp $");
 #endif /* not lint */
 
 
@@ -118,7 +118,7 @@ struct vfsops udf_vfsops = {
 	.vfs_mountroot = udf_mountroot,
 	.vfs_snapshot = udf_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/union/union_vfsops.c
diff -u src/sys/fs/union/union_vfsops.c:1.75 src/sys/fs/union/union_vfsops.c:1.76
--- src/sys/fs/union/union_vfsops.c:1.75	Thu Jul 23 09:45:21 2015
+++ src/sys/fs/union/union_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: union_vfsops.c,v 1.75 2015/07/23 09:45:21 hannken Exp $	*/
+/*	$NetBSD: union_vfsops.c,v 1.76 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1994 The Regents of the University of California.
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vfsops.c,v 1.75 2015/07/23 09:45:21 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vfsops.c,v 1.76 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -94,6 +94,7 @@ __KERNEL_RCSID(0, "$NetBSD: union_vfsops
 #include <sys/kauth.h>
 #include <sys/module.h>
 
+#include <miscfs/genfs/genfs.h>
 #include <fs/union/union.h>
 
 MODULE(MODULE_CLASS_VFS, union, NULL);
@@ -534,7 +535,7 @@ struct vfsops union_vfsops = {
 	.vfs_done = union_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = union_renamelock_enter,
 	.vfs_renamelock_exit = union_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/fs/v7fs/v7fs_extern.c
diff -u src/sys/fs/v7fs/v7fs_extern.c:1.4 src/sys/fs/v7fs/v7fs_extern.c:1.5
--- src/sys/fs/v7fs/v7fs_extern.c:1.4	Mon Dec 29 15:29:38 2014
+++ src/sys/fs/v7fs/v7fs_extern.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: v7fs_extern.c,v 1.4 2014/12/29 15:29:38 hannken Exp $	*/
+/*	$NetBSD: v7fs_extern.c,v 1.5 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_extern.c,v 1.4 2014/12/29 15:29:38 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_extern.c,v 1.5 2017/02/17 08:31:25 hannken Exp $");
 
 #if defined _KERNEL_OPT
 #include "opt_v7fs.h"
@@ -244,7 +244,7 @@ struct vfsops v7fs_vfsops = {
 	.vfs_mountroot = v7fs_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/miscfs/fdesc/fdesc_vfsops.c
diff -u src/sys/miscfs/fdesc/fdesc_vfsops.c:1.91 src/sys/miscfs/fdesc/fdesc_vfsops.c:1.92
--- src/sys/miscfs/fdesc/fdesc_vfsops.c:1.91	Sun Nov  9 18:08:06 2014
+++ src/sys/miscfs/fdesc/fdesc_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: fdesc_vfsops.c,v 1.91 2014/11/09 18:08:06 maxv Exp $	*/
+/*	$NetBSD: fdesc_vfsops.c,v 1.92 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993, 1995
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdesc_vfsops.c,v 1.91 2014/11/09 18:08:06 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdesc_vfsops.c,v 1.92 2017/02/17 08:31:25 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -256,7 +256,7 @@ struct vfsops fdesc_vfsops = {
 	.vfs_done = fdesc_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/miscfs/genfs/genfs.h
diff -u src/sys/miscfs/genfs/genfs.h:1.32 src/sys/miscfs/genfs/genfs.h:1.33
--- src/sys/miscfs/genfs/genfs.h:1.32	Thu Feb 27 16:51:38 2014
+++ src/sys/miscfs/genfs/genfs.h	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs.h,v 1.32 2014/02/27 16:51:38 hannken Exp $	*/
+/*	$NetBSD: genfs.h,v 1.33 2017/02/17 08:31:25 hannken Exp $	*/
 
 #ifndef	_MISCFS_GENFS_GENFS_H_
 #define	_MISCFS_GENFS_GENFS_H_
@@ -46,6 +46,8 @@ int	genfs_statvfs(struct mount *, struct
 int	genfs_renamelock_enter(struct mount *);
 void	genfs_renamelock_exit(struct mount *);
 
+int	genfs_suspendctl(struct mount *, int);
+
 int	genfs_can_access(enum vtype, mode_t, uid_t, gid_t, mode_t,
 	    kauth_cred_t);
 int	genfs_can_chmod(enum vtype, kauth_cred_t, uid_t, gid_t, mode_t);

Index: src/sys/miscfs/genfs/genfs_vfsops.c
diff -u src/sys/miscfs/genfs/genfs_vfsops.c:1.3 src/sys/miscfs/genfs/genfs_vfsops.c:1.4
--- src/sys/miscfs/genfs/genfs_vfsops.c:1.3	Mon Nov 30 10:59:20 2009
+++ src/sys/miscfs/genfs/genfs_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_vfsops.c,v 1.3 2009/11/30 10:59:20 pooka Exp $	*/
+/*	$NetBSD: genfs_vfsops.c,v 1.4 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -27,10 +27,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.3 2009/11/30 10:59:20 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.4 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/types.h>
 #include <sys/mount.h>
+#include <sys/fstrans.h>
 #include <sys/statvfs.h>
 #include <sys/vnode.h>
 
@@ -70,3 +71,33 @@ genfs_renamelock_exit(struct mount *mp)
 {
 	mutex_exit(&mp->mnt_renamelock);
 }
+
+int
+genfs_suspendctl(struct mount *mp, int cmd)
+{
+	int error;
+	int error2 __diagused;
+
+	if ((mp->mnt_iflag & IMNT_HAS_TRANS) == 0)
+		return EOPNOTSUPP;
+
+	switch (cmd) {
+	case SUSPEND_SUSPEND:
+		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDING)) != 0)
+			return error;
+		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDED)) != 0) {
+			error2 = fstrans_setstate(mp, FSTRANS_NORMAL);
+			KASSERT(error2 == 0);
+			return error;
+		}
+		return 0;
+
+	case SUSPEND_RESUME:
+		error2 = fstrans_setstate(mp, FSTRANS_NORMAL);
+		KASSERT(error2 == 0);
+		return 0;
+
+	default:
+		panic("%s: bogus command %d", __func__, cmd);
+	}
+}

Index: src/sys/miscfs/genfs/layer_extern.h
diff -u src/sys/miscfs/genfs/layer_extern.h:1.37 src/sys/miscfs/genfs/layer_extern.h:1.38
--- src/sys/miscfs/genfs/layer_extern.h:1.37	Fri Jan 27 10:47:13 2017
+++ src/sys/miscfs/genfs/layer_extern.h	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: layer_extern.h,v 1.37 2017/01/27 10:47:13 hannken Exp $	*/
+/*	$NetBSD: layer_extern.h,v 1.38 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1999 National Aeronautics & Space Administration
@@ -90,6 +90,7 @@ int	layerfs_vget(struct mount *, ino_t, 
 int	layerfs_fhtovp(struct mount *, struct fid *, struct vnode **);
 int	layerfs_vptofh(struct vnode *, struct fid *, size_t *);
 int	layerfs_snapshot(struct mount *, struct vnode *, struct timespec *);
+int	layerfs_suspendctl(struct mount *, int);
 int	layerfs_renamelock_enter(struct mount *);
 void	layerfs_renamelock_exit(struct mount *);
 

Index: src/sys/miscfs/genfs/layer_vfsops.c
diff -u src/sys/miscfs/genfs/layer_vfsops.c:1.46 src/sys/miscfs/genfs/layer_vfsops.c:1.47
--- src/sys/miscfs/genfs/layer_vfsops.c:1.46	Mon Apr 20 19:36:55 2015
+++ src/sys/miscfs/genfs/layer_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: layer_vfsops.c,v 1.46 2015/04/20 19:36:55 riastradh Exp $	*/
+/*	$NetBSD: layer_vfsops.c,v 1.47 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1999 National Aeronautics & Space Administration
@@ -74,7 +74,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: layer_vfsops.c,v 1.46 2015/04/20 19:36:55 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: layer_vfsops.c,v 1.47 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -86,6 +86,7 @@ __KERNEL_RCSID(0, "$NetBSD: layer_vfsops
 #include <sys/module.h>
 
 #include <miscfs/specfs/specdev.h>
+#include <miscfs/genfs/genfs.h>
 #include <miscfs/genfs/layer.h>
 #include <miscfs/genfs/layer_extern.h>
 
@@ -321,6 +322,23 @@ layerfs_snapshot(struct mount *mp, struc
 	return EOPNOTSUPP;
 }
 
+/*
+ * layerfs_suspendctl - suspend a layered file system
+ *
+ * Here we should suspend the lower file system(s) too.  At present
+ * this will deadlock as we don't know which to suspend first.
+ *
+ * This routine serves as a central resource for this behavior; all
+ * layered file systems don't need to worry about the above. Also, if
+ * things get fixed, all layers get the benefit.
+ */
+int
+layerfs_suspendctl(struct mount *mp, int cmd)
+{
+
+	return genfs_suspendctl(mp, cmd);
+}
+
 SYSCTL_SETUP(sysctl_vfs_layerfs_setup, "sysctl vfs.layerfs subtree setup")
 {
 	const struct sysctlnode *layerfs_node = NULL;

Index: src/sys/miscfs/kernfs/kernfs_vfsops.c
diff -u src/sys/miscfs/kernfs/kernfs_vfsops.c:1.95 src/sys/miscfs/kernfs/kernfs_vfsops.c:1.96
--- src/sys/miscfs/kernfs/kernfs_vfsops.c:1.95	Sun Jul 20 13:58:04 2014
+++ src/sys/miscfs/kernfs/kernfs_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernfs_vfsops.c,v 1.95 2014/07/20 13:58:04 hannken Exp $	*/
+/*	$NetBSD: kernfs_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993, 1995
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vfsops.c,v 1.95 2014/07/20 13:58:04 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -318,7 +318,7 @@ struct vfsops kernfs_vfsops = {
 	.vfs_done = kernfs_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/miscfs/nullfs/null_vfsops.c
diff -u src/sys/miscfs/nullfs/null_vfsops.c:1.90 src/sys/miscfs/nullfs/null_vfsops.c:1.91
--- src/sys/miscfs/nullfs/null_vfsops.c:1.90	Sun Nov  9 18:08:07 2014
+++ src/sys/miscfs/nullfs/null_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: null_vfsops.c,v 1.90 2014/11/09 18:08:07 maxv Exp $	*/
+/*	$NetBSD: null_vfsops.c,v 1.91 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1999 National Aeronautics & Space Administration
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: null_vfsops.c,v 1.90 2014/11/09 18:08:07 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: null_vfsops.c,v 1.91 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -228,7 +228,7 @@ struct vfsops nullfs_vfsops = {
 	.vfs_done = layerfs_done,
 	.vfs_snapshot = layerfs_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = layerfs_suspendctl,
 	.vfs_renamelock_enter = layerfs_renamelock_enter,
 	.vfs_renamelock_exit = layerfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/miscfs/overlay/overlay_vfsops.c
diff -u src/sys/miscfs/overlay/overlay_vfsops.c:1.63 src/sys/miscfs/overlay/overlay_vfsops.c:1.64
--- src/sys/miscfs/overlay/overlay_vfsops.c:1.63	Mon Nov 10 18:46:33 2014
+++ src/sys/miscfs/overlay/overlay_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: overlay_vfsops.c,v 1.63 2014/11/10 18:46:33 maxv Exp $	*/
+/*	$NetBSD: overlay_vfsops.c,v 1.64 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1999, 2000 National Aeronautics & Space Administration
@@ -74,7 +74,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: overlay_vfsops.c,v 1.63 2014/11/10 18:46:33 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: overlay_vfsops.c,v 1.64 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -260,7 +260,7 @@ struct vfsops overlay_vfsops = {
 	.vfs_done = layerfs_done,
 	.vfs_snapshot = layerfs_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = layerfs_suspendctl,
 	.vfs_renamelock_enter = layerfs_renamelock_enter,
 	.vfs_renamelock_exit = layerfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/miscfs/procfs/procfs_vfsops.c
diff -u src/sys/miscfs/procfs/procfs_vfsops.c:1.95 src/sys/miscfs/procfs/procfs_vfsops.c:1.96
--- src/sys/miscfs/procfs/procfs_vfsops.c:1.95	Thu Nov  3 03:53:32 2016
+++ src/sys/miscfs/procfs/procfs_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_vfsops.c,v 1.95 2016/11/03 03:53:32 pgoyette Exp $	*/
+/*	$NetBSD: procfs_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1993
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.95 2016/11/03 03:53:32 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -473,7 +473,7 @@ struct vfsops procfs_vfsops = {
 	.vfs_done = procfs_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/miscfs/umapfs/umap_vfsops.c
diff -u src/sys/miscfs/umapfs/umap_vfsops.c:1.95 src/sys/miscfs/umapfs/umap_vfsops.c:1.96
--- src/sys/miscfs/umapfs/umap_vfsops.c:1.95	Sun Nov  9 18:08:07 2014
+++ src/sys/miscfs/umapfs/umap_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: umap_vfsops.c,v 1.95 2014/11/09 18:08:07 maxv Exp $	*/
+/*	$NetBSD: umap_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umap_vfsops.c,v 1.95 2014/11/09 18:08:07 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umap_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -294,7 +294,7 @@ struct vfsops umapfs_vfsops = {
 	.vfs_done = layerfs_done,
 	.vfs_snapshot = layerfs_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = layerfs_suspendctl,
 	.vfs_renamelock_enter = layerfs_renamelock_enter,
 	.vfs_renamelock_exit = layerfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/nfs/nfs_vfsops.c
diff -u src/sys/nfs/nfs_vfsops.c:1.231 src/sys/nfs/nfs_vfsops.c:1.232
--- src/sys/nfs/nfs_vfsops.c:1.231	Mon Nov  2 09:57:43 2015
+++ src/sys/nfs/nfs_vfsops.c	Fri Feb 17 08:31:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: nfs_vfsops.c,v 1.231 2015/11/02 09:57:43 pgoyette Exp $	*/
+/*	$NetBSD: nfs_vfsops.c,v 1.232 2017/02/17 08:31:25 hannken Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993, 1995
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_vfsops.c,v 1.231 2015/11/02 09:57:43 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_vfsops.c,v 1.232 2017/02/17 08:31:25 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_nfs.h"
@@ -122,7 +122,7 @@ struct vfsops nfs_vfsops = {
 	.vfs_mountroot = nfs_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.143 src/sys/rump/librump/rumpvfs/rumpfs.c:1.144
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.143	Fri Jan 27 10:48:51 2017
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Fri Feb 17 08:31:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.143 2017/01/27 10:48:51 hannken Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.144 2017/02/17 08:31:26 hannken Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.143 2017/01/27 10:48:51 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.144 2017/02/17 08:31:26 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -1779,7 +1779,7 @@ struct vfsops rumpfs_vfsops = {
 	.vfs_mountroot =	rumpfs_mountroot,
 	.vfs_snapshot =		(void *)eopnotsupp,
 	.vfs_extattrctl =	(void *)eopnotsupp,
-	.vfs_suspendctl =	(void *)eopnotsupp,
+	.vfs_suspendctl =	genfs_suspendctl,
 	.vfs_renamelock_enter =	genfs_renamelock_enter,
 	.vfs_renamelock_exit =	genfs_renamelock_exit,
 	.vfs_opv_descs =	rump_opv_descs,

Index: src/sys/ufs/chfs/chfs_vfsops.c
diff -u src/sys/ufs/chfs/chfs_vfsops.c:1.15 src/sys/ufs/chfs/chfs_vfsops.c:1.16
--- src/sys/ufs/chfs/chfs_vfsops.c:1.15	Sun Jan 11 17:29:57 2015
+++ src/sys/ufs/chfs/chfs_vfsops.c	Fri Feb 17 08:31:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: chfs_vfsops.c,v 1.15 2015/01/11 17:29:57 hannken Exp $	*/
+/*	$NetBSD: chfs_vfsops.c,v 1.16 2017/02/17 08:31:26 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2010 Department of Software Engineering,
@@ -801,7 +801,7 @@ struct vfsops chfs_vfsops = {
 	.vfs_done = chfs_done,
 	.vfs_snapshot = chfs_snapshot,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.204 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.205
--- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.204	Thu Aug 25 07:18:35 2016
+++ src/sys/ufs/ext2fs/ext2fs_vfsops.c	Fri Feb 17 08:31:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vfsops.c,v 1.204 2016/08/25 07:18:35 christos Exp $	*/
+/*	$NetBSD: ext2fs_vfsops.c,v 1.205 2017/02/17 08:31:26 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.204 2016/08/25 07:18:35 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.205 2017/02/17 08:31:26 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -139,7 +139,7 @@ struct vfsops ext2fs_vfsops = {
 	.vfs_mountroot = ext2fs_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.344 src/sys/ufs/ffs/ffs_vfsops.c:1.345
--- src/sys/ufs/ffs/ffs_vfsops.c:1.344	Fri Feb 17 08:29:11 2017
+++ src/sys/ufs/ffs/ffs_vfsops.c	Fri Feb 17 08:31:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vfsops.c,v 1.344 2017/02/17 08:29:11 hannken Exp $	*/
+/*	$NetBSD: ffs_vfsops.c,v 1.345 2017/02/17 08:31:26 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.344 2017/02/17 08:29:11 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.345 2017/02/17 08:31:26 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -167,7 +167,7 @@ struct vfsops ffs_vfsops = {
 	.vfs_mountroot = ffs_mountroot,
 	.vfs_snapshot = ffs_snapshot,
 	.vfs_extattrctl = ffs_extattrctl,
-	.vfs_suspendctl = ffs_suspendctl,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = ffs_vfs_fsync,
@@ -2398,30 +2398,6 @@ ffs_extattrctl(struct mount *mp, int cmd
 	return (vfs_stdextattrctl(mp, cmd, vp, attrnamespace, attrname));
 }
 
-int
-ffs_suspendctl(struct mount *mp, int cmd)
-{
-	int error;
-	struct lwp *l = curlwp;
-
-	switch (cmd) {
-	case SUSPEND_SUSPEND:
-		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDING)) != 0)
-			return error;
-		if ((error = fstrans_setstate(mp, FSTRANS_SUSPENDED)) != 0) {
-			(void) fstrans_setstate(mp, FSTRANS_NORMAL);
-			return error;
-		}
-		return 0;
-
-	case SUSPEND_RESUME:
-		return fstrans_setstate(mp, FSTRANS_NORMAL);
-
-	default:
-		return EINVAL;
-	}
-}
-
 /*
  * Synch vnode for a mounted file system.
  */

Index: src/sys/ufs/lfs/lfs_vfsops.c
diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.351 src/sys/ufs/lfs/lfs_vfsops.c:1.352
--- src/sys/ufs/lfs/lfs_vfsops.c:1.351	Thu Jul  7 06:55:44 2016
+++ src/sys/ufs/lfs/lfs_vfsops.c	Fri Feb 17 08:31:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vfsops.c,v 1.351 2016/07/07 06:55:44 msaitoh Exp $	*/
+/*	$NetBSD: lfs_vfsops.c,v 1.352 2017/02/17 08:31:26 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.351 2016/07/07 06:55:44 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.352 2017/02/17 08:31:26 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -163,7 +163,7 @@ struct vfsops lfs_vfsops = {
 	.vfs_mountroot = lfs_mountroot,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = lfs_extattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Index: src/sys/ufs/mfs/mfs_vfsops.c
diff -u src/sys/ufs/mfs/mfs_vfsops.c:1.110 src/sys/ufs/mfs/mfs_vfsops.c:1.111
--- src/sys/ufs/mfs/mfs_vfsops.c:1.110	Tue Mar 17 09:39:29 2015
+++ src/sys/ufs/mfs/mfs_vfsops.c	Fri Feb 17 08:31:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mfs_vfsops.c,v 1.110 2015/03/17 09:39:29 hannken Exp $	*/
+/*	$NetBSD: mfs_vfsops.c,v 1.111 2017/02/17 08:31:26 hannken Exp $	*/
 
 /*
  * Copyright (c) 1989, 1990, 1993, 1994
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.110 2015/03/17 09:39:29 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.111 2017/02/17 08:31:26 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -109,7 +109,7 @@ struct vfsops mfs_vfsops = {
 	.vfs_done = mfs_done,
 	.vfs_snapshot = (void *)eopnotsupp,
 	.vfs_extattrctl = vfs_stdextattrctl,
-	.vfs_suspendctl = (void *)eopnotsupp,
+	.vfs_suspendctl = genfs_suspendctl,
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_fsync = (void *)eopnotsupp,

Reply via email to