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