Module Name:    src
Committed By:   martin
Date:           Tue Feb 25 20:03:13 UTC 2020

Modified Files:
        src/etc/rc.d [netbsd-9]: mountall
        src/external/cddl/osnet/dist/uts/common/fs/zfs [netbsd-9]:
            spa_history.c zfs_vnops.c
        src/external/cddl/osnet/sys/kern [netbsd-9]: misc.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #725):

        etc/rc.d/mountall: revision 1.12
        external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c: revision 1.59
        external/cddl/osnet/sys/kern/misc.c: revision 1.8
        external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c: revision 1.5
        external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c: revision 1.6
        external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c: revision 1.60
        external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c: revision 1.61

Define VOP_STRATEGY on zfs device nodes too.
Fixes eternal hangs in attempts to do I/O on device nodes on zfs.
XXX pullup

Teach zfs spec nodes to VOP_BWRITE too.
Fixes hang on writing to, e.g., ffs mounted on a device node that
lives on zfs.
XXX pullup

Teach device nodes on zfs to handle fsync by calling spec_fsync too.
If zfs=YES, unconditioally do zfs mount/unmount -a.

If you set zfs=YES, presumably you positively want the automatic rc.d
actions, so if there's no /sbin/zfs or if zfs can't find pools with
/etc/zfs/zpool.cache, presumably you would like feedback about that
in rc.log.

Report the OS name and release appropriately for NetBSD.
We are not OpenSolaris or uts!

Mark previous #ifdef __NetBSD__, per request from hannken.


To generate a diff of this commit:
cvs rdiff -u -r1.10.4.1 -r1.10.4.2 src/etc/rc.d/mountall
cvs rdiff -u -r1.4 -r1.4.4.1 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c
cvs rdiff -u -r1.50.2.5 -r1.50.2.6 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.5 -r1.5.4.1 src/external/cddl/osnet/sys/kern/misc.c

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

Modified files:

Index: src/etc/rc.d/mountall
diff -u src/etc/rc.d/mountall:1.10.4.1 src/etc/rc.d/mountall:1.10.4.2
--- src/etc/rc.d/mountall:1.10.4.1	Fri Sep 27 09:18:37 2019
+++ src/etc/rc.d/mountall	Tue Feb 25 20:03:12 2020
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: mountall,v 1.10.4.1 2019/09/27 09:18:37 martin Exp $
+# $NetBSD: mountall,v 1.10.4.2 2020/02/25 20:03:12 martin Exp $
 #
 
 # REQUIRE: mountcritremote named ypbind
@@ -17,7 +17,7 @@ mountall_start()
 	echo 'Mounting all file systems...'
 	# Mount file systems noted in fstab.
 	mount -a
-	if checkyesno zfs && [ -x /sbin/zfs -a -f /etc/zfs/zpool.cache ]; then
+	if checkyesno zfs; then
 		# Mount ZFS file systems.
 		zfs mount -a
 	fi
@@ -26,7 +26,7 @@ mountall_start()
 mountall_stop()
 {
 	echo 'Unmounting all file systems...'
-	if checkyesno zfs && [ -x /sbin/zfs -a -f /etc/zfs/zpool.cache ]; then
+	if checkyesno zfs; then
 		# Unmount ZFS file systems.
 		zfs unmount -a
 	fi

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.4.4.1
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.4	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c	Tue Feb 25 20:03:12 2020
@@ -540,9 +540,17 @@ spa_history_log_internal_dd(dsl_dir_t *d
 void
 spa_history_log_version(spa_t *spa, const char *operation)
 {
+#ifdef __NetBSD__
+	spa_history_log_internal(spa, operation, NULL,
+	    "pool version %llu; software version %llu/%d; %s %s %s %s %s",
+	    (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION,
+	    utsname.sysname, utsname.nodename, utsname.release, utsname.version,
+	    utsname.machine);
+#else
 	spa_history_log_internal(spa, operation, NULL,
 	    "pool version %llu; software version %llu/%d; uts %s %s %s %s",
 	    (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION,
 	    utsname.nodename, utsname.release, utsname.version,
 	    utsname.machine);
+#endif
 }

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.50.2.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.50.2.6
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.50.2.5	Sun Feb 16 12:20:02 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Tue Feb 25 20:03:12 2020
@@ -5487,6 +5487,19 @@ zfs_netbsd_fsync(void *v)
 }
 
 static int
+zfs_spec_fsync(void *v)
+{
+	struct vop_fsync_args *ap = v;
+	int error;
+
+	error = spec_fsync(v);
+	if (error)
+		return error;
+
+	return (zfs_fsync(ap->a_vp, ap->a_flags, ap->a_cred, NULL));
+}
+
+static int
 zfs_netbsd_getattr(void *v)
 {
 	struct vop_getattr_args *ap = v;
@@ -6332,7 +6345,7 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ &vop_poll_desc,		spec_poll },
 	{ &vop_kqfilter_desc,		spec_kqfilter },
 	{ &vop_revoke_desc,		spec_revoke },
-	{ &vop_fsync_desc,		zfs_netbsd_fsync },
+	{ &vop_fsync_desc,		zfs_spec_fsync },
 	{ &vop_remove_desc,		spec_remove },
 	{ &vop_link_desc,		spec_link },
 	{ &vop_lock_desc,		zfs_netbsd_lock },
@@ -6352,6 +6365,8 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ &vop_mmap_desc,		spec_mmap },
 	{ &vop_islocked_desc,		zfs_netbsd_islocked },
 	{ &vop_advlock_desc,		spec_advlock },
+	{ &vop_strategy_desc,		spec_strategy },
+	{ &vop_bwrite_desc,		spec_bwrite },
 	{ &vop_print_desc,		zfs_netbsd_print },
 	{ &vop_fcntl_desc,		zfs_netbsd_fcntl },
 	{ NULL, NULL }

Index: src/external/cddl/osnet/sys/kern/misc.c
diff -u src/external/cddl/osnet/sys/kern/misc.c:1.5 src/external/cddl/osnet/sys/kern/misc.c:1.5.4.1
--- src/external/cddl/osnet/sys/kern/misc.c:1.5	Mon May 28 21:05:09 2018
+++ src/external/cddl/osnet/sys/kern/misc.c	Tue Feb 25 20:03:12 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: misc.c,v 1.5 2018/05/28 21:05:09 chs Exp $	*/
+/*	$NetBSD: misc.c,v 1.5.4.1 2020/02/25 20:03:12 martin Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -82,7 +82,7 @@ opensolaris_utsname_init(void *arg)
 	strlcpy(utsname.sysname, ostype, sizeof(utsname.sysname));
 	strlcpy(utsname.nodename, hostname, sizeof(utsname.nodename));
 	strlcpy(utsname.release, osrelease, sizeof(utsname.release));
-	strlcpy(utsname.version, "OpenSolaris", sizeof(utsname.version));
+	strlcpy(utsname.version, version, sizeof(utsname.version));
 	strlcpy(utsname.machine, machine, sizeof(utsname.machine));
 }
 

Reply via email to