Module Name:    src
Committed By:   christos
Date:           Sun Sep 22 22:59:40 UTC 2019

Modified Files:
        src/bin/df: df.c
        src/distrib/sets/lists/base: shl.mi
        src/distrib/sets/lists/debug: shl.mi
        src/distrib/sets/lists/modules: ad.arm ad.mips md.amd64 md.sparc64 mi
        src/lib/libc: shlib_version
        src/lib/libc/compat/gen: Makefile.inc compat_opendir.c
        src/lib/libc/compat/sys: Makefile.inc compat_fhstatvfs.c
            compat_fhstatvfs1.c compat_statfs.c
        src/lib/libc/include: namespace.h
        src/lib/libc/sys: Makefile.inc statvfs.c
        src/share/man/man5: statvfs.5
        src/sys/compat/common: compat_mod.h files.common vfs_syscalls_20.c
            vfs_syscalls_30.c
        src/sys/compat/netbsd32: files.netbsd32 netbsd32.h netbsd32_conv.h
            netbsd32_fs.c syscalls.conf syscalls.master
        src/sys/conf: files
        src/sys/kern: init_sysent.c syscalls.conf syscalls.master vfs_subr.c
            vfs_syscalls.c
        src/sys/miscfs/specfs: spec_vnops.c
        src/sys/modules: Makefile
        src/sys/sys: param.h statvfs.h
        src/usr.bin/ktruss: dump.c
Added Files:
        src/lib/libc/compat/gen: compat___getmntinfo13.c
        src/lib/libc/compat/sys: compat___fhstatvfs140.c compat___fhstatvfs40.c
            compat_statvfs.c
        src/sys/compat/common: compat_90_mod.c vfs_syscalls_90.c
        src/sys/compat/netbsd32: netbsd32_compat_90.c
        src/sys/conf: compat_netbsd90.config
        src/sys/modules/compat_90: Makefile
        src/sys/modules/compat_netbsd32_90: Makefile

Log Message:
Add a new member to struct vfsstat and grow the unused members
The new member is caled f_mntfromlabel and it is the dkw_wname
of the corresponding wedge. This is now used by df -W to display
the mountpoint name as NAME=


To generate a diff of this commit:
cvs rdiff -u -r1.94 -r1.95 src/bin/df/df.c
cvs rdiff -u -r1.871 -r1.872 src/distrib/sets/lists/base/shl.mi
cvs rdiff -u -r1.228 -r1.229 src/distrib/sets/lists/debug/shl.mi
cvs rdiff -u -r1.12 -r1.13 src/distrib/sets/lists/modules/ad.arm \
    src/distrib/sets/lists/modules/ad.mips
cvs rdiff -u -r1.80 -r1.81 src/distrib/sets/lists/modules/md.amd64
cvs rdiff -u -r1.7 -r1.8 src/distrib/sets/lists/modules/md.sparc64
cvs rdiff -u -r1.125 -r1.126 src/distrib/sets/lists/modules/mi
cvs rdiff -u -r1.284 -r1.285 src/lib/libc/shlib_version
cvs rdiff -u -r1.17 -r1.18 src/lib/libc/compat/gen/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/lib/libc/compat/gen/compat___getmntinfo13.c
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/gen/compat_opendir.c
cvs rdiff -u -r1.9 -r1.10 src/lib/libc/compat/sys/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/lib/libc/compat/sys/compat___fhstatvfs140.c \
    src/lib/libc/compat/sys/compat___fhstatvfs40.c \
    src/lib/libc/compat/sys/compat_statvfs.c
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/compat/sys/compat_fhstatvfs.c \
    src/lib/libc/compat/sys/compat_fhstatvfs1.c
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/compat/sys/compat_statfs.c
cvs rdiff -u -r1.196 -r1.197 src/lib/libc/include/namespace.h
cvs rdiff -u -r1.241 -r1.242 src/lib/libc/sys/Makefile.inc
cvs rdiff -u -r1.6 -r1.7 src/lib/libc/sys/statvfs.c
cvs rdiff -u -r1.14 -r1.15 src/share/man/man5/statvfs.5
cvs rdiff -u -r0 -r1.1 src/sys/compat/common/compat_90_mod.c \
    src/sys/compat/common/vfs_syscalls_90.c
cvs rdiff -u -r1.5 -r1.6 src/sys/compat/common/compat_mod.h
cvs rdiff -u -r1.4 -r1.5 src/sys/compat/common/files.common
cvs rdiff -u -r1.41 -r1.42 src/sys/compat/common/vfs_syscalls_20.c
cvs rdiff -u -r1.38 -r1.39 src/sys/compat/common/vfs_syscalls_30.c
cvs rdiff -u -r1.48 -r1.49 src/sys/compat/netbsd32/files.netbsd32
cvs rdiff -u -r1.123 -r1.124 src/sys/compat/netbsd32/netbsd32.h
cvs rdiff -u -r0 -r1.1 src/sys/compat/netbsd32/netbsd32_compat_90.c
cvs rdiff -u -r1.38 -r1.39 src/sys/compat/netbsd32/netbsd32_conv.h
cvs rdiff -u -r1.83 -r1.84 src/sys/compat/netbsd32/netbsd32_fs.c
cvs rdiff -u -r1.16 -r1.17 src/sys/compat/netbsd32/syscalls.conf
cvs rdiff -u -r1.127 -r1.128 src/sys/compat/netbsd32/syscalls.master
cvs rdiff -u -r0 -r1.1 src/sys/conf/compat_netbsd90.config
cvs rdiff -u -r1.1239 -r1.1240 src/sys/conf/files
cvs rdiff -u -r1.323 -r1.324 src/sys/kern/init_sysent.c
cvs rdiff -u -r1.29 -r1.30 src/sys/kern/syscalls.conf
cvs rdiff -u -r1.295 -r1.296 src/sys/kern/syscalls.master
cvs rdiff -u -r1.471 -r1.472 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.535 -r1.536 src/sys/kern/vfs_syscalls.c
cvs rdiff -u -r1.175 -r1.176 src/sys/miscfs/specfs/spec_vnops.c
cvs rdiff -u -r1.226 -r1.227 src/sys/modules/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/modules/compat_90/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/modules/compat_netbsd32_90/Makefile
cvs rdiff -u -r1.612 -r1.613 src/sys/sys/param.h
cvs rdiff -u -r1.18 -r1.19 src/sys/sys/statvfs.h
cvs rdiff -u -r1.43 -r1.44 src/usr.bin/ktruss/dump.c

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

Modified files:

Index: src/bin/df/df.c
diff -u src/bin/df/df.c:1.94 src/bin/df/df.c:1.95
--- src/bin/df/df.c:1.94	Wed Sep 18 16:14:44 2019
+++ src/bin/df/df.c	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: df.c,v 1.94 2019/09/18 20:14:44 christos Exp $ */
+/*	$NetBSD: df.c,v 1.95 2019/09/22 22:59:37 christos Exp $ */
 
 /*
  * Copyright (c) 1980, 1990, 1993, 1994
@@ -45,15 +45,13 @@ __COPYRIGHT(
 #if 0
 static char sccsid[] = "@(#)df.c	8.7 (Berkeley) 4/2/94";
 #else
-__RCSID("$NetBSD: df.c,v 1.94 2019/09/18 20:14:44 christos Exp $");
+__RCSID("$NetBSD: df.c,v 1.95 2019/09/22 22:59:37 christos Exp $");
 #endif
 #endif /* not lint */
 
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
-#include <sys/disk.h>
-#include <sys/ioctl.h>
 
 #include <assert.h>
 #include <err.h>
@@ -69,13 +67,11 @@ __RCSID("$NetBSD: df.c,v 1.94 2019/09/18
 #include <util.h>
 
 static char	*getmntpt(const char *);
-static void	 prtstat(const struct dkwedge_info *, const struct statvfs *,
-    int);
+static void	 prtstat(const struct statvfs *, int);
 static int	 selected(const char *, size_t);
 static void	 maketypelist(char *);
 static size_t	 regetmntinfo(struct statvfs **, size_t);
 __dead static void usage(void);
-static struct dkwedge_info *getwedgeinfo(const struct statvfs *, size_t);
 static void	 prthumanval(int64_t, const char *);
 static void	 prthuman(const struct statvfs *, int64_t, int64_t);
 
@@ -88,7 +84,6 @@ main(int argc, char *argv[])
 {
 	struct stat stbuf;
 	struct statvfs *mntbuf;
-	struct dkwedge_info *wedge_info;
 	int ch, maxwidth, width;
 	size_t i, mntcount;
 	char *mntpt;
@@ -208,18 +203,15 @@ main(int argc, char *argv[])
 		}
 	}
 
-	wedge_info = Wflag ? getwedgeinfo(mntbuf, mntcount) : NULL;
-
 	maxwidth = 0;
 	for (i = 0; i < mntcount; i++) {
-		width = (int)strlen(Wflag && wedge_info[i].dkw_wname[0] ?
-		    (const char *)wedge_info[i].dkw_wname :
-		    mntbuf[i].f_mntfromname);
+		width = (int)strlen(Wflag && mntbuf[i].f_mntfromlabel[0] ?
+		    mntbuf[i].f_mntfromlabel : mntbuf[i].f_mntfromname);
 		if (width > maxwidth)
 			maxwidth = width;
 	}
 	for (i = 0; i < mntcount; i++)
-		prtstat(&wedge_info[i], &mntbuf[i], maxwidth);
+		prtstat(&mntbuf[i], maxwidth);
 	return 0;
 }
 
@@ -293,33 +285,6 @@ maketypelist(char *fslist)
 	av[i] = NULL;
 }
 
-static struct dkwedge_info *
-getwedgeinfo(const struct statvfs *mntbuf, size_t mntcount)
-{
-	struct dkwedge_info *wi = calloc(mntcount, sizeof(*wi));
-	char buf[1024];
-
-	if (wi == NULL)
-		err(EXIT_FAILURE, "can't allocate wedge info array");
-	
-	for (size_t i = 0; i < mntcount; i++) {
-		const char *dname = mntbuf[i].f_mntfromname;
-		const char *rdn = strrchr(dname, '/');
-		if (rdn == NULL) {
-			continue;
-		}
-		rdn++;
-		int fd = opendisk(rdn, O_RDONLY, buf, sizeof(buf), false);
-		if (fd == -1)
-			err(EXIT_FAILURE, "opendisk on `%s' failed", rdn);
-		if (ioctl(fd, DIOCGWEDGEINFO, &wi[i]) == -1) {
-			warn("DIOCGWEDGEINFO for `%s' failed", buf);
-		}
-		close(fd);
-	}
-	return wi;
-}
-
 /*
  * Make a pass over the filesystem info in ``mntbuf'' filtering out
  * filesystem types not in ``fsmask'' and possibly re-stating to get
@@ -396,8 +361,7 @@ prthuman(const struct statvfs *sfsp, int
  * Print out status about a filesystem.
  */
 static void
-prtstat(const struct dkwedge_info *dkwp, const struct statvfs *sfsp,
-    int maxwidth)
+prtstat(const struct statvfs *sfsp, int maxwidth)
 {
 	static long blocksize;
 	static int headerlen, timesthrough;
@@ -407,11 +371,11 @@ prtstat(const struct dkwedge_info *dkwp,
 	int64_t used, availblks, inodes;
 	int64_t bavail;
 	char pb[64];
-	char mntfromname[sizeof(sfsp->f_mntfromname)];
+	char mntfromname[sizeof(sfsp->f_mntfromname) + 10];
 
-	if (Wflag && dkwp->dkw_wname[0]) {
+	if (Wflag && sfsp->f_mntfromlabel[0]) {
 		snprintf(mntfromname, sizeof(mntfromname), "NAME=%s",
-		    (const char *)dkwp->dkw_wname);
+		    sfsp->f_mntfromlabel);
 	} else {
 		strlcpy(mntfromname, sfsp->f_mntfromname, sizeof(mntfromname));
 	}

Index: src/distrib/sets/lists/base/shl.mi
diff -u src/distrib/sets/lists/base/shl.mi:1.871 src/distrib/sets/lists/base/shl.mi:1.872
--- src/distrib/sets/lists/base/shl.mi:1.871	Sun Sep 22 14:45:19 2019
+++ src/distrib/sets/lists/base/shl.mi	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.871 2019/09/22 18:45:19 brad Exp $
+# $NetBSD: shl.mi,v 1.872 2019/09/22 22:59:37 christos Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -21,7 +21,7 @@
 ./lib/libblacklist.so.0.0			base-sys-shlib		dynamicroot
 ./lib/libc.so					base-sys-shlib		dynamicroot
 ./lib/libc.so.12				base-sys-shlib		dynamicroot
-./lib/libc.so.12.213				base-sys-shlib		dynamicroot
+./lib/libc.so.12.214				base-sys-shlib		dynamicroot
 ./lib/libcrypt.so				base-sys-shlib		dynamicroot
 ./lib/libcrypt.so.1				base-sys-shlib		dynamicroot
 ./lib/libcrypt.so.1.0				base-sys-shlib		dynamicroot
@@ -245,7 +245,7 @@
 ./usr/lib/libc++.so.1.0				base-sys-shlib		compatfile,libcxx
 ./usr/lib/libc.so				base-sys-shlib		compatfile
 ./usr/lib/libc.so.12				base-sys-shlib		compatfile
-./usr/lib/libc.so.12.213			base-sys-shlib		compatfile
+./usr/lib/libc.so.12.214			base-sys-shlib		compatfile
 ./usr/lib/libcdk.so				base-obsolete		compatfile,obsolete
 ./usr/lib/libcom_err.so				base-krb5-shlib		compatfile,kerberos
 ./usr/lib/libcom_err.so.8			base-krb5-shlib		compatfile,kerberos

Index: src/distrib/sets/lists/debug/shl.mi
diff -u src/distrib/sets/lists/debug/shl.mi:1.228 src/distrib/sets/lists/debug/shl.mi:1.229
--- src/distrib/sets/lists/debug/shl.mi:1.228	Fri Sep  6 07:12:06 2019
+++ src/distrib/sets/lists/debug/shl.mi	Sun Sep 22 18:59:37 2019
@@ -1,8 +1,8 @@
-# $NetBSD: shl.mi,v 1.228 2019/09/06 11:12:06 christos Exp $
+# $NetBSD: shl.mi,v 1.229 2019/09/22 22:59:37 christos Exp $
 ./usr/lib/libbfd_g.a						comp-c-debuglib	debuglib,compatfile,binutils
 ./usr/libdata/debug/lib						base-sys-usr	debug,dynamicroot,compatdir
 ./usr/libdata/debug/lib/libblacklist.so.0.0.debug		comp-sys-debug	debug,dynamicroot
-./usr/libdata/debug/lib/libc.so.12.213.debug			comp-sys-debug	debug,dynamicroot
+./usr/libdata/debug/lib/libc.so.12.214.debug			comp-sys-debug	debug,dynamicroot
 ./usr/libdata/debug/lib/libcrypt.so.1.0.debug			comp-sys-debug	debug,dynamicroot
 ./usr/libdata/debug/lib/libcrypto.so.12.0.debug			comp-sys-debug	debug,dynamicroot,openssl=10
 ./usr/libdata/debug/lib/libcrypto.so.14.0.debug			comp-sys-debug	debug,dynamicroot,openssl=11
@@ -71,7 +71,7 @@
 ./usr/libdata/debug/usr/lib/libbsdmalloc.so.0.0.debug		comp-sys-debug	debug,compatfile
 ./usr/libdata/debug/usr/lib/libbz2.so.1.1.debug			comp-sys-debug	debug,compatfile
 ./usr/libdata/debug/usr/lib/libc++.so.1.0.debug			comp-sys-debug	debug,compatfile,libcxx
-./usr/libdata/debug/usr/lib/libc.so.12.213.debug		comp-sys-debug	debug,compatfile
+./usr/libdata/debug/usr/lib/libc.so.12.214.debug		comp-sys-debug	debug,compatfile
 ./usr/libdata/debug/usr/lib/libcom_err.so.8.0.debug		comp-krb5-debug	debug,compatfile,kerberos
 ./usr/libdata/debug/usr/lib/libcrypt.so.1.0.debug		comp-sys-debug	debug,compatfile
 ./usr/libdata/debug/usr/lib/libcrypto.so.12.0.debug		comp-crypto-debug	debug,compatfile,openssl=10

Index: src/distrib/sets/lists/modules/ad.arm
diff -u src/distrib/sets/lists/modules/ad.arm:1.12 src/distrib/sets/lists/modules/ad.arm:1.13
--- src/distrib/sets/lists/modules/ad.arm:1.12	Sun Feb  3 03:02:58 2019
+++ src/distrib/sets/lists/modules/ad.arm	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-# $NetBSD: ad.arm,v 1.12 2019/02/03 08:02:58 pgoyette Exp $
+# $NetBSD: ad.arm,v 1.13 2019/09/22 22:59:37 christos Exp $
 
 ./@MODULEDIR@/compat_netbsd32			base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32/compat_netbsd32.kmod base-kernel-modules	kmod
@@ -26,6 +26,8 @@
 ./@MODULEDIR@/compat_netbsd32_60/compat_netbsd32_60.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_80		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_80/compat_netbsd32_80.kmod base-kernel-modules	kmod
+./@MODULEDIR@/compat_netbsd32_90		base-kernel-modules	kmod
+./@MODULEDIR@/compat_netbsd32_90/compat_netbsd32_90.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_43		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_43/compat_netbsd32_43.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_mqueue		base-kernel-modules	kmod
Index: src/distrib/sets/lists/modules/ad.mips
diff -u src/distrib/sets/lists/modules/ad.mips:1.12 src/distrib/sets/lists/modules/ad.mips:1.13
--- src/distrib/sets/lists/modules/ad.mips:1.12	Sun Feb  3 03:02:58 2019
+++ src/distrib/sets/lists/modules/ad.mips	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-# $NetBSD: ad.mips,v 1.12 2019/02/03 08:02:58 pgoyette Exp $
+# $NetBSD: ad.mips,v 1.13 2019/09/22 22:59:37 christos Exp $
 ./@MODULEDIR@/compat_netbsd32			base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32/compat_netbsd32.kmod base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32_09		base-kernel-modules	kmod,arch64,nocompatmodules
@@ -25,6 +25,8 @@
 ./@MODULEDIR@/compat_netbsd32_60/compat_netbsd32_60.kmod base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32_80		base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32_80/compat_netbsd32_80.kmod base-kernel-modules	kmod,arch64,nocompatmodules
+./@MODULEDIR@/compat_netbsd32_90		base-kernel-modules	kmod,arch64,nocompatmodules
+./@MODULEDIR@/compat_netbsd32_90/compat_netbsd32_90.kmod base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32_43		base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32_43/compat_netbsd32_43.kmod base-kernel-modules	kmod,arch64,nocompatmodules
 ./@MODULEDIR@/compat_netbsd32_mqueue			base-kernel-modules	kmod,arch64,nocompatmodules

Index: src/distrib/sets/lists/modules/md.amd64
diff -u src/distrib/sets/lists/modules/md.amd64:1.80 src/distrib/sets/lists/modules/md.amd64:1.81
--- src/distrib/sets/lists/modules/md.amd64:1.80	Sun Feb  3 03:02:58 2019
+++ src/distrib/sets/lists/modules/md.amd64	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-# $NetBSD: md.amd64,v 1.80 2019/02/03 08:02:58 pgoyette Exp $
+# $NetBSD: md.amd64,v 1.81 2019/09/22 22:59:37 christos Exp $
 #
 # NOTE that there are two sets of files here:
 # @MODULEDIR@ and amd64-xen
@@ -79,6 +79,8 @@
 ./@MODULEDIR@/compat_netbsd32_60/compat_netbsd32_60.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_80		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_80/compat_netbsd32_80.kmod base-kernel-modules	kmod
+./@MODULEDIR@/compat_netbsd32_90		base-kernel-modules	kmod
+./@MODULEDIR@/compat_netbsd32_90/compat_netbsd32_90.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_43		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_43/compat_netbsd32_43.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_mqueue		base-kernel-modules	kmod

Index: src/distrib/sets/lists/modules/md.sparc64
diff -u src/distrib/sets/lists/modules/md.sparc64:1.7 src/distrib/sets/lists/modules/md.sparc64:1.8
--- src/distrib/sets/lists/modules/md.sparc64:1.7	Sun Feb  3 03:02:58 2019
+++ src/distrib/sets/lists/modules/md.sparc64	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-# $NetBSD: md.sparc64,v 1.7 2019/02/03 08:02:58 pgoyette Exp $
+# $NetBSD: md.sparc64,v 1.8 2019/09/22 22:59:37 christos Exp $
 
 ./@MODULEDIR@/compat_netbsd32			base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32/compat_netbsd32.kmod base-kernel-modules	kmod
@@ -26,6 +26,8 @@
 ./@MODULEDIR@/compat_netbsd32_60/compat_netbsd32_60.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_80		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_80/compat_netbsd32_80.kmod base-kernel-modules	kmod
+./@MODULEDIR@/compat_netbsd32_90		base-kernel-modules	kmod
+./@MODULEDIR@/compat_netbsd32_90/compat_netbsd32_90.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_43		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_43/compat_netbsd32_43.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_netbsd32_mqueue		base-kernel-modules	kmod

Index: src/distrib/sets/lists/modules/mi
diff -u src/distrib/sets/lists/modules/mi:1.125 src/distrib/sets/lists/modules/mi:1.126
--- src/distrib/sets/lists/modules/mi:1.125	Tue Sep 17 03:36:51 2019
+++ src/distrib/sets/lists/modules/mi	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.125 2019/09/17 07:36:51 mrg Exp $
+# $NetBSD: mi,v 1.126 2019/09/22 22:59:37 christos Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -100,6 +100,8 @@
 ./@MODULEDIR@/compat_70/compat_70.kmod		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_80				base-kernel-modules	kmod
 ./@MODULEDIR@/compat_80/compat_80.kmod		base-kernel-modules	kmod
+./@MODULEDIR@/compat_90				base-kernel-modules	kmod
+./@MODULEDIR@/compat_90/compat_90.kmod		base-kernel-modules	kmod
 ./@MODULEDIR@/compat_ossaudio			base-kernel-modules	kmod
 ./@MODULEDIR@/compat_ossaudio/compat_ossaudio.kmod base-kernel-modules	kmod
 ./@MODULEDIR@/compat_crypto_50			base-kernel-modules	kmod

Index: src/lib/libc/shlib_version
diff -u src/lib/libc/shlib_version:1.284 src/lib/libc/shlib_version:1.285
--- src/lib/libc/shlib_version:1.284	Tue Jun  4 04:44:08 2019
+++ src/lib/libc/shlib_version	Sun Sep 22 18:59:37 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: shlib_version,v 1.284 2019/06/04 08:44:08 hannken Exp $
+#	$NetBSD: shlib_version,v 1.285 2019/09/22 22:59:37 christos Exp $
 #	Remember to update distrib/sets/lists/base/shl.* when changing
 #
 # things we wish to do on next major version bump:
@@ -54,4 +54,4 @@
 # - move statfs() to libcompat since we have statvfs()
 # - the syscall stubs for the (obsolete) lfs syscalls should be removed
 major=12
-minor=213
+minor=214

Index: src/lib/libc/compat/gen/Makefile.inc
diff -u src/lib/libc/compat/gen/Makefile.inc:1.17 src/lib/libc/compat/gen/Makefile.inc:1.18
--- src/lib/libc/compat/gen/Makefile.inc:1.17	Thu Jan 16 15:31:42 2014
+++ src/lib/libc/compat/gen/Makefile.inc	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.17 2014/01/16 20:31:42 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.18 2019/09/22 22:59:38 christos Exp $
 
 .PATH: ${COMPATDIR}/gen
 SRCS+=compat_errlist.c compat_fts.c compat___fts13.c compat___fts30.c \
@@ -8,4 +8,5 @@ SRCS+=compat_errlist.c compat_fts.c comp
     compat_times.c compat_timezone.c compat_unvis.c compat_utmpx.c \
     compat_time.c compat_utime.c compat_devname.c compat_alphasort.c \
     compat_getpwent.c compat___fts32.c compat_utmp.c compat___fts50.c \
-    compat___unvis13.c compat_syslog.c compat_alloca.c
+    compat___unvis13.c compat_syslog.c compat_alloca.c \
+    compat___getmntinfo13.c

Index: src/lib/libc/compat/gen/compat_opendir.c
diff -u src/lib/libc/compat/gen/compat_opendir.c:1.1 src/lib/libc/compat/gen/compat_opendir.c:1.2
--- src/lib/libc/compat/gen/compat_opendir.c:1.1	Mon Sep 12 21:44:09 2005
+++ src/lib/libc/compat/gen/compat_opendir.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_opendir.c,v 1.1 2005/09/13 01:44:09 christos Exp $	*/
+/*	$NetBSD: compat_opendir.c,v 1.2 2019/09/22 22:59:38 christos Exp $	*/
 
 #include "namespace.h"
 #include <sys/stat.h>
@@ -7,6 +7,7 @@
 #define __LIBC12_SOURCE__
 #include <dirent.h>
 #include <compat/include/dirent.h>
+#include <compat/sys/statvfs.h>
 
 #ifdef __weak_alias
 __weak_alias(opendir,_opendir)
@@ -20,5 +21,6 @@ __warn_references(__opendir2,
 #endif
 
 #define dirent dirent12
+#define	fstatvfs1 __fstatvfs190
 
 #include "gen/opendir.c"

Index: src/lib/libc/compat/sys/Makefile.inc
diff -u src/lib/libc/compat/sys/Makefile.inc:1.9 src/lib/libc/compat/sys/Makefile.inc:1.10
--- src/lib/libc/compat/sys/Makefile.inc:1.9	Thu Mar 28 22:09:58 2013
+++ src/lib/libc/compat/sys/Makefile.inc	Sun Sep 22 18:59:38 2019
@@ -1,10 +1,10 @@
-#	$NetBSD: Makefile.inc,v 1.9 2013/03/29 02:09:58 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.10 2019/09/22 22:59:38 christos Exp $
 
 .PATH: ${COMPATDIR}/sys
 SRCS+= compat_getdents.c compat_getdirentries.c compat_msync.c \
     compat_ntp_gettime.c compat_sched.c \
     compat_semctl.c compat_sigaltstack.c compat_stat.c compat___stat13.c \
-    compat_statfs.c compat_socket.c compat_getfh.c \
+    compat_statfs.c compat_statvfs.c compat_socket.c compat_getfh.c \
     compat_fhopen.c compat___fhstat30.c compat_fhstatvfs.c compat_fhstatvfs1.c \
     compat_mount.c compat_getrusage.c compat_gettimeofday.c compat_utimes.c \
     compat_wait4.c compat_sigtimedwait.c compat_settimeofday.c compat_timer.c \
@@ -12,7 +12,9 @@ SRCS+= compat_getdents.c compat_getdiren
     compat___stat30.c compat_aio_suspend.c compat_adjtime.c compat_mknod.c \
     compat_mqueue.c compat__lwp_park.c compat_lfs_segwait.c compat_kevent.c \
     compat___ntp_gettime30.c compat___semctl13.c compat___shmctl13.c \
-    compat___msgctl13.c compat___lwp_park50.c
+    compat___msgctl13.c compat___lwp_park50.c \
+    compat___fhstatvfs140.c compat___fhstatvfs40.c
+
 MAN+=	getdirentries.3
 
 .if ${MKLINT} != "no"

Index: src/lib/libc/compat/sys/compat_fhstatvfs.c
diff -u src/lib/libc/compat/sys/compat_fhstatvfs.c:1.3 src/lib/libc/compat/sys/compat_fhstatvfs.c:1.4
--- src/lib/libc/compat/sys/compat_fhstatvfs.c:1.3	Mon Apr 28 16:22:59 2008
+++ src/lib/libc/compat/sys/compat_fhstatvfs.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_fhstatvfs.c,v 1.3 2008/04/28 20:22:59 martin Exp $	*/
+/*	$NetBSD: compat_fhstatvfs.c,v 1.4 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: compat_fhstatvfs.c,v 1.3 2008/04/28 20:22:59 martin Exp $");
+__RCSID("$NetBSD: compat_fhstatvfs.c,v 1.4 2019/09/22 22:59:38 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #define __LIBC12_SOURCE__
@@ -40,23 +40,22 @@ __RCSID("$NetBSD: compat_fhstatvfs.c,v 1
 #include <sys/types.h>
 #include <sys/statvfs.h>
 #include <compat/include/fstypes.h>
+#include <compat/sys/statvfs.h>
 
 __warn_references(fhstatvfs,
-    "warning: reference to compatibility fhstatvfs(); include <sys/mount.h> to generate correct reference")
+    "warning: reference to compatibility fhstatvfs(); include <sys/statvfs.h> to generate correct reference")
 
-#ifdef __weak_alias
-__weak_alias(fhstatvfs, _fhstatvfs)
-#endif
-
-int	 _fhstatvfs(const struct compat_30_fhandle *fhp, struct statvfs *buf);
-int	__fhstatvfs140(const void *fhp, size_t fh_size, struct statvfs *buf,
-	int flags);
+int	fhstatvfs(const struct compat_30_fhandle *fhp, struct statvfs90 *buf);
 
 /*
  * Convert old fhstatvs() call to new calling convention
  */
 int
-_fhstatvfs(const struct compat_30_fhandle *fhp, struct statvfs *buf)
+fhstatvfs(const struct compat_30_fhandle *fhp, struct statvfs90 *buf)
 {
-	return __fhstatvfs140(fhp, FHANDLE30_SIZE, buf, ST_WAIT);
+	struct statvfs sb;
+	int error = __fhstatvfs190(fhp, FHANDLE30_SIZE, &sb, 0);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
 }
Index: src/lib/libc/compat/sys/compat_fhstatvfs1.c
diff -u src/lib/libc/compat/sys/compat_fhstatvfs1.c:1.3 src/lib/libc/compat/sys/compat_fhstatvfs1.c:1.4
--- src/lib/libc/compat/sys/compat_fhstatvfs1.c:1.3	Mon Apr 28 16:22:59 2008
+++ src/lib/libc/compat/sys/compat_fhstatvfs1.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_fhstatvfs1.c,v 1.3 2008/04/28 20:22:59 martin Exp $	*/
+/*	$NetBSD: compat_fhstatvfs1.c,v 1.4 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: compat_fhstatvfs1.c,v 1.3 2008/04/28 20:22:59 martin Exp $");
+__RCSID("$NetBSD: compat_fhstatvfs1.c,v 1.4 2019/09/22 22:59:38 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #define __LIBC12_SOURCE__
@@ -40,20 +40,24 @@ __RCSID("$NetBSD: compat_fhstatvfs1.c,v 
 #include <sys/types.h>
 #include <sys/statvfs.h>
 #include <compat/include/fstypes.h>
+#include <compat/sys/statvfs.h>
 
 __warn_references(fhstatvfs1,
-    "warning: reference to compatibility fhstatvfs1(); include <sys/mount.h> to generate correct reference")
+    "warning: reference to compatibility fhstatvfs1(); include <sys/statvfs.h> to generate correct reference")
 
-int	fhstatvfs1(const struct compat_30_fhandle *fhp, struct statvfs *buf,
-	int flags);
-int	__fhstatvfs140(const void *fhp, size_t fh_size, struct statvfs *buf,
+int	fhstatvfs1(const struct compat_30_fhandle *fhp, struct statvfs90 *buf,
 	int flags);
 
 /*
  * Convert old fhstatvs1() call to new calling convention
  */
 int
-fhstatvfs1(const struct compat_30_fhandle *fhp, struct statvfs *buf, int flags)
+fhstatvfs1(const struct compat_30_fhandle *fhp, struct statvfs90 *buf,
+    int flags)
 {
-	return __fhstatvfs140(fhp, FHANDLE30_SIZE, buf, flags);
+	struct statvfs sb;
+	int error = __fhstatvfs190(fhp, FHANDLE30_SIZE, &sb, flags);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
 }

Index: src/lib/libc/compat/sys/compat_statfs.c
diff -u src/lib/libc/compat/sys/compat_statfs.c:1.7 src/lib/libc/compat/sys/compat_statfs.c:1.8
--- src/lib/libc/compat/sys/compat_statfs.c:1.7	Fri Oct  4 17:07:37 2013
+++ src/lib/libc/compat/sys/compat_statfs.c	Sun Sep 22 18:59:38 2019
@@ -1,7 +1,7 @@
-/*	$NetBSD: compat_statfs.c,v 1.7 2013/10/04 21:07:37 christos Exp $	*/
+/*	$NetBSD: compat_statfs.c,v 1.8 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
- * Copyright (c) 2004 The NetBSD Foundation, Inc.
+ * Copyright (c) 2004, 2019 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: compat_statfs.c,v 1.7 2013/10/04 21:07:37 christos Exp $");
+__RCSID("$NetBSD: compat_statfs.c,v 1.8 2019/09/22 22:59:38 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #define __LIBC12_SOURCE__
@@ -42,6 +42,7 @@ __RCSID("$NetBSD: compat_statfs.c,v 1.7 
 #include <sys/mount.h>
 #include <compat/sys/mount.h>
 #include <compat/include/fstypes.h>
+#include <compat/sys/statvfs.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -135,7 +136,7 @@ __compat_statfs(const char *file, struct
 	struct statvfs nst;
 	int ret;
 
-	if ((ret = statvfs(file, &nst)) == -1)
+	if ((ret = __statvfs90(file, &nst)) == -1)
 		return ret;
 	vfs2fs(ost, &nst);
 	return ret;
@@ -147,22 +148,19 @@ __compat_fstatfs(int f, struct statfs12 
 	struct statvfs nst;
 	int ret;
 
-	if ((ret = fstatvfs(f, &nst)) == -1)
+	if ((ret = __fstatvfs90(f, &nst)) == -1)
 		return ret;
 	vfs2fs(ost, &nst);
 	return ret;
 }
 
-int __fhstatvfs140(const void *fhp, size_t fh_size, struct statvfs *buf,
-    int flags);
-
 int
 __compat_fhstatfs(const struct compat_30_fhandle *fh, struct statfs12 *ost)
 {
 	struct statvfs nst;
 	int ret;
 
-	if ((ret = __fhstatvfs140(fh, FHANDLE30_SIZE, &nst, ST_WAIT)) == -1)
+	if ((ret = __fhstatvfs190(fh, FHANDLE30_SIZE, &nst, ST_WAIT)) == -1)
 		return ret;
 	vfs2fs(ost, &nst);
 	return ret;
@@ -181,7 +179,7 @@ __compat_getfsstat(struct statfs12 *ost,
 	} else
 		nst = NULL;
 
-	if ((ret = getvfsstat(nst, bsize, flags)) == -1)
+	if ((ret = __getvfsstat90(nst, bsize, flags)) == -1)
 		goto done;
 	if (nst)
 		for (i = 0; i < ret; i++)

Index: src/lib/libc/include/namespace.h
diff -u src/lib/libc/include/namespace.h:1.196 src/lib/libc/include/namespace.h:1.197
--- src/lib/libc/include/namespace.h:1.196	Tue Jan 16 20:24:29 2018
+++ src/lib/libc/include/namespace.h	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: namespace.h,v 1.196 2018/01/17 01:24:29 kamil Exp $	*/
+/*	$NetBSD: namespace.h,v 1.197 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997-2004 The NetBSD Foundation, Inc.
@@ -325,7 +325,6 @@
 #define fdopen			_fdopen
 #define fgetln			_fgetln
 #define fgetwln			_fgetwln
-#define fhstatvfs		_fhstatvfs
 #define flockfile		_flockfile
 #define ftrylockfile		_ftrylockfile
 #define funlockfile		_funlockfile
@@ -345,7 +344,6 @@
 #define freeifaddrs		_freeifaddrs
 #define freelocale		_freelocale
 #define fscanf_l		_fscanf_l
-#define fstatvfs		_fstatvfs
 #define ftok			_ftok
 #define ftruncate		_ftruncate
 #define fts_children		_fts_children
@@ -668,7 +666,6 @@
 #define srand48			_srand48
 #define srandom			_srandom
 #define sscanf_l		_sscanf_l
-#define statvfs(a, b)		_statvfs(a, b)
 #define strcasecmp		_strcasecmp
 #define strcoll_l		_strcoll_l
 #define strdup			_strdup

Index: src/lib/libc/sys/Makefile.inc
diff -u src/lib/libc/sys/Makefile.inc:1.241 src/lib/libc/sys/Makefile.inc:1.242
--- src/lib/libc/sys/Makefile.inc:1.241	Sun Sep 15 12:55:00 2019
+++ src/lib/libc/sys/Makefile.inc	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.241 2019/09/15 16:55:00 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.242 2019/09/22 22:59:38 christos Exp $
 #	@(#)Makefile.inc	8.3 (Berkeley) 10/24/94
 
 # sys sources
@@ -106,9 +106,9 @@ ASM=	access.S acct.S \
 		fsetxattr.S fgetxattr.S flistxattr.S fremovexattr.S \
 	faccessat.S fchdir.S fchflags.S fchmod.S fchmodat.S fchown.S \
 		fchownat.S fchroot.S fexecve.S __fhopen40.S __fhstat50.S \
-		__fhstatvfs140.S fktrace.S flock.S fpathconf.S __fstat50.S \
-		fstatvfs1.S fstatat.S  __futimes50.S futimens.S \
-	__getcwd.S __getdents30.S __getfh30.S getvfsstat.S getgroups.S\
+		__fhstatvfs190.S fktrace.S flock.S fpathconf.S __fstat50.S \
+		__fstatvfs190.S fstatat.S  __futimes50.S futimens.S \
+	__getcwd.S __getdents30.S __getfh30.S __getvfsstat90.S getgroups.S\
 		__getitimer50.S __getlogin.S getpeername.S getpgid.S getpgrp.S \
 		getpriority.S getrlimit.S __getrusage50.S getsid.S \
 		getsockname.S getsockopt.S getsockopt2.S __gettimeofday50.S \
@@ -145,7 +145,7 @@ ASM=	access.S acct.S \
 		sigqueueinfo.S \
 		__sigaltstack14.S __sigpending14.S __sigaction_sigtramp.S \
 		____sigtimedwait50.S __socket30.S socketpair.S __stat50.S \
-		statvfs1.S swapctl.S symlink.S symlinkat.S __sysctl.S \
+		__statvfs190.S swapctl.S symlink.S symlinkat.S __sysctl.S \
 	timer_create.S timer_delete.S __timer_gettime50.S timer_getoverrun.S \
 		____semctl50.S __timer_settime50.S \
 	umask.S undelete.S unlink.S unlinkat.S unmount.S __utimes50.S \

Index: src/lib/libc/sys/statvfs.c
diff -u src/lib/libc/sys/statvfs.c:1.6 src/lib/libc/sys/statvfs.c:1.7
--- src/lib/libc/sys/statvfs.c:1.6	Mon Apr 28 16:23:00 2008
+++ src/lib/libc/sys/statvfs.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: statvfs.c,v 1.6 2008/04/28 20:23:00 martin Exp $	*/
+/*	$NetBSD: statvfs.c,v 1.7 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -31,17 +31,11 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: statvfs.c,v 1.6 2008/04/28 20:23:00 martin Exp $");
+__RCSID("$NetBSD: statvfs.c,v 1.7 2019/09/22 22:59:38 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
-#include "namespace.h"
 #include <sys/statvfs.h>
 
-#ifdef __weak_alias
-__weak_alias(statvfs,_statvfs)
-__weak_alias(fstatvfs,_fstatvfs)
-#endif
-
 int
 statvfs(const char *file, struct statvfs *st)
 {
@@ -54,12 +48,8 @@ fstatvfs(int f, struct statvfs *st)
 	return fstatvfs1(f, st, ST_WAIT);
 }
 
-int	__fhstatvfs140(const void *fhp, size_t fh_size, struct statvfs *buf,
-	int flags);
-int	__fhstatvfs40(const void *fh, size_t fh_size, struct statvfs *st);
-
 int
-__fhstatvfs40(const void *fh, size_t fh_size, struct statvfs *st)
+fhstatvfs(const void *fh, size_t fh_size, struct statvfs *st)
 {
-	return __fhstatvfs140(fh, fh_size, st, ST_WAIT);
+	return fhstatvfs1(fh, fh_size, st, ST_WAIT);
 }

Index: src/share/man/man5/statvfs.5
diff -u src/share/man/man5/statvfs.5:1.14 src/share/man/man5/statvfs.5:1.15
--- src/share/man/man5/statvfs.5:1.14	Mon Jun  6 11:02:32 2016
+++ src/share/man/man5/statvfs.5	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-.\"	$NetBSD: statvfs.5,v 1.14 2016/06/06 15:02:32 abhinav Exp $
+.\"	$NetBSD: statvfs.5,v 1.15 2019/09/22 22:59:38 christos Exp $
 .\"
 .\" Copyright (c) 1989, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	@(#)statfs.2	8.5 (Berkeley) 5/24/95
 .\"
-.Dd June 2, 2016
+.Dd September 22, 2019
 .Dt STATVFS 5
 .Os
 .Sh NAME
@@ -53,39 +53,40 @@ typedef struct { int32_t val[2]; } fsid_
 #define VFS_MNAMELEN 1024	/* length of buffer for returned name */
 
 struct statvfs {
-	unsigned long	f_flag;	  /* copy of mount exported flags */
-	unsigned long	f_bsize;  /* system block size */
-	unsigned long	f_frsize; /* system fragment size */
-	unsigned long	f_iosize; /* optimal file system block size */
-
-	/* The following are in units of f_frsize */
-	fsblkcnt_t	f_blocks; /* number of blocks in file system */
-	fsblkcnt_t	f_bfree;  /* free blocks avail in file system */
-	fsblkcnt_t	f_bavail; /* free blocks avail to non-root */
-	fsblkcnt_t	f_bresvd; /* blocks reserved for root */
-
-	fsfilcnt_t	f_files;  /* total file nodes in file system */
-	fsfilcnt_t	f_ffree;  /* free file nodes in file system */
-	fsfilcnt_t	f_favail; /* free file nodes avail to non-root */
-	fsfilcnt_t	f_fresvd; /* file nodes reserved for root */
-
-	uint64_t  f_syncreads;	  /* count of sync reads since mount */
-	uint64_t  f_syncwrites;	  /* count of sync writes since mount */
-
-	uint64_t  f_asyncreads;	  /* count of async reads since mount */
-	uint64_t  f_asyncwrites;  /* count of async writes since mount */
-
-	unsigned long	f_fsid;   /* POSIX compliant file system id */
-	fsid_t          f_fsidx;  /* NetBSD compatible file system id */
-
-	unsigned long	f_namemax;/* maximum filename length */
-	uid_t		f_owner; /* user that mounted the file system */
-
-	uint32_t	f_spare[4]; /* spare space */
-
-	char	f_fstypename[VFS_NAMELEN]; /* fs type name */
-	char	f_mntonname[VFS_MNAMELEN]; /* directory on which mounted */
-	char	f_mntfromname[VFS_MNAMELEN]; /* mounted file system */
+    unsigned long f_flag;	/* copy of mount exported flags */
+    unsigned long f_bsize;	/* system block size */
+    unsigned long f_frsize;	/* system fragment size */
+    unsigned long f_iosize;	/* optimal file system block size */
+
+    /* The following are in units of f_frsize */
+    fsblkcnt_t	f_blocks;	/* number of blocks in file system */
+    fsblkcnt_t	f_bfree;	/* free blocks avail in file system */
+    fsblkcnt_t	f_bavail;	/* free blocks avail to non-root */
+    fsblkcnt_t	f_bresvd;	/* blocks reserved for root */
+
+    fsfilcnt_t	f_files;	/* total file nodes in file system */
+    fsfilcnt_t	f_ffree;	/* free file nodes in file system */
+    fsfilcnt_t	f_favail	/* free file nodes avail to non-root */
+    fsfilcnt_t	f_fresvd;	/* file nodes reserved for root */
+
+    uint64_t	f_syncreads;	/* count of sync reads since mount */
+    uint64_t	f_syncwrites;	/* count of sync writes since mount */
+
+    uint64_t	f_asyncreads;	/* count of async reads since mount */
+    uint64_t	f_asyncwrites;	/* count of async writes since mount */
+
+    unsigned long f_fsid;	/* POSIX compliant file system id */
+    fsid_t	f_fsidx;	/* NetBSD compatible file system id */
+
+    unsigned long f_namemax;	/* maximum filename length */
+    uid_t	f_owner;	/* user that mounted the file system */
+
+    uint64_t	f_spare[4];	/* spare space */
+
+    char f_fstypename[VFS_NAMELEN];	/* fs type name */
+    char f_mntonname[VFS_MNAMELEN];	/* directory on which mounted */
+    char f_mntfromname[VFS_MNAMELEN];	/* mounted file system */
+    char f_mntfromlabel[_VFS_MNAMELEN];	/* disk label name if avail */
 };
 .Ed
 .Pp

Index: src/sys/compat/common/compat_mod.h
diff -u src/sys/compat/common/compat_mod.h:1.5 src/sys/compat/common/compat_mod.h:1.6
--- src/sys/compat/common/compat_mod.h:1.5	Fri May 17 03:37:11 2019
+++ src/sys/compat/common/compat_mod.h	Sun Sep 22 18:59:38 2019
@@ -1,7 +1,7 @@
-/*	$NetBSD: compat_mod.h,v 1.5 2019/05/17 07:37:11 msaitoh Exp $	*/
+/*	$NetBSD: compat_mod.h,v 1.6 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
- * Copyright (c) 2013 The NetBSD Foundation, Inc.
+ * Copyright (c) 2013, 2019 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
@@ -32,6 +32,13 @@
 #ifndef	_COMPAT_MOD_H
 #define	_COMPAT_MOD_H
 
+#ifdef COMPAT_90
+int compat_90_init(void);
+int compat_90_fini(void);
+int vfs_syscalls_90_init(void);
+int vfs_syscalls_90_fini(void);
+#endif
+
 #ifdef COMPAT_80
 int compat_80_init(void);
 int compat_80_fini(void);

Index: src/sys/compat/common/files.common
diff -u src/sys/compat/common/files.common:1.4 src/sys/compat/common/files.common:1.5
--- src/sys/compat/common/files.common:1.4	Fri May 17 03:37:11 2019
+++ src/sys/compat/common/files.common	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: files.common,v 1.4 2019/05/17 07:37:11 msaitoh Exp $
+#	$NetBSD: files.common,v 1.5 2019/09/22 22:59:38 christos Exp $
 
 #
 # Generic utility files, used by various compat options.
@@ -100,16 +100,20 @@ file	compat/common/compat_70_mod.c		comp
 file	compat/common/rtsock_70.c		compat_70
 file	compat/common/uipc_usrreq_70.c		compat_70
 
-# Compatability code for NetBSD 8.0
+# Compatibility code for NetBSD 8.0
 file	compat/common/compat_80_mod.c		compat_80
 file	compat/common/kern_mod_80.c		compat_80
 file	compat/common/if_media_80.c		compat_80
 
+# Compatibility code for NetBSD 9.0
+file	compat/common/compat_90_mod.c		compat_90
+file	compat/common/vfs_syscalls_90.c		compat_90
+
 #
 # Sources for sysv ipc compatibility across the versions.
 #
 
-# Module interface for sysv ipc compatability options
+# Module interface for sysv ipc compatibility options
 
 # Compatibility code for NetBSD 1.0
 file	compat/common/compat_sysv_10_mod.c	compat_10 &

Index: src/sys/compat/common/vfs_syscalls_20.c
diff -u src/sys/compat/common/vfs_syscalls_20.c:1.41 src/sys/compat/common/vfs_syscalls_20.c:1.42
--- src/sys/compat/common/vfs_syscalls_20.c:1.41	Sat Jan 26 21:08:39 2019
+++ src/sys/compat/common/vfs_syscalls_20.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_syscalls_20.c,v 1.41 2019/01/27 02:08:39 pgoyette Exp $	*/
+/*	$NetBSD: vfs_syscalls_20.c,v 1.42 2019/09/22 22:59:38 christos Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_20.c,v 1.41 2019/01/27 02:08:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_20.c,v 1.42 2019/09/22 22:59:38 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -54,17 +54,18 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls
 #include <sys/mount.h>
 #include <sys/proc.h>
 #include <sys/uio.h>
-#include <sys/malloc.h>
 #include <sys/dirent.h>
 #include <sys/sysctl.h>
 #include <sys/syscall.h>
 #include <sys/syscallvar.h>
 #include <sys/syscallargs.h>
 #include <sys/kauth.h>
+#include <sys/vfs_syscalls.h>
 
 #include <compat/common/compat_mod.h>
 
 #include <compat/sys/mount.h>
+#include <compat/sys/statvfs.h>
 
 #define MOUNTNO_NONE	0
 #define MOUNTNO_UFS	1		/* UNIX "Fast" Filesystem */
@@ -99,9 +100,10 @@ static const struct syscall_package vfs_
 };
 
 static int
-vfs2fs(struct statfs12 *bfs, const struct statvfs *fs)
+statvfs_to_statfs12(const void *vfs, void *vbfs, size_t len)
 {
-	struct statfs12 ofs;
+	struct statfs12 ofs, *bfs = vbfs;
+	const struct statvfs *fs = vfs;
 	int i;
 	ofs.f_type = 0;
 	ofs.f_oflags = (short)fs->f_flag;
@@ -161,14 +163,14 @@ compat_20_sys_statfs(struct lwp *l, cons
 
 	mp = vp->v_mount;
 
-	sbuf = malloc(sizeof(*sbuf), M_TEMP, M_WAITOK);
+	sbuf = STATVFSBUF_GET();
 	if ((error = dostatvfs(mp, sbuf, l, 0, 1)) != 0)
 		goto done;
 
-	error = vfs2fs(SCARG(uap, buf), sbuf);
+	error = statvfs_to_statfs12(sbuf, SCARG(uap, buf), 0);
 done:
 	vrele(vp);
-	free(sbuf, M_TEMP);
+	STATVFSBUF_PUT(sbuf);
 	return error;
 }
 
@@ -192,13 +194,13 @@ compat_20_sys_fstatfs(struct lwp *l, con
 	if ((error = fd_getvnode(SCARG(uap, fd), &fp)) != 0)
 		return (error);
 	mp = fp->f_vnode->v_mount;
-	sbuf = malloc(sizeof(*sbuf), M_TEMP, M_WAITOK);
+	sbuf = STATVFSBUF_GET();
 	if ((error = dostatvfs(mp, sbuf, l, 0, 1)) != 0)
 		goto out;
-	error = vfs2fs(SCARG(uap, buf), sbuf);
+	error = statvfs_to_statfs12(sbuf, SCARG(uap, buf), 0);
  out:
 	fd_putfile(SCARG(uap, fd));
-	free(sbuf, M_TEMP);
+	STATVFSBUF_PUT(sbuf);
 	return error;
 }
 
@@ -214,51 +216,9 @@ compat_20_sys_getfsstat(struct lwp *l, c
 		syscallarg(long) bufsize;
 		syscallarg(int) flags;
 	} */
-	int root = 0;
-	mount_iterator_t *iter;
-	struct mount *mp;
-	struct statvfs *sbuf;
-	struct statfs12 *sfsp;
-	size_t count, maxcount;
-	int error = 0;
-
-	sbuf = malloc(sizeof(*sbuf), M_TEMP, M_WAITOK);
-	maxcount = (size_t)SCARG(uap, bufsize) / sizeof(struct statfs12);
-	sfsp = SCARG(uap, buf);
-	count = 0;
-	mountlist_iterator_init(&iter);
-	while ((mp = mountlist_iterator_next(iter)) != NULL) {
-		if (sfsp && count < maxcount) {
-			error = dostatvfs(mp, sbuf, l, SCARG(uap, flags), 0);
-			if (error) 
-				continue;
-			error = vfs2fs(sfsp, sbuf);
-			if (error)
-				goto out;
-			sfsp++;
-			root |= strcmp(sbuf->f_mntonname, "/") == 0;
-		}
-		count++;
-	}
-	if (root == 0 && l->l_proc->p_cwdi->cwdi_rdir) {
-		/*
-		 * fake a root entry
-		 */
-		if ((error = dostatvfs(l->l_proc->p_cwdi->cwdi_rdir->v_mount,
-				       sbuf, l, SCARG(uap, flags), 1)) != 0)
-			goto out;
-		if (sfsp)
-			error = vfs2fs(sfsp, sbuf);
-		count++;
-	}
-	if (sfsp && count > maxcount)
-		*retval = maxcount;
-	else
-		*retval = count;
-out:
-	mountlist_iterator_destroy(iter);
-	free(sbuf, M_TEMP);
-	return error;
+	return do_sys_getvfsstat(l, SCARG(uap, buf), SCARG(uap, bufsize),
+	    SCARG(uap, flags), statvfs_to_statfs12,
+	    sizeof(struct statvfs90), retval);
 }
 
 int
@@ -290,13 +250,13 @@ compat_20_sys_fhstatfs(struct lwp *l, co
 		return (error);
 	mp = vp->v_mount;
 	VOP_UNLOCK(vp);
-	sbuf = malloc(sizeof(*sbuf), M_TEMP, M_WAITOK);
+	sbuf = STATVFSBUF_GET();
 	if ((error = VFS_STATVFS(mp, sbuf)) != 0)
 		goto out;
-	error = vfs2fs(SCARG(uap, buf), sbuf);
+	error = statvfs_to_statfs12(sbuf, SCARG(uap, buf), 0);
 out:
 	vrele(vp);
-	free(sbuf, M_TEMP);
+	STATVFSBUF_PUT(sbuf);
 	return error;
 }
 

Index: src/sys/compat/common/vfs_syscalls_30.c
diff -u src/sys/compat/common/vfs_syscalls_30.c:1.38 src/sys/compat/common/vfs_syscalls_30.c:1.39
--- src/sys/compat/common/vfs_syscalls_30.c:1.38	Sat Jan 26 21:08:39 2019
+++ src/sys/compat/common/vfs_syscalls_30.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_syscalls_30.c,v 1.38 2019/01/27 02:08:39 pgoyette Exp $	*/
+/*	$NetBSD: vfs_syscalls_30.c,v 1.39 2019/09/22 22:59:38 christos Exp $	*/
 
 /*-
  * Copyright (c) 2005, 2008 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_30.c,v 1.38 2019/01/27 02:08:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_30.c,v 1.39 2019/09/22 22:59:38 christos Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -57,9 +57,11 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls
 
 #include <compat/common/compat_mod.h>
 #include <compat/common/compat_util.h>
+
 #include <compat/sys/stat.h>
 #include <compat/sys/dirent.h>
 #include <compat/sys/mount.h>
+#include <compat/sys/statvfs.h>
 
 static void cvtstat(struct stat13 *, const struct stat *);
 
@@ -441,21 +443,25 @@ compat_30_sys___fhstat30(struct lwp *l,
 /* ARGSUSED */
 int
 compat_30_sys_fhstatvfs1(struct lwp *l,
-    const struct compat_30_sys_fhstatvfs1_args *uap_30, register_t *retval)
+    const struct compat_30_sys_fhstatvfs1_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(const fhandle_t *) fhp;
-		syscallarg(struct statvfs *) buf;
+		syscallarg(struct statvfs90 *) buf;
 		syscallarg(int)	flags;
 	} */
-	struct sys___fhstatvfs140_args uap;
+	struct statvfs *sb = STATVFSBUF_GET();
+	int error = do_fhstatvfs(l, SCARG(uap, fhp), FHANDLE_SIZE_COMPAT,
+	    sb, SCARG(uap, flags));
+
+	if (!error) {
+		error = statvfs_to_statvfs90_copy(sb, SCARG(uap, buf),
+		    sizeof(struct statvfs90));
+	}
 
-	SCARG(&uap, fhp) = SCARG(uap_30, fhp);
-	SCARG(&uap, fh_size) = FHANDLE_SIZE_COMPAT;
-	SCARG(&uap, buf) = SCARG(uap_30, buf);
-	SCARG(&uap, flags) = SCARG(uap_30, flags);
+	STATVFSBUF_PUT(sb);
 
-	return sys___fhstatvfs140(l, &uap, retval);
+	return error;
 }
 
 int

Index: src/sys/compat/netbsd32/files.netbsd32
diff -u src/sys/compat/netbsd32/files.netbsd32:1.48 src/sys/compat/netbsd32/files.netbsd32:1.49
--- src/sys/compat/netbsd32/files.netbsd32:1.48	Tue Aug 20 10:12:33 2019
+++ src/sys/compat/netbsd32/files.netbsd32	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: files.netbsd32,v 1.48 2019/08/20 14:12:33 christos Exp $
+#	$NetBSD: files.netbsd32,v 1.49 2019/09/22 22:59:38 christos Exp $
 #
 # config file description for machine-independent netbsd32 compat code.
 # included by ports that need it.
@@ -59,3 +59,4 @@ file	compat/netbsd32/netbsd32_compat_50_
 						(sysvmsg | sysvsem | sysvshm)
 file	compat/netbsd32/netbsd32_compat_60.c	compat_netbsd32 & compat_60
 file	compat/netbsd32/netbsd32_compat_80.c	compat_netbsd32 & compat_80
+file	compat/netbsd32/netbsd32_compat_90.c	compat_netbsd32 & compat_90

Index: src/sys/compat/netbsd32/netbsd32.h
diff -u src/sys/compat/netbsd32/netbsd32.h:1.123 src/sys/compat/netbsd32/netbsd32.h:1.124
--- src/sys/compat/netbsd32/netbsd32.h:1.123	Wed Feb 20 01:04:28 2019
+++ src/sys/compat/netbsd32/netbsd32.h	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32.h,v 1.123 2019/02/20 06:04:28 mrg Exp $	*/
+/*	$NetBSD: netbsd32.h,v 1.124 2019/09/22 22:59:38 christos Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001, 2008, 2015 Matthew R. Green
@@ -852,6 +852,34 @@ struct netbsd32_stat {
 };
 
 /* from <sys/statvfs.h> */
+typedef netbsd32_pointer_t netbsd32_statvfs90p_t;
+struct netbsd32_statvfs90 {
+	netbsd32_u_long	f_flag;		/* copy of mount exported flags */
+	netbsd32_u_long	f_bsize;	/* system block size */
+	netbsd32_u_long	f_frsize;	/* system fragment size */
+	netbsd32_u_long	f_iosize;	/* optimal file system block size */
+	netbsd32_uint64	f_blocks;	/* number of blocks in file system */
+	netbsd32_uint64	f_bfree;	/* free blocks avail in file system */
+	netbsd32_uint64	f_bavail;	/* free blocks avail to non-root */
+	netbsd32_uint64	f_bresvd;	/* blocks reserved for root */
+	netbsd32_uint64	f_files;	/* total file nodes in file system */
+	netbsd32_uint64	f_ffree;	/* free file nodes in file system */
+	netbsd32_uint64	f_favail;	/* free file nodes avail to non-root */
+	netbsd32_uint64	f_fresvd;	/* file nodes reserved for root */
+	netbsd32_uint64	f_syncreads;	/* count of sync reads since mount */
+	netbsd32_uint64	f_syncwrites;	/* count of sync writes since mount */
+	netbsd32_uint64	f_asyncreads;	/* count of async reads since mount */
+	netbsd32_uint64	f_asyncwrites;	/* count of async writes since mount */
+	fsid_t		f_fsidx;	/* NetBSD compatible fsid */
+	netbsd32_u_long	f_fsid;		/* Posix compatible fsid */
+	netbsd32_u_long	f_namemax;	/* maximum filename length */
+	uid_t		f_owner;	/* user that mounted the file system */
+	uint32_t	f_spare[4];	/* spare space */
+	char	f_fstypename[_VFS_NAMELEN]; /* fs type name */
+	char	f_mntonname[_VFS_MNAMELEN];  /* directory on which mounted */
+	char	f_mntfromname[_VFS_MNAMELEN];  /* mounted file system */
+};
+
 typedef netbsd32_pointer_t netbsd32_statvfsp_t;
 struct netbsd32_statvfs {
 	netbsd32_u_long	f_flag;		/* copy of mount exported flags */
@@ -874,10 +902,11 @@ struct netbsd32_statvfs {
 	netbsd32_u_long	f_fsid;		/* Posix compatible fsid */
 	netbsd32_u_long	f_namemax;	/* maximum filename length */
 	uid_t		f_owner;	/* user that mounted the file system */
-	uint32_t	f_spare[4];	/* spare space */
+	uint64_t	f_spare[4];	/* spare space */
 	char	f_fstypename[_VFS_NAMELEN]; /* fs type name */
 	char	f_mntonname[_VFS_MNAMELEN];  /* directory on which mounted */
 	char	f_mntfromname[_VFS_MNAMELEN];  /* mounted file system */
+	char	f_mntfromlabel[_VFS_MNAMELEN];  /* disk label name if available */
 };
 
 /* from <sys/timex.h> */

Index: src/sys/compat/netbsd32/netbsd32_conv.h
diff -u src/sys/compat/netbsd32/netbsd32_conv.h:1.38 src/sys/compat/netbsd32/netbsd32_conv.h:1.39
--- src/sys/compat/netbsd32/netbsd32_conv.h:1.38	Wed Feb 20 22:37:19 2019
+++ src/sys/compat/netbsd32/netbsd32_conv.h	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_conv.h,v 1.38 2019/02/21 03:37:19 mrg Exp $	*/
+/*	$NetBSD: netbsd32_conv.h,v 1.39 2019/09/22 22:59:38 christos Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -307,7 +307,7 @@ netbsd32_from_mmsghdr(struct netbsd32_mm
 }
 
 static __inline void
-netbsd32_from_statvfs(const struct statvfs *sbp, struct netbsd32_statvfs *sb32p)
+netbsd32_from_statvfs90(const struct statvfs *sbp, struct netbsd32_statvfs90 *sb32p)
 {
 	sb32p->f_flag = sbp->f_flag;
 	sb32p->f_bsize = (netbsd32_u_long)sbp->f_bsize;
@@ -347,6 +347,47 @@ netbsd32_from_statvfs(const struct statv
 }
 
 static __inline void
+netbsd32_from_statvfs(const struct statvfs *sbp, struct netbsd32_statvfs *sb32p)
+{
+	sb32p->f_flag = sbp->f_flag;
+	sb32p->f_bsize = (netbsd32_u_long)sbp->f_bsize;
+	sb32p->f_frsize = (netbsd32_u_long)sbp->f_frsize;
+	sb32p->f_iosize = (netbsd32_u_long)sbp->f_iosize;
+	sb32p->f_blocks = sbp->f_blocks;
+	sb32p->f_bfree = sbp->f_bfree;
+	sb32p->f_bavail = sbp->f_bavail;
+	sb32p->f_bresvd = sbp->f_bresvd;
+	sb32p->f_files = sbp->f_files;
+	sb32p->f_ffree = sbp->f_ffree;
+	sb32p->f_favail = sbp->f_favail;
+	sb32p->f_fresvd = sbp->f_fresvd;
+	sb32p->f_syncreads = sbp->f_syncreads;
+	sb32p->f_syncwrites = sbp->f_syncwrites;
+	sb32p->f_asyncreads = sbp->f_asyncreads;
+	sb32p->f_asyncwrites = sbp->f_asyncwrites;
+	sb32p->f_fsidx = sbp->f_fsidx;
+	sb32p->f_fsid = (netbsd32_u_long)sbp->f_fsid;
+	sb32p->f_namemax = (netbsd32_u_long)sbp->f_namemax;
+	sb32p->f_owner = sbp->f_owner;
+	sb32p->f_spare[0] = 0;
+	sb32p->f_spare[1] = 0;
+	sb32p->f_spare[2] = 0;
+	sb32p->f_spare[3] = 0;
+#if 1
+	/* May as well do the whole batch in one go */
+	memcpy(sb32p->f_fstypename, sbp->f_fstypename,
+	    sizeof(sb32p->f_fstypename) + sizeof(sb32p->f_mntonname) +
+	    sizeof(sb32p->f_mntfromname) + sizeof(sb32p->f_mntfromlabel));
+#else
+	/* If we want to be careful */
+	memcpy(sb32p->f_fstypename, sbp->f_fstypename, sizeof(sb32p->f_fstypename));
+	memcpy(sb32p->f_mntonname, sbp->f_mntonname, sizeof(sb32p->f_mntonname));
+	memcpy(sb32p->f_mntfromname, sbp->f_mntfromname, sizeof(sb32p->f_mntfromname));
+	memcpy(sb32p->f_mntfromlabel, sbp->f_mntfromlabel, sizeof(sb32p->f_mntfromlabel));
+#endif
+}
+
+static __inline void
 netbsd32_from_timex(const struct timex *txp, struct netbsd32_timex *tx32p)
 {
 

Index: src/sys/compat/netbsd32/netbsd32_fs.c
diff -u src/sys/compat/netbsd32/netbsd32_fs.c:1.83 src/sys/compat/netbsd32/netbsd32_fs.c:1.84
--- src/sys/compat/netbsd32/netbsd32_fs.c:1.83	Sat Sep 21 02:56:51 2019
+++ src/sys/compat/netbsd32/netbsd32_fs.c	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_fs.c,v 1.83 2019/09/21 06:56:51 maxv Exp $	*/
+/*	$NetBSD: netbsd32_fs.c,v 1.84 2019/09/22 22:59:38 christos Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.83 2019/09/21 06:56:51 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.84 2019/09/22 22:59:38 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -400,7 +400,8 @@ netbsd32_copyout_statvfs(const void *kp,
 }
 
 int
-netbsd32_statvfs1(struct lwp *l, const struct netbsd32_statvfs1_args *uap, register_t *retval)
+netbsd32___statvfs190(struct lwp *l,
+    const struct netbsd32___statvfs190_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(const netbsd32_charp) path;
@@ -419,7 +420,8 @@ netbsd32_statvfs1(struct lwp *l, const s
 }
 
 int
-netbsd32_fstatvfs1(struct lwp *l, const struct netbsd32_fstatvfs1_args *uap, register_t *retval)
+netbsd32___fstatvfs190(struct lwp *l,
+    const struct netbsd32___fstatvfs190_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(int) fd;
@@ -438,7 +440,8 @@ netbsd32_fstatvfs1(struct lwp *l, const 
 }
 
 int
-netbsd32_getvfsstat(struct lwp *l, const struct netbsd32_getvfsstat_args *uap, register_t *retval)
+netbsd32___getvfsstat90(struct lwp *l,
+    const struct netbsd32___getvfsstat90_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(netbsd32_statvfsp_t) buf;
@@ -452,7 +455,8 @@ netbsd32_getvfsstat(struct lwp *l, const
 }
 
 int
-netbsd32___fhstatvfs140(struct lwp *l, const struct netbsd32___fhstatvfs140_args *uap, register_t *retval)
+netbsd32___fhstatvfs190(struct lwp *l,
+    const struct netbsd32___fhstatvfs190_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(const netbsd32_pointer_t) fhp;

Index: src/sys/compat/netbsd32/syscalls.conf
diff -u src/sys/compat/netbsd32/syscalls.conf:1.16 src/sys/compat/netbsd32/syscalls.conf:1.17
--- src/sys/compat/netbsd32/syscalls.conf:1.16	Sat Jan 26 21:08:40 2019
+++ src/sys/compat/netbsd32/syscalls.conf	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: syscalls.conf,v 1.16 2019/01/27 02:08:40 pgoyette Exp $
+#	$NetBSD: syscalls.conf,v 1.17 2019/09/22 22:59:38 christos Exp $
 
 sysnames="netbsd32_syscalls.c"
 sysnumhdr="netbsd32_syscall.h"
@@ -6,7 +6,7 @@ syssw="netbsd32_sysent.c"
 sysarghdr="netbsd32_syscallargs.h"
 systrace="netbsd32_systrace_args.c"
 sysautoload="netbsd32_syscalls_autoload.c"
-compatopts="compat_43 compat_09 compat_10 compat_11 compat_12 compat_13 compat_14 compat_15 compat_16 compat_20 compat_30 compat_40 compat_50 compat_60 compat_70 compat_80"
+compatopts="compat_43 compat_09 compat_10 compat_11 compat_12 compat_13 compat_14 compat_15 compat_16 compat_20 compat_30 compat_40 compat_50 compat_60 compat_70 compat_80 compat_90"
 libcompatopts=""
 
 switchname="netbsd32_sysent"

Index: src/sys/compat/netbsd32/syscalls.master
diff -u src/sys/compat/netbsd32/syscalls.master:1.127 src/sys/compat/netbsd32/syscalls.master:1.128
--- src/sys/compat/netbsd32/syscalls.master:1.127	Tue Jun 18 12:23:24 2019
+++ src/sys/compat/netbsd32/syscalls.master	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.127 2019/06/18 16:23:24 christos Exp $
+	$NetBSD: syscalls.master,v 1.128 2019/09/22 22:59:38 christos Exp $
 
 ;	from: NetBSD: syscalls.master,v 1.81 1998/07/05 08:49:50 jonathan Exp
 ;	@(#)syscalls.master	8.2 (Berkeley) 1/13/94
@@ -803,15 +803,18 @@
 			    netbsd32_off_t start, netbsd32_off_t length); }
 355	STD		{ int|netbsd32||uuidgen(netbsd32_uuidp_t store, \
 			    int count); }
-356	STD		{ int|netbsd32||getvfsstat(netbsd32_statvfsp_t buf, \
+356	COMPAT_90 MODULAR compat_netbsd32_90 \
+			{ int|netbsd32||getvfsstat(netbsd32_statvfs90p_t buf, \
 			    netbsd32_size_t bufsize, int flags); }
-357	STD		{ int|netbsd32||statvfs1(netbsd32_charp path, \
-			    netbsd32_statvfsp_t buf, int flags); }
-358	STD		{ int|netbsd32||fstatvfs1(int fd, \
-			    netbsd32_statvfsp_t buf, int flags); }
+357	COMPAT_90 MODULAR compat_netbsd32_90 \
+			{ int|netbsd32||statvfs1(netbsd32_charp path, \
+			    netbsd32_statvfs90p_t buf, int flags); }
+358	COMPAT_90 MODULAR compat_netbsd32_90 \
+			{ int|netbsd32||fstatvfs1(int fd, \
+			    netbsd32_statvfs90p_t buf, int flags); }
 359	COMPAT_30 MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||fhstatvfs1(netbsd32_fhandlep_t fhp, \
-			    netbsd32_statvfsp_t buf, int flags); }
+			    netbsd32_statvfs90p_t buf, int flags); }
 360	STD		{ int|netbsd32||extattrctl(netbsd32_charp path, \
 			    int cmd, netbsd32_charp filename, \
 			    int attrnamespace, netbsd32_charp attrname); }
@@ -914,9 +917,10 @@
 			    netbsd32_pointer_t fhp, netbsd32_size_tp fh_size); }
 396	STD		{ int|netbsd32|40|fhopen(netbsd32_pointer_t fhp, \
 			    netbsd32_size_t fh_size, int flags); }
-397	STD		{ int|netbsd32|40|fhstatvfs1(	\
+397	COMPAT_90 MODULAR compat_netbsd90 \
+			{ int|netbsd32||fhstatvfs1(	\
 			    netbsd32_pointer_t fhp, netbsd32_size_t fh_size,\
-			    netbsd32_statvfsp_t buf, int flags); }
+			    netbsd32_statvfs90p_t buf, int flags); }
 398	COMPAT_50 MODULAR compat_netbsd32_50	\
 			{ int|netbsd32|40|fhstat(	\
 			    netbsd32_pointer_t fhp, netbsd32_size_t fh_size,\
@@ -1163,3 +1167,13 @@
 			    netbsd32_wrusagep_t wru, netbsd32_siginfop_t info); }
 482	STD		{ int|netbsd32||clock_getcpuclockid2(idtype_t idtype, \
 			    id_t id, netbsd32_clockidp_t clock_id); }
+483	STD 		{ int|netbsd32|90|getvfsstat( \
+			    netbsd32_statvfsp_t buf, \
+			    size_t bufsize, int flags); }
+484	STD 		{ int|netbsd32|90|statvfs1(netbsd32_charp path, \
+			    netbsd32_statvfsp_t buf, int flags); }
+485	STD 		{ int|netbsd32|90|fstatvfs1(int fd, \
+			    netbsd32_statvfsp_t buf, int flags); }
+486	STD 		{ int|netbsd32|90|fhstatvfs1(netbsd32_voidp fhp, \
+			    size_t fh_size, netbsd32_statvfsp_t buf, \
+			    int flags); }

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.1239 src/sys/conf/files:1.1240
--- src/sys/conf/files:1.1239	Sat Sep 14 02:57:52 2019
+++ src/sys/conf/files	Sun Sep 22 18:59:38 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.1239 2019/09/14 06:57:52 maxv Exp $
+#	$NetBSD: files,v 1.1240 2019/09/22 22:59:38 christos Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20171118
@@ -141,7 +141,8 @@ defflag opt_todr.h		TODR_DEBUG
 # compatibility options
 #
 defflag opt_compat_netbsd.h	COMPAT_NETBSD
-defflag	opt_compat_netbsd.h	COMPAT_80: COMPAT_NETBSD
+defflag	opt_compat_netbsd.h	COMPAT_90: COMPAT_NETBSD
+defflag	opt_compat_netbsd.h	COMPAT_80: COMPAT_90, COMPAT_NETBSD
 defflag	opt_compat_netbsd.h	COMPAT_70: COMPAT_80, COMPAT_NETBSD
 defflag	opt_compat_netbsd.h	COMPAT_60: COMPAT_70, COMPAT_NETBSD
 defflag	opt_compat_netbsd.h	COMPAT_50: COMPAT_60, COMPAT_NETBSD

Index: src/sys/kern/init_sysent.c
diff -u src/sys/kern/init_sysent.c:1.323 src/sys/kern/init_sysent.c:1.324
--- src/sys/kern/init_sysent.c:1.323	Sat Jan 26 21:08:43 2019
+++ src/sys/kern/init_sysent.c	Sun Sep 22 18:59:39 2019
@@ -1,18 +1,20 @@
-/* $NetBSD: init_sysent.c,v 1.323 2019/01/27 02:08:43 pgoyette Exp $ */
+/* $NetBSD: init_sysent.c,v 1.324 2019/09/22 22:59:39 christos Exp $ */
 
 /*
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD: syscalls.master,v 1.293 2018/07/31 13:00:13 rjs Exp
+ * created from	NetBSD: syscalls.master,v 1.295 2019/06/18 16:06:45 christos Exp
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_sysent.c,v 1.323 2019/01/27 02:08:43 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_sysent.c,v 1.324 2019/09/22 22:59:39 christos Exp $");
 
+#ifdef _KERNEL_OPT
 #include "opt_modular.h"
 #include "opt_ntp.h"
 #include "opt_sysv.h"
+#endif
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/signal.h>
@@ -112,6 +114,18 @@ __KERNEL_RCSID(0, "$NetBSD: init_sysent.
 #define	compat_70(func) sys_nosys
 #endif
 
+#ifdef COMPAT_80
+#define	compat_80(func) __CONCAT(compat_80_,func)
+#else
+#define	compat_80(func) sys_nosys
+#endif
+
+#ifdef COMPAT_90
+#define	compat_90(func) __CONCAT(compat_90_,func)
+#else
+#define	compat_90(func) sys_nosys
+#endif
+
 #define	s(type)	sizeof(type)
 #define	n(type)	(sizeof(type)/sizeof (register_t))
 #define	ns(type)	.sy_narg = n(type), .sy_argsize = s(type)
@@ -1698,20 +1712,20 @@ struct sysent sysent[] = {
 		.sy_call = (sy_call_t *)sys_uuidgen
 	},		/* 355 = uuidgen */
 	{
-		ns(struct sys_getvfsstat_args),
+		ns(struct compat_90_sys_getvfsstat_args),
 		.sy_flags = SYCALL_ARG_PTR,
-		.sy_call = (sy_call_t *)sys_getvfsstat
-	},		/* 356 = getvfsstat */
+		.sy_call = (sy_call_t *)sys_nomodule
+	},		/* 356 = compat_90_getvfsstat */
 	{
-		ns(struct sys_statvfs1_args),
+		ns(struct compat_90_sys_statvfs1_args),
 		.sy_flags = SYCALL_ARG_PTR,
-		.sy_call = (sy_call_t *)sys_statvfs1
-	},		/* 357 = statvfs1 */
+		.sy_call = (sy_call_t *)sys_nomodule
+	},		/* 357 = compat_90_statvfs1 */
 	{
-		ns(struct sys_fstatvfs1_args),
+		ns(struct compat_90_sys_fstatvfs1_args),
 		.sy_flags = SYCALL_ARG_PTR,
-		.sy_call = (sy_call_t *)sys_fstatvfs1
-	},		/* 358 = fstatvfs1 */
+		.sy_call = (sy_call_t *)sys_nomodule
+	},		/* 358 = compat_90_fstatvfs1 */
 	{
 		ns(struct compat_30_sys_fhstatvfs1_args),
 		.sy_flags = SYCALL_ARG_PTR,
@@ -1900,10 +1914,10 @@ struct sysent sysent[] = {
 		.sy_call = (sy_call_t *)sys___fhopen40
 	},		/* 396 = __fhopen40 */
 	{
-		ns(struct sys___fhstatvfs140_args),
+		ns(struct compat_90_sys_fhstatvfs1_args),
 		.sy_flags = SYCALL_ARG_PTR,
-		.sy_call = (sy_call_t *)sys___fhstatvfs140
-	},		/* 397 = __fhstatvfs140 */
+		.sy_call = (sy_call_t *)sys_nomodule
+	},		/* 397 = compat_90_fhstatvfs1 */
 	{
 		ns(struct compat_50_sys___fhstat40_args),
 		.sy_flags = SYCALL_ARG_PTR,
@@ -2325,17 +2339,25 @@ struct sysent sysent[] = {
 		.sy_call = (sy_call_t *)sys_clock_getcpuclockid2
 	},		/* 482 = clock_getcpuclockid2 */
 	{
-		.sy_call = sys_nosys,
-	},		/* 483 = filler */
+		ns(struct sys___getvfsstat90_args),
+		.sy_flags = SYCALL_ARG_PTR,
+		.sy_call = (sy_call_t *)sys___getvfsstat90
+	},		/* 483 = __getvfsstat90 */
 	{
-		.sy_call = sys_nosys,
-	},		/* 484 = filler */
+		ns(struct sys___statvfs190_args),
+		.sy_flags = SYCALL_ARG_PTR,
+		.sy_call = (sy_call_t *)sys___statvfs190
+	},		/* 484 = __statvfs190 */
 	{
-		.sy_call = sys_nosys,
-	},		/* 485 = filler */
+		ns(struct sys___fstatvfs190_args),
+		.sy_flags = SYCALL_ARG_PTR,
+		.sy_call = (sy_call_t *)sys___fstatvfs190
+	},		/* 485 = __fstatvfs190 */
 	{
-		.sy_call = sys_nosys,
-	},		/* 486 = filler */
+		ns(struct sys___fhstatvfs190_args),
+		.sy_flags = SYCALL_ARG_PTR,
+		.sy_call = (sy_call_t *)sys___fhstatvfs190
+	},		/* 486 = __fhstatvfs190 */
 	{
 		.sy_call = sys_nosys,
 	},		/* 487 = filler */
@@ -2419,14 +2441,14 @@ const uint32_t sysent_nomodbits[] = {
 	0x23f80083,	/* syscalls  64- 95 */
 	0x2437f0ea,	/* syscalls  96-127 */
 	0x7877f406,	/* syscalls 128-159 */
-	0x7f000e1e,	/* syscalls 160-191 */
+	0x7f008e1e,	/* syscalls 160-191 */
 	0xf0044010,	/* syscalls 192-223 */
 	0xff9167ff,	/* syscalls 224-255 */
 	0x01d107ff,	/* syscalls 256-287 */
 	0x0000fc88,	/* syscalls 288-319 */
-	0x02000001,	/* syscalls 320-351 */
-	0x00600080,	/* syscalls 352-383 */
-	0x007fc338,	/* syscalls 384-415 */
+	0x0200fc01,	/* syscalls 320-351 */
+	0x006000f0,	/* syscalls 352-383 */
+	0x007fe338,	/* syscalls 384-415 */
 	0x1c470040,	/* syscalls 416-447 */
 	0x00000000,	/* syscalls 448-479 */
 	0x00000000,	/* syscalls 480-511 */

Index: src/sys/kern/syscalls.conf
diff -u src/sys/kern/syscalls.conf:1.29 src/sys/kern/syscalls.conf:1.30
--- src/sys/kern/syscalls.conf:1.29	Sat Jan 26 21:08:43 2019
+++ src/sys/kern/syscalls.conf	Sun Sep 22 18:59:39 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: syscalls.conf,v 1.29 2019/01/27 02:08:43 pgoyette Exp $
+#	$NetBSD: syscalls.conf,v 1.30 2019/09/22 22:59:39 christos Exp $
 
 sysnames="syscalls.c"
 sysnumhdr="../sys/syscall.h"
@@ -11,7 +11,7 @@ sysalign=1
 rumpcalls="../rump/librump/rumpkern/rump_syscalls.c"
 rumpcallshdr="../rump/include/rump/rump_syscalls.h"
 rumpsysmap="../rump/rump.sysmap"
-compatopts="compat_43 compat_09 compat_10 compat_11 compat_12 compat_13 compat_14 compat_15 compat_16 compat_20 compat_30 compat_40 compat_50 compat_60 compat_70 compat_80"
+compatopts="compat_43 compat_09 compat_10 compat_11 compat_12 compat_13 compat_14 compat_15 compat_16 compat_20 compat_30 compat_40 compat_50 compat_60 compat_70 compat_80 compat_90"
 libcompatopts=""
 
 switchname="sysent"

Index: src/sys/kern/syscalls.master
diff -u src/sys/kern/syscalls.master:1.295 src/sys/kern/syscalls.master:1.296
--- src/sys/kern/syscalls.master:1.295	Tue Jun 18 12:06:45 2019
+++ src/sys/kern/syscalls.master	Sun Sep 22 18:59:39 2019
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.295 2019/06/18 16:06:45 christos Exp $
+	$NetBSD: syscalls.master,v 1.296 2019/09/22 22:59:39 christos Exp $
 
 ;	@(#)syscalls.master	8.2 (Berkeley) 1/13/94
 
@@ -45,9 +45,11 @@
 ; #ifdef's, etc. may be included, and are copied to the output files.
 ; #include's are copied to the syscall names and switch definition files only.
 
+#ifdef _KERNEL_OPT
 #include "opt_modular.h"
 #include "opt_ntp.h"
 #include "opt_sysv.h"
+#endif
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -714,15 +716,16 @@
 354	STD	RUMP	{ int|sys||fsync_range(int fd, int flags, off_t start, \
 			    off_t length); }
 355	STD 		{ int|sys||uuidgen(struct uuid *store, int count); }
-356	STD 	RUMP	{ int|sys||getvfsstat(struct statvfs *buf, \
+356	COMPAT_90 MODULAR compat_90 { \
+			    int|sys||getvfsstat(struct statvfs90 *buf, \
 			    size_t bufsize, int flags); }
-357	STD 	RUMP	{ int|sys||statvfs1(const char *path, \
-			    struct statvfs *buf, int flags); }
-358	STD 	RUMP	{ int|sys||fstatvfs1(int fd, struct statvfs *buf, \
-			    int flags); }
-359	COMPAT_30 MODULAR compat_30	\
-		{ int|sys||fhstatvfs1(const struct compat_30_fhandle *fhp, \
-			    struct statvfs *buf, int flags); }
+357	COMPAT_90 MODULAR compat_90 { int|sys||statvfs1(const char *path, \
+			    struct statvfs90 *buf, int flags); }
+358	COMPAT_90 MODULAR compat_90 { int|sys||fstatvfs1(int fd, \
+			    struct statvfs90 *buf, int flags); }
+359	COMPAT_30 MODULAR compat_30 { int|sys||fhstatvfs1( \
+			    const struct compat_30_fhandle *fhp, \
+			    struct statvfs90 *buf, int flags); }
 360	STD 	RUMP	{ int|sys||extattrctl(const char *path, int cmd, \
 			    const char *filename, int attrnamespace, \
 			    const char *attrname); }
@@ -808,8 +811,9 @@
 			    size_t *fh_size); }
 396	STD 	 RUMP	{ int|sys|40|fhopen(const void *fhp, size_t fh_size,\
 			    int flags); }
-397	STD 	 RUMP	{ int|sys|40|fhstatvfs1(const void *fhp, \
-			    size_t fh_size, struct statvfs *buf, int flags); }
+397	COMPAT_90 MODULAR compat_90 { \
+			    int|sys||fhstatvfs1(const void *fhp, \
+			    size_t fh_size, struct statvfs90 *buf, int flags); }
 398	COMPAT_50 MODULAR compat_50 RUMP { int|sys|40|fhstat(const void *fhp, \
 			    size_t fh_size, struct stat30 *sb); }
 
@@ -1001,3 +1005,11 @@
 			    siginfo_t *info); }
 482	STD		{ int|sys||clock_getcpuclockid2(idtype_t idtype, \
 			    id_t id, clockid_t *clock_id); }
+483	STD RUMP	{ int|sys|90|getvfsstat(struct statvfs *buf, \
+			    size_t bufsize, int flags); }
+484	STD RUMP	{ int|sys|90|statvfs1(const char *path, \
+			    struct statvfs *buf, int flags); }
+485	STD RUMP	{ int|sys|90|fstatvfs1(int fd, \
+			    struct statvfs *buf, int flags); }
+486	STD RUMP	{ int|sys|90|fhstatvfs1(const void *fhp, \
+			    size_t fh_size, struct statvfs *buf, int flags); }

Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.471 src/sys/kern/vfs_subr.c:1.472
--- src/sys/kern/vfs_subr.c:1.471	Tue Jan  1 05:06:54 2019
+++ src/sys/kern/vfs_subr.c	Sun Sep 22 18:59:39 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_subr.c,v 1.471 2019/01/01 10:06:54 hannken Exp $	*/
+/*	$NetBSD: vfs_subr.c,v 1.472 2019/09/22 22:59:39 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.471 2019/01/01 10:06:54 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.472 2019/09/22 22:59:39 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -1198,6 +1198,8 @@ copy_statvfs_info(struct statvfs *sbp, c
 	    sizeof(sbp->f_mntonname));
 	(void)memcpy(sbp->f_mntfromname, mp->mnt_stat.f_mntfromname,
 	    sizeof(sbp->f_mntfromname));
+	(void)memcpy(sbp->f_mntfromlabel, mp->mnt_stat.f_mntfromlabel,
+	    sizeof(sbp->f_mntfromlabel));
 	sbp->f_namemax = mbp->f_namemax;
 }
 

Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.535 src/sys/kern/vfs_syscalls.c:1.536
--- src/sys/kern/vfs_syscalls.c:1.535	Fri Sep 20 09:29:31 2019
+++ src/sys/kern/vfs_syscalls.c	Sun Sep 22 18:59:39 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_syscalls.c,v 1.535 2019/09/20 13:29:31 kamil Exp $	*/
+/*	$NetBSD: vfs_syscalls.c,v 1.536 2019/09/22 22:59:39 christos Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.535 2019/09/20 13:29:31 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.536 2019/09/22 22:59:39 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_fileassoc.h"
@@ -1187,7 +1187,7 @@ do_sys_pstatvfs(struct lwp *l, const cha
 
 /* ARGSUSED */
 int
-sys_statvfs1(struct lwp *l, const struct sys_statvfs1_args *uap, register_t *retval)
+sys___statvfs190(struct lwp *l, const struct sys___statvfs190_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(const char *) path;
@@ -1226,7 +1226,7 @@ do_sys_fstatvfs(struct lwp *l, int fd, i
 
 /* ARGSUSED */
 int
-sys_fstatvfs1(struct lwp *l, const struct sys_fstatvfs1_args *uap, register_t *retval)
+sys___fstatvfs190(struct lwp *l, const struct sys___fstatvfs190_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(int) fd;
@@ -1307,7 +1307,8 @@ out:
 }
 
 int
-sys_getvfsstat(struct lwp *l, const struct sys_getvfsstat_args *uap, register_t *retval)
+sys___getvfsstat90(struct lwp *l, const struct sys___getvfsstat90_args *uap,
+    register_t *retval)
 {
 	/* {
 		syscallarg(struct statvfs *) buf;
@@ -2139,7 +2140,7 @@ do_fhstatvfs(struct lwp *l, const void *
 
 /* ARGSUSED */
 int
-sys___fhstatvfs140(struct lwp *l, const struct sys___fhstatvfs140_args *uap, register_t *retval)
+sys___fhstatvfs190(struct lwp *l, const struct sys___fhstatvfs190_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(const void *) fhp;

Index: src/sys/miscfs/specfs/spec_vnops.c
diff -u src/sys/miscfs/specfs/spec_vnops.c:1.175 src/sys/miscfs/specfs/spec_vnops.c:1.176
--- src/sys/miscfs/specfs/spec_vnops.c:1.175	Mon Sep  3 12:29:35 2018
+++ src/sys/miscfs/specfs/spec_vnops.c	Sun Sep 22 18:59:39 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: spec_vnops.c,v 1.175 2018/09/03 16:29:35 riastradh Exp $	*/
+/*	$NetBSD: spec_vnops.c,v 1.176 2019/09/22 22:59:39 christos 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.175 2018/09/03 16:29:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.176 2019/09/22 22:59:39 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -75,6 +75,7 @@ __KERNEL_RCSID(0, "$NetBSD: spec_vnops.c
 #include <sys/poll.h>
 #include <sys/file.h>
 #include <sys/disklabel.h>
+#include <sys/disk.h>
 #include <sys/lockf.h>
 #include <sys/tty.h>
 #include <sys/kauth.h>
@@ -366,10 +367,19 @@ spec_node_getmountedfs(vnode_t *devvp)
 void
 spec_node_setmountedfs(vnode_t *devvp, struct mount *mp)
 {
+	struct dkwedge_info dkw;
 
 	KASSERT(devvp->v_type == VBLK);
 	KASSERT(devvp->v_specnode->sn_dev->sd_mountpoint == NULL || mp == NULL);
 	devvp->v_specnode->sn_dev->sd_mountpoint = mp;
+	if (mp == NULL)
+		return;
+
+	if (bdev_ioctl(devvp->v_rdev, DIOCGWEDGEINFO, &dkw, FREAD, curlwp) != 0)
+		return;
+
+	strlcpy(mp->mnt_stat.f_mntfromlabel, dkw.dkw_wname,
+	    sizeof(mp->mnt_stat.f_mntfromlabel));
 }
 
 /*

Index: src/sys/modules/Makefile
diff -u src/sys/modules/Makefile:1.226 src/sys/modules/Makefile:1.227
--- src/sys/modules/Makefile:1.226	Tue Sep 17 03:36:51 2019
+++ src/sys/modules/Makefile	Sun Sep 22 18:59:39 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.226 2019/09/17 07:36:51 mrg Exp $
+#	$NetBSD: Makefile,v 1.227 2019/09/22 22:59:39 christos Exp $
 
 .include <bsd.own.mk>
 
@@ -10,7 +10,7 @@ SUBDIR+=	compat_util
 SUBDIR+=	compat_43   compat_sysctl_09_43
 SUBDIR+=	compat_09   compat_10   compat_12   compat_13   compat_14
 SUBDIR+=	compat_16   compat_20   compat_30   compat_40   compat_50
-SUBDIR+=	compat_60   compat_70   compat_80 
+SUBDIR+=	compat_60   compat_70   compat_80   compat_90
 
 SUBDIR+=	compat_sysv_10 compat_sysv_14 compat_sysv_50
 
@@ -292,6 +292,7 @@ SUBDIR+=	compat_netbsd32_13	compat_netbs
 SUBDIR+=	compat_netbsd32_20	compat_netbsd32_30
 SUBDIR+=	compat_netbsd32_40	compat_netbsd32_50
 SUBDIR+=	compat_netbsd32_60	compat_netbsd32_80
+SUBDIR+=	compat_netbsd32_90
 SUBDIR+=	compat_netbsd32_43
 SUBDIR+=	compat_netbsd32_mqueue
 SUBDIR+=	compat_netbsd32_nfssrv

Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.612 src/sys/sys/param.h:1.613
--- src/sys/sys/param.h:1.612	Tue Sep 17 11:20:05 2019
+++ src/sys/sys/param.h	Sun Sep 22 18:59:40 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.612 2019/09/17 15:20:05 christos Exp $	*/
+/*	$NetBSD: param.h,v 1.613 2019/09/22 22:59:40 christos Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -67,7 +67,7 @@
  *	2.99.9		(299000900)
  */
 
-#define	__NetBSD_Version__	999001200	/* NetBSD 9.99.12 */
+#define	__NetBSD_Version__	999001300	/* NetBSD 9.99.13 */
 
 #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
     (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)

Index: src/sys/sys/statvfs.h
diff -u src/sys/sys/statvfs.h:1.18 src/sys/sys/statvfs.h:1.19
--- src/sys/sys/statvfs.h:1.18	Fri Apr  5 13:34:27 2013
+++ src/sys/sys/statvfs.h	Sun Sep 22 18:59:40 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: statvfs.h,v 1.18 2013/04/05 17:34:27 christos Exp $	 */
+/*	$NetBSD: statvfs.h,v 1.19 2019/09/22 22:59:40 christos Exp $	 */
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -91,11 +91,12 @@ struct statvfs {
 	unsigned long	f_namemax;	/* maximum filename length */
 	uid_t		f_owner;	/* user that mounted the file system */
 
-	uint32_t	f_spare[4];	/* spare space */
+	uint64_t	f_spare[4];	/* spare space */
 
-	char	f_fstypename[_VFS_NAMELEN]; /* fs type name */
-	char	f_mntonname[_VFS_MNAMELEN];  /* directory on which mounted */
-	char	f_mntfromname[_VFS_MNAMELEN];  /* mounted file system */
+	char	f_fstypename[_VFS_NAMELEN];	/* fs type name */
+	char	f_mntonname[_VFS_MNAMELEN];	/* directory on which mounted */
+	char	f_mntfromname[_VFS_MNAMELEN];	/* mounted file system */
+	char	f_mntfromlabel[_VFS_MNAMELEN];  /* disk label name if avail */
 
 };
 
@@ -146,34 +147,36 @@ int	set_statvfs_info(const char *, int, 
     const char *, struct mount *, struct lwp *);
 void	copy_statvfs_info(struct statvfs *, const struct mount *);
 int	dostatvfs(struct mount *, struct statvfs *, struct lwp *, int, int);
+
+#include <sys/kmem.h>
+#define	STATVFSBUF_GET()	kmem_zalloc(sizeof(struct statvfs), KM_SLEEP)
+#define	STATVFSBUF_PUT(sb)	kmem_free(sb, sizeof(struct statvfs))
+
 #else
 __BEGIN_DECLS
-int	statvfs(const char *__restrict, struct statvfs *__restrict);
-int	fstatvfs(int, struct statvfs *);
-int	getvfsstat(struct statvfs *, size_t, int);
 #ifndef __LIBC12_SOURCE__
-int	getmntinfo(struct statvfs **, int) __RENAME(__getmntinfo13);
-#endif /* __LIBC12_SOURCE__ */
+int	getmntinfo(struct statvfs **, int)
+    __RENAME(__getmntinfo90);
+
+int	statvfs(const char *__restrict, struct statvfs *__restrict)
+    __RENAME(__statvfs90);
+int	fstatvfs(int, struct statvfs *)
+    __RENAME(__fstatvfs90);
+int	getvfsstat(struct statvfs *, size_t, int)
+    __RENAME(__getvfsstat90);
+
 #if defined(_NETBSD_SOURCE)
-#ifndef __LIBC12_SOURCE__
 int	fhstatvfs(const void *, size_t, struct statvfs *) 
-    __RENAME(__fhstatvfs40);
-#endif
-
-int	statvfs1(const char *__restrict, struct statvfs *__restrict, int);
-int	fstatvfs1(int, struct statvfs *, int);
-#ifndef __LIBC12_SOURCE__
+    __RENAME(__fhstatvfs90);
+int	statvfs1(const char *__restrict, struct statvfs *__restrict, int)
+    __RENAME(__statvfs190);
+int	fstatvfs1(int, struct statvfs *, int)
+    __RENAME(__fstatvfs190);
 int	fhstatvfs1(const void *, size_t, struct statvfs *, int)
-    __RENAME(__fhstatvfs140);
-#endif
+    __RENAME(__fhstatvfs190);
 #endif /* _NETBSD_SOURCE */
+#endif /* __LIBC12_SOURCE__ */
 __END_DECLS
 #endif /* _KERNEL || _STANDALONE */
 
-#if defined(_KERNEL)
-#include <sys/kmem.h>
-#define	STATVFSBUF_GET()	kmem_alloc(sizeof(struct statvfs), KM_SLEEP)
-#define	STATVFSBUF_PUT(sb)	kmem_free(sb, sizeof(struct statvfs))
-#endif /* defined(_KERNEL) */
-
 #endif /* !_SYS_STATVFS_H_ */

Index: src/usr.bin/ktruss/dump.c
diff -u src/usr.bin/ktruss/dump.c:1.43 src/usr.bin/ktruss/dump.c:1.44
--- src/usr.bin/ktruss/dump.c:1.43	Sun Jun  3 09:41:30 2018
+++ src/usr.bin/ktruss/dump.c	Sun Sep 22 18:59:40 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: dump.c,v 1.43 2018/06/03 13:41:30 kamil Exp $	*/
+/*	$NetBSD: dump.c,v 1.44 2019/09/22 22:59:40 christos Exp $	*/
 
 /*-
  * Copyright (c) 1988, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 19
 #if 0
 static char sccsid[] = "@(#)kdump.c	8.4 (Berkeley) 4/28/95";
 #endif
-__RCSID("$NetBSD: dump.c,v 1.43 2018/06/03 13:41:30 kamil Exp $");
+__RCSID("$NetBSD: dump.c,v 1.44 2019/09/22 22:59:40 christos Exp $");
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -528,7 +528,7 @@ syscallprint(struct ktr_header *kth)
 	case SYS___utimes50:
 	case SYS_compat_50_quotactl:
 	case SYS___quotactl:
-	case SYS_statvfs1:
+	case SYS___statvfs190:
 	case SYS_compat_30_getfh:
 	case SYS_pathconf:
 	case SYS_truncate:

Added files:

Index: src/lib/libc/compat/gen/compat___getmntinfo13.c
diff -u /dev/null src/lib/libc/compat/gen/compat___getmntinfo13.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/lib/libc/compat/gen/compat___getmntinfo13.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,84 @@
+/*	$NetBSD: compat___getmntinfo13.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2019 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: compat___getmntinfo13.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#define __LIBC12_SOURCE__
+
+#include "namespace.h"
+
+#include <sys/types.h>
+#include <sys/param.h>
+
+#include <assert.h>
+#include <compat/sys/statvfs.h>
+#include <string.h>
+#include <stdlib.h>
+
+__warn_references(__getmntinfo13,
+    "warning: reference to obsolete __getmntinfo13(); use statvfs()")
+
+__strong_alias(__getmntinfo13, __compat___getmntinfo13)
+
+/*
+ * Return information about mounted filesystems.
+ */
+int
+__compat___getmntinfo13(struct statvfs90 **mntbufp, int flags)
+{
+	static struct statvfs90 *mntbuf;
+	static int mntsize;
+	static size_t bufsize;
+
+	_DIAGASSERT(mntbufp != NULL);
+
+	if (mntsize <= 0 &&
+	    (mntsize = __compat_getvfsstat(NULL, 0L, MNT_NOWAIT)) == -1)
+		return (0);
+	if (bufsize > 0 &&
+	    (mntsize = __compat_getvfsstat(mntbuf, bufsize, flags)) == -1)
+		return (0);
+	while (bufsize <= mntsize * sizeof(struct statvfs90)) {
+		if (mntbuf)
+			free(mntbuf);
+		bufsize = (mntsize + 1) * sizeof(struct statvfs90);
+		if ((mntbuf = malloc(bufsize)) == NULL)
+			return (0);
+		if ((mntsize = __compat_getvfsstat(mntbuf, bufsize,
+		    flags)) == -1)
+			return (0);
+	}
+	*mntbufp = mntbuf;
+	return (mntsize);
+}

Index: src/lib/libc/compat/sys/compat___fhstatvfs140.c
diff -u /dev/null src/lib/libc/compat/sys/compat___fhstatvfs140.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/lib/libc/compat/sys/compat___fhstatvfs140.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,59 @@
+/*	$NetBSD: compat___fhstatvfs140.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2019 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: compat___fhstatvfs140.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#define __LIBC12_SOURCE__
+
+#include <sys/types.h>
+#include <sys/statvfs.h>
+#include <compat/include/fstypes.h>
+#include <compat/sys/statvfs.h>
+
+__warn_references(__fhstatvfs140,
+    "warning: reference to compatibility __fhstatvfs140(); include <sys/statvfs.h> to generate correct reference")
+
+__strong_alias(__fhstatvfs140, __compat___fhstatvfs140)
+
+int
+__compat___fhstatvfs140(const void *fhp, size_t len, struct statvfs90 *buf,
+    int flags)
+{
+	struct statvfs sb;
+	int error = __fhstatvfs190(fhp, len, &sb, flags);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
+}
Index: src/lib/libc/compat/sys/compat___fhstatvfs40.c
diff -u /dev/null src/lib/libc/compat/sys/compat___fhstatvfs40.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/lib/libc/compat/sys/compat___fhstatvfs40.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,58 @@
+/*	$NetBSD: compat___fhstatvfs40.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2019 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: compat___fhstatvfs40.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#define __LIBC12_SOURCE__
+
+#include <sys/types.h>
+#include <sys/statvfs.h>
+#include <compat/include/fstypes.h>
+#include <compat/sys/statvfs.h>
+
+__warn_references(__fhstatvfs40,
+    "warning: reference to compatibility __fhstatvfs40(); include <sys/statvfs.h> to generate correct reference")
+
+__strong_alias(__fhstatvfs40, __compat___fhstatvfs40)
+
+int
+__compat___fhstatvfs40(const void *fhp, size_t len, struct statvfs90 *buf)
+{
+	struct statvfs sb;
+	int error = __fhstatvfs190(fhp, len, &sb, 0);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
+}
Index: src/lib/libc/compat/sys/compat_statvfs.c
diff -u /dev/null src/lib/libc/compat/sys/compat_statvfs.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/lib/libc/compat/sys/compat_statvfs.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,121 @@
+/*	$NetBSD: compat_statvfs.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2019 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: compat_statvfs.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#define __LIBC12_SOURCE__
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/statvfs.h>
+#include <compat/include/fstypes.h>
+#include <compat/sys/statvfs.h>
+
+__warn_references(statvfs,
+    "warning: reference to compatibility statvfs(); include <sys/statvfs.h> to generate correct reference")
+__warn_references(statvfs1,
+    "warning: reference to compatibility statvfs1(); include <sys/statvfs.h> to generate correct reference")
+
+__warn_references(fstatvfs,
+    "warning: reference to compatibility fstatvfs(); include <sys/statvfs.h> to generate correct reference")
+__warn_references(fstatvfs1,
+    "warning: reference to compatibility fstatvfs1(); include <sys/statvfs.h> to generate correct reference")
+
+__warn_references(getvfsstat,
+    "warning: reference to compatibility getvfsstat(); include <sys/statvfs.h> to generate correct reference")
+
+__strong_alias(statvfs, __compat_statvfs)
+__strong_alias(statvfs1, __compat_statvfs1)
+__strong_alias(fstatvfs, __compat_fstatvfs)
+__strong_alias(fstatvfs1, __compat_fstatvfs1)
+__strong_alias(getvfsstat, __compat_getvfsstat)
+
+int
+__compat_statvfs(const char *path, struct statvfs90 *buf)
+{
+	struct statvfs sb;
+	int error = __statvfs190(path, &sb, 0);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
+}
+
+int
+__compat_statvfs1(const char *path, struct statvfs90 *buf, int flags)
+{
+	struct statvfs sb;
+	int error = __statvfs190(path, &sb, flags);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
+}
+
+int
+__compat_fstatvfs(int fd, struct statvfs90 *buf)
+{
+	struct statvfs sb;
+	int error = __fstatvfs190(fd, &sb, 0);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
+}
+
+int
+__compat_fstatvfs1(int fd, struct statvfs90 *buf, int flags)
+{
+	struct statvfs sb;
+	int error = __fstatvfs190(fd, &sb, flags);
+	if (error != -1)
+		statvfs_to_statvfs90(&sb, buf);
+	return error;
+}
+
+int
+__compat_getvfsstat(struct statvfs90 *buf, size_t size, int flags)
+{
+	size_t count = size / sizeof(*buf);
+	struct statvfs *sb = calloc(count, sizeof(*sb));
+
+	if (sb == NULL)
+		return -1;
+
+	int error = __getvfsstat90(sb, count * sizeof(*sb), flags);
+	if (error != -1) {
+		for (size_t i = 0; i < count; i++)
+			statvfs_to_statvfs90(sb + i, buf + i);
+	}
+	free(sb);
+	return error;
+}

Index: src/sys/compat/common/compat_90_mod.c
diff -u /dev/null src/sys/compat/common/compat_90_mod.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/sys/compat/common/compat_90_mod.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,83 @@
+/*	$NetBSD: compat_90_mod.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2019 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software developed for The NetBSD Foundation
+ * by Paul Goyette
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Linkage for the compat module: spaghetti.
+ */
+
+#if defined(_KERNEL_OPT)
+#include "opt_compat_netbsd.h"
+#endif
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: compat_90_mod.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+
+#include <sys/systm.h>
+#include <sys/module.h>
+
+#include <compat/common/compat_util.h>
+#include <compat/common/compat_mod.h>
+
+int
+compat_90_init(void)
+{
+
+	vfs_syscalls_90_init();
+
+	return 0;
+}
+
+int
+compat_90_fini(void)
+{
+
+	vfs_syscalls_90_fini();
+
+	return 0;
+}
+
+MODULE(MODULE_CLASS_EXEC, compat_90, NULL);
+
+static int
+compat_90_modcmd(modcmd_t cmd, void *arg)
+{
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+		return compat_90_init();
+
+	case MODULE_CMD_FINI:
+		return compat_90_fini();
+
+	default:
+		return ENOTTY;
+	}
+}
Index: src/sys/compat/common/vfs_syscalls_90.c
diff -u /dev/null src/sys/compat/common/vfs_syscalls_90.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/sys/compat/common/vfs_syscalls_90.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,163 @@
+/*	$NetBSD: vfs_syscalls_90.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2005, 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_90.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+
+#if defined(_KERNEL_OPT)
+#include "opt_compat_netbsd.h"
+#endif
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/namei.h>
+#include <sys/filedesc.h>
+#include <sys/kernel.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <sys/socketvar.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+#include <sys/proc.h>
+#include <sys/uio.h>
+#include <sys/dirent.h>
+#include <sys/malloc.h>
+#include <sys/kauth.h>
+#include <sys/vfs_syscalls.h>
+#include <sys/syscall.h>
+#include <sys/syscallvar.h>
+#include <sys/syscallargs.h>
+
+#include <compat/common/compat_mod.h>
+#include <compat/common/compat_util.h>
+#include <compat/sys/statvfs.h>
+
+static const struct syscall_package vfs_syscalls_90_syscalls[] = {
+	{ SYS_compat_90_getvfsstat, 0, (sy_call_t *)compat_90_sys_getvfsstat },
+	{ SYS_compat_90_statvfs1, 0, (sy_call_t *)compat_90_sys_statvfs1 },
+	{ SYS_compat_90_fstatvfs1, 0, (sy_call_t *)compat_90_sys_fstatvfs1 },
+	{ SYS_compat_90_fhstatvfs1, 0, (sy_call_t *)compat_90_sys_fhstatvfs1 },
+	{ 0,0, NULL }
+};
+
+
+int
+compat_90_sys_getvfsstat(struct lwp *l,
+    const struct compat_90_sys_getvfsstat_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(struct statvfs90 *) buf;
+		syscallarg(size_t) bufsize;
+		syscallarg(int)	flags;
+	} */
+
+	return do_sys_getvfsstat(l, SCARG(uap, buf), SCARG(uap, bufsize),
+	    SCARG(uap, flags), statvfs_to_statvfs90_copy,
+	    sizeof(struct statvfs90), retval);
+}
+
+int
+compat_90_sys_statvfs1(struct lwp *l,
+    const struct compat_90_sys_statvfs1_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(const char *) path;
+		syscallarg(struct statvfs90 *) buf;
+		syscallarg(int)	flags;
+	} */
+
+	struct statvfs *sb = STATVFSBUF_GET();
+	int error = do_sys_pstatvfs(l, SCARG(uap, path), SCARG(uap, flags), sb);
+
+	if (!error)
+		error = statvfs_to_statvfs90_copy(sb, SCARG(uap, buf),
+		    sizeof(struct statvfs90));
+
+	STATVFSBUF_PUT(sb);
+	return error;
+}
+
+int
+compat_90_sys_fstatvfs1(struct lwp *l,
+    const struct compat_90_sys_fstatvfs1_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(int) fd;
+		syscallarg(struct statvfs90 *) buf;
+		syscallarg(int)	flags;
+	} */
+
+	struct statvfs *sb = STATVFSBUF_GET();
+	int error = do_sys_fstatvfs(l, SCARG(uap, fd), SCARG(uap, flags), sb);
+
+	if (!error)
+		error = statvfs_to_statvfs90_copy(sb, SCARG(uap, buf),
+		    sizeof(struct statvfs90));
+
+	STATVFSBUF_PUT(sb);
+	return error;
+}
+
+int
+compat_90_sys_fhstatvfs1(struct lwp *l,
+    const struct compat_90_sys_fhstatvfs1_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(const void *) fhp;
+		syscallarg(size_t) fh_size;
+		syscallarg(struct statvfs90 *) buf;
+		syscallarg(int)	flags;
+	} */
+
+	struct statvfs *sb = STATVFSBUF_GET();
+	int error = do_fhstatvfs(l, SCARG(uap, fhp), SCARG(uap, fh_size),
+	    sb, SCARG(uap, flags));
+
+	if (!error)
+		error = statvfs_to_statvfs90_copy(sb, SCARG(uap, buf),
+		    sizeof(struct statvfs90));
+
+	STATVFSBUF_PUT(sb);
+	return error;
+}
+
+int
+vfs_syscalls_90_init(void)
+{
+
+	return syscall_establish(NULL, vfs_syscalls_90_syscalls);
+}
+
+int
+vfs_syscalls_90_fini(void)
+{
+
+	return syscall_disestablish(NULL, vfs_syscalls_90_syscalls);
+}

Index: src/sys/compat/netbsd32/netbsd32_compat_90.c
diff -u /dev/null src/sys/compat/netbsd32/netbsd32_compat_90.c:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/sys/compat/netbsd32/netbsd32_compat_90.c	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,173 @@
+/*	$NetBSD: netbsd32_compat_90.c,v 1.1 2019/09/22 22:59:38 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2019 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software developed for The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_90.c,v 1.1 2019/09/22 22:59:38 christos Exp $");
+
+#include <sys/param.h>
+#include <sys/kmem.h>
+#include <sys/module.h>
+#include <sys/filedesc.h>
+#include <sys/statvfs.h>
+#include <sys/vfs_syscalls.h>
+#include <sys/syscallvar.h>
+
+#include <compat/netbsd32/netbsd32.h>
+#include <compat/netbsd32/netbsd32_syscall.h>
+#include <compat/netbsd32/netbsd32_syscallargs.h>
+#include <compat/netbsd32/netbsd32_conv.h>
+
+static int
+netbsd32_copyout_statvfs90(const void *kp, void *up, size_t len)
+{
+	struct netbsd32_statvfs90 *sbuf_32;
+	int error;
+
+	sbuf_32 = kmem_alloc(sizeof(*sbuf_32), KM_SLEEP);
+	netbsd32_from_statvfs90(kp, sbuf_32);
+	error = copyout(sbuf_32, up, sizeof(*sbuf_32));
+	kmem_free(sbuf_32, sizeof(*sbuf_32));
+
+	return error;
+}
+
+int
+compat_90_netbsd32_getvfsstat(struct lwp *l,
+    const struct compat_90_netbsd32_getvfsstat_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(netbsd32_statvfs90p_t) buf;
+		syscallarg(netbsd32_size_t) bufsize;
+		syscallarg(int) flags;
+	} */
+
+	return do_sys_getvfsstat(l, SCARG_P32(uap, buf), SCARG(uap, bufsize),
+	    SCARG(uap, flags), netbsd32_copyout_statvfs90,
+	    sizeof(struct netbsd32_statvfs90), retval);
+}
+
+int
+compat_90_netbsd32_statvfs1(struct lwp *l,
+    const struct compat_90_netbsd32_statvfs1_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(const netbsd32_charp) path;
+		syscallarg(netbsd32_statvfs90p_t) buf;
+		syscallarg(int) flags;
+	} */
+	struct statvfs *sb;
+	int error;
+
+	sb = STATVFSBUF_GET();
+	error = do_sys_pstatvfs(l, SCARG_P32(uap, path), SCARG(uap, flags), sb);
+	if (error == 0)
+		error = netbsd32_copyout_statvfs90(sb, SCARG_P32(uap, buf),
+		    sizeof(struct netbsd32_statvfs90));
+	STATVFSBUF_PUT(sb);
+	return error;
+}
+
+int
+compat_90_netbsd32_fstatvfs1(struct lwp *l,
+    const struct compat_90_netbsd32_fstatvfs1_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(int) fd;
+		syscallarg(netbsd32_statvfs90p_t) buf;
+		syscallarg(int) flags;
+	} */
+	struct statvfs *sb;
+	int error;
+
+	sb = STATVFSBUF_GET();
+	error = do_sys_fstatvfs(l, SCARG(uap, fd), SCARG(uap, flags), sb);
+	if (error == 0)
+		error = netbsd32_copyout_statvfs90(sb, SCARG_P32(uap, buf), 0);
+	STATVFSBUF_PUT(sb);
+	return error;
+}
+
+
+int
+compat_90_netbsd32_fhstatvfs1(struct lwp *l,
+    const struct compat_90_netbsd32_fhstatvfs1_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(const netbsd32_pointer_t) fhp;
+		syscallarg(netbsd32_size_t) fh_size;
+		syscallarg(netbsd32_statvfs90p_t) buf;
+		syscallarg(int) flags;
+	} */
+	struct statvfs *sb;
+	int error;
+
+	sb = STATVFSBUF_GET();
+	error = do_fhstatvfs(l, SCARG_P32(uap, fhp), SCARG(uap, fh_size), sb,
+	    SCARG(uap, flags));
+
+	if (error == 0)
+		error = netbsd32_copyout_statvfs90(sb, SCARG_P32(uap, buf), 0);
+	STATVFSBUF_PUT(sb);
+
+	return error;
+}
+
+static struct syscall_package compat_netbsd32_90_syscalls[] = {
+	{ NETBSD32_SYS_compat_90_netbsd32_getvfsstat, 0,
+	    (sy_call_t *)compat_90_netbsd32_getvfsstat },
+	{ NETBSD32_SYS_compat_90_netbsd32_statvfs1, 0,
+	    (sy_call_t *)compat_90_netbsd32_statvfs1 },
+	{ NETBSD32_SYS_compat_90_netbsd32_fstatvfs1, 0,
+	    (sy_call_t *)compat_90_netbsd32_fstatvfs1 },
+	{ NETBSD32_SYS_compat_90_netbsd32_fhstatvfs1, 0,
+	    (sy_call_t *)compat_90_netbsd32_fhstatvfs1 },
+	{ 0, 0, NULL }
+}; 
+
+MODULE(MODULE_CLASS_EXEC, compat_netbsd32_90, "compat_netbsd32,compat_90");
+
+static int
+compat_netbsd32_90_modcmd(modcmd_t cmd, void *arg)
+{
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+		return syscall_establish(&emul_netbsd32,
+		    compat_netbsd32_90_syscalls);
+
+	case MODULE_CMD_FINI:
+		return syscall_disestablish(&emul_netbsd32,
+		    compat_netbsd32_90_syscalls);
+
+	default:
+		return ENOTTY;
+	}
+}

Index: src/sys/conf/compat_netbsd90.config
diff -u /dev/null src/sys/conf/compat_netbsd90.config:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/sys/conf/compat_netbsd90.config	Sun Sep 22 18:59:38 2019
@@ -0,0 +1,9 @@
+#	$NetBSD: compat_netbsd90.config,v 1.1 2019/09/22 22:59:38 christos Exp $
+
+# Common fragment for all NetBSD targets wanting NetBSD 7.0 and newer
+# compatibility support.
+#
+# Note that COMPAT_80 implies all newer COMPAT_XX options.
+
+include        "conf/compat_netbsd.config"
+options 	COMPAT_90	# NetBSD 9.0 and beyond.

Index: src/sys/modules/compat_90/Makefile
diff -u /dev/null src/sys/modules/compat_90/Makefile:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/sys/modules/compat_90/Makefile	Sun Sep 22 18:59:39 2019
@@ -0,0 +1,14 @@
+#	$NetBSD: Makefile,v 1.1 2019/09/22 22:59:39 christos Exp $
+
+.include "../Makefile.inc"
+
+.PATH:	${S}/compat/common
+
+KMOD=	compat_90
+
+CPPFLAGS+=	-DCOMPAT_90
+
+SRCS+=	compat_90_mod.c
+SRCS+=	vfs_syscalls_90.c
+
+.include <bsd.kmodule.mk>

Index: src/sys/modules/compat_netbsd32_90/Makefile
diff -u /dev/null src/sys/modules/compat_netbsd32_90/Makefile:1.1
--- /dev/null	Sun Sep 22 18:59:40 2019
+++ src/sys/modules/compat_netbsd32_90/Makefile	Sun Sep 22 18:59:40 2019
@@ -0,0 +1,15 @@
+#	$NetBSD: Makefile,v 1.1 2019/09/22 22:59:40 christos Exp $
+
+.include "../Makefile.inc"
+
+.PATH:	${S}/compat/netbsd32
+
+KMOD=	compat_netbsd32_90
+
+CPPFLAGS+=	-DCOMPAT_NETBSD32
+CPPFLAGS+=	-DCOMPAT_90
+CPPFLAGS+=	-I${NETBSDSRCDIR}/sys/external/bsd/libnv/dist
+
+SRCS+=	netbsd32_compat_90.c
+
+.include <bsd.kmodule.mk>

Reply via email to