CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2021-07-04 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sun Jul  4 11:25:07 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c

Log Message:
Add VOP_PARSEPATH to zfs control dir vnode op table.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.13
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.12	Sat May 16 18:31:46 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c	Sun Jul  4 11:25:07 2021
@@ -1825,6 +1825,7 @@ sfs_print(void *v)
 
 const struct vnodeopv_entry_desc zfs_sfsop_entries[] = {
 	{ _default_desc,		vn_default_error },
+	{ _parsepath_desc,		genfs_parsepath },
 	{ _lookup_desc,		sfs_lookup },
 	{ _open_desc,		sfs_open },
 	{ _close_desc,		sfs_close },



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2021-07-02 Thread David A. Holland
Module Name:src
Committed By:   dholland
Date:   Fri Jul  2 17:14:37 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Add VOP_PARSEPATH to zfs's vnode table. "oops"

zfs not being under src/sys strikes again :-(


To generate a diff of this commit:
cvs rdiff -u -r1.71 -r1.72 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.71 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.72
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.71	Sun Nov 15 00:54:13 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Fri Jul  2 17:14:36 2021
@@ -6347,6 +6347,7 @@ const struct genfs_ops zfs_genfsops = {
 int (**zfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc zfs_vnodeop_entries[] = {
 	{ _default_desc,		vn_default_error },
+	{ _parsepath_desc,		genfs_parsepath },
 	{ _lookup_desc,		zfs_netbsd_lookup },
 	{ _create_desc,		zfs_netbsd_create },
 	{ _mknod_desc,		zfs_netbsd_mknod },



CVS commit: src/external/cddl/osnet/dist/common/nvpair

2021-05-21 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Fri May 21 17:32:49 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/common/nvpair: nvpair.c

Log Message:
Replace the Solaris style endian check (exactly one of
_LITTLE_ENDIAN or _BIG_ENDIAN is defined) with standard check
"#if BYTE_ORDER == BIG_ENDIAN" like we do it elseware.

Should fix PR 56191 (ZFS tests fail on sparc64)


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/external/cddl/osnet/dist/common/nvpair/nvpair.c

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

Modified files:

Index: src/external/cddl/osnet/dist/common/nvpair/nvpair.c
diff -u src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.5 src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.6
--- src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.5	Mon Mar  2 15:45:33 2020
+++ src/external/cddl/osnet/dist/common/nvpair/nvpair.c	Fri May 21 17:32:49 2021
@@ -2255,11 +2255,11 @@ nvlist_common(nvlist_t *nvl, char *buf, 
 	int err = 0;
 	nvstream_t nvs;
 	int nvl_endian;
-#ifdef	_LITTLE_ENDIAN
-	int host_endian = 1;
-#else
+#if BYTE_ORDER == BIG_ENDIAN
 	int host_endian = 0;
-#endif	/* _LITTLE_ENDIAN */
+#else
+	int host_endian = 1;
+#endif	/* BYTE_ORDER */
 	nvs_header_t *nvh = (void *)buf;
 
 	if (buflen == NULL || nvl == NULL ||



CVS commit: src/external/cddl/osnet/dist/lib/libzfs/common

2021-05-13 Thread Nia Alarie
Module Name:src
Committed By:   nia
Date:   Thu May 13 09:05:19 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/lib/libzfs/common: libzfs_dataset.c

Log Message:
this is not FreeBSD


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_dataset.c

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

Modified files:

Index: src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_dataset.c
diff -u src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_dataset.c:1.4 src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_dataset.c:1.5
--- src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_dataset.c:1.4	Mon May 28 21:05:06 2018
+++ src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_dataset.c	Thu May 13 09:05:19 2021
@@ -1135,7 +1135,7 @@ badlabel:
 			m_label_free(new_sl);	/* OK if null */
 #else	/* !illumos */
 			zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
-			"mlslabel is not supported on FreeBSD"));
+			"mlslabel is not supported on NetBSD"));
 			(void) zfs_error(hdl, EZFS_BADPROP, errbuf);
 #endif	/* illumos */
 			goto error;
@@ -1644,7 +1644,7 @@ zfs_prop_set_list(zfs_handle_t *zhp, nvl
 		case ZFS_PROP_NBMAND:
 		case ZFS_PROP_MLSLABEL:
 			(void) snprintf(errbuf, sizeof (errbuf),
-			"property '%s' not supported on FreeBSD",
+			"property '%s' not supported on NetBSD",
 			nvpair_name(elem));
 			ret = zfs_error(hdl, EZFS_PERM, errbuf);
 			goto error;



CVS commit: src/external/cddl/osnet/dist/cmd/zfs

2021-05-13 Thread Nia Alarie
Module Name:src
Committed By:   nia
Date:   Thu May 13 09:03:35 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/cmd/zfs: zfs_main.c

Log Message:
zfs: this is not FreeBSD


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/external/cddl/osnet/dist/cmd/zfs/zfs_main.c

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

Modified files:

Index: src/external/cddl/osnet/dist/cmd/zfs/zfs_main.c
diff -u src/external/cddl/osnet/dist/cmd/zfs/zfs_main.c:1.7 src/external/cddl/osnet/dist/cmd/zfs/zfs_main.c:1.8
--- src/external/cddl/osnet/dist/cmd/zfs/zfs_main.c:1.7	Sun Sep 15 19:38:09 2019
+++ src/external/cddl/osnet/dist/cmd/zfs/zfs_main.c	Thu May 13 09:03:35 2021
@@ -6130,7 +6130,7 @@ share_mount(int op, int argc, char **arg
 			break;
 
 		case 'O':
-			warnx("no overlay mounts support on FreeBSD, ignoring");
+			warnx("no overlay mounts support on NetBSD, ignoring");
 			break;
 		case ':':
 			(void) fprintf(stderr, gettext("missing argument for "



CVS commit: src/external/cddl/osnet/dist/cmd

2021-04-30 Thread Nia Alarie
Module Name:src
Committed By:   nia
Date:   Fri Apr 30 18:59:31 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/cmd/zfs: zfs.8
src/external/cddl/osnet/dist/cmd/zpool: zpool.8

Log Message:
zfs: Fix up references to FreeBSD


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/dist/cmd/zfs/zfs.8
cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/dist/cmd/zpool/zpool.8

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

Modified files:

Index: src/external/cddl/osnet/dist/cmd/zfs/zfs.8
diff -u src/external/cddl/osnet/dist/cmd/zfs/zfs.8:1.1 src/external/cddl/osnet/dist/cmd/zfs/zfs.8:1.2
--- src/external/cddl/osnet/dist/cmd/zfs/zfs.8:1.1	Mon Jun 24 08:27:20 2019
+++ src/external/cddl/osnet/dist/cmd/zfs/zfs.8	Fri Apr 30 18:59:30 2021
@@ -285,12 +285,6 @@
 .Op Fl FHt
 .Ar snapshot
 .Op Ar snapshot Ns | Ns Ar filesystem
-.Nm
-.Cm jail
-.Ar jailid Ns | Ns Ar jailname filesystem
-.Nm
-.Cm unjail
-.Ar jailid Ns | Ns Ar jailname filesystem
 .Sh DESCRIPTION
 The
 .Nm
@@ -445,32 +439,6 @@ If a file system's mount point is set to
 .Tn ZFS
 makes no attempt to manage the file system, and the administrator is
 responsible for mounting and unmounting the file system.
-.Ss Jails
-.No A Tn ZFS
-dataset can be attached to a jail by using the
-.Qq Nm Cm jail
-subcommand. You cannot attach a dataset to one jail and the children of the
-same dataset to another jails. To allow management of the dataset from within
-a jail, the
-.Sy jailed
-property has to be set and the jail needs access to the
-.Pa /dev/zfs
-device. The
-.Sy quota
-property cannot be changed from within a jail. See
-.Xr jail 8
-for information on how to allow mounting
-.Tn ZFS
-datasets from within a jail.
-.Pp
-.No A Tn ZFS
-dataset can be detached from a jail using the
-.Qq Nm Cm unjail
-subcommand.
-.Pp
-After a dataset is attached to a jail and the jailed property is set, a jailed
-file system cannot be mounted outside the jail, since the jail administrator
-might have set the mount point to an unacceptable value.
 .Ss Deduplication
 Deduplication is the process for removing redundant data at the block-level,
 reducing the total amount of data stored. If a file system has the
@@ -1070,7 +1038,7 @@ signature to make sure the block content
 The
 .Sy devices
 property is currently not supported on
-.Fx .
+.Nx .
 .It Sy exec Ns = Ns Cm on | off
 Controls whether processes can be executed from within this file system. The
 default value is
@@ -1079,7 +1047,7 @@ default value is
 The
 .Sy mlslabel
 property is currently not supported on
-.Fx .
+.Nx .
 .It Sy filesystem_limit Ns = Ns Ar count | Cm none
 Limits the number of filesystems and volumes that can exist under this point in
 the dataset tree.
@@ -1118,7 +1086,7 @@ shared file systems are unshared and sha
 The
 .Sy nbmand
 property is currently not supported on
-.Fx .
+.Nx .
 .It Sy primarycache Ns = Ns Cm all | none | metadata
 Controls what is cached in the primary cache (ARC). If this property is set to
 .Cm all ,
@@ -1343,7 +1311,7 @@ bit is respected for the file system. Th
 The
 .Sy sharesmb
 property currently has no effect on
-.Fx .
+.Nx .
 .It Sy sharenfs Ns = Ns Cm on | off | Ar opts
 Controls whether the file system is shared via
 .Tn NFS ,
@@ -1493,17 +1461,12 @@ during volume creation and pool import.
 The
 .Sy vscan
 property is currently not supported on
-.Fx .
+.Nx .
 .It Sy xattr Ns = Ns Cm off | on
 The
 .Sy xattr
 property is currently not supported on
-.Fx .
-.It Sy jailed Ns = Ns Cm off | on
-Controls whether the dataset is managed from a jail. See the
-.Qq Sx Jails
-section for more information. The default value is
-.Cm off .
+.Nx .
 .El
 .Pp
 The following three properties cannot be changed after the file system is
@@ -2360,7 +2323,7 @@ The default is
 The default can be changed to include group types.
 .It Fl i
 Translate SID to POSIX ID. This flag currently has no effect on
-.Fx .
+.Nx .
 .El
 .It Xo
 .Nm
@@ -2405,7 +2368,7 @@ file systems.
 Report mount progress.
 .It Fl O
 Perform an overlay mount. Overlay mounts are not supported on
-.Fx .
+.Nx .
 .It Fl o Ar property Ns Oo , Ns Ar property Oc Ns ...
 An optional, comma-separated list of mount options to use temporarily for the
 duration of the mount. See the
@@ -2416,7 +2379,7 @@ Mount all available
 .Tn ZFS
 file systems.
 This command may be executed on
-.Fx
+.Nx
 system startup by
 .Pa /etc/rc.d/zfs .
 For more information, see variable
@@ -2467,7 +2430,7 @@ file systems that have the
 .Sy sharenfs
 property set.
 This command may be executed on
-.Fx
+.Nx
 system startup by
 .Pa /etc/rc.d/zfs .
 For more information, see variable
@@ -2500,7 +2463,7 @@ file systems that have the
 .Sy sharenfs
 property set.
 This command may be executed on
-.Fx
+.Nx
 system shutdown by
 .Pa /etc/rc.d/zfs .
 For more information, see variable
@@ -3034,7 +2997,6 @@ protocol
 .It exec Ta property
 .It filesystem_limit Ta 

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2021-04-21 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Apr 21 10:02:34 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c

Log Message:
Prevent blocking l2arc_feed_thread() forever, skip the
cv_timedwait() for negative or zero ticks.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.19 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.20
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.19	Thu Jun 11 19:20:42 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c	Wed Apr 21 10:02:34 2021
@@ -7246,8 +7246,15 @@ l2arc_feed_thread(void *dummy __unused)
 
 	while (l2arc_thread_exit == 0) {
 		CALLB_CPR_SAFE_BEGIN();
+#ifdef __NetBSD__
+		clock_t now = ddi_get_lbolt();
+		if (next > now)
+			(void) cv_timedwait(_feed_thr_cv,
+			_feed_thr_lock, next - now);
+#else
 		(void) cv_timedwait(_feed_thr_cv, _feed_thr_lock,
 		next - ddi_get_lbolt());
+#endif
 		CALLB_CPR_SAFE_END(, _feed_thr_lock);
 		next = ddi_get_lbolt() + hz;
 



CVS commit: src/external/cddl/osnet/dist/tools/ctf/cvt

2021-03-31 Thread Simon Burge
Module Name:src
Committed By:   simonb
Date:   Wed Mar 31 06:26:27 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/tools/ctf/cvt: dwarf.c

Log Message:
Simplify the CTF float encoding type logic: all floating point types of
4 bytes or less are "float", 8 bytes or less are "double" and 16 bytes
or less are "long double".  Make ctfconvert much happier with N32 ABI
where we have 4 byte pointers and 16 byte long doubles.  Will also help
ctfconvert if ever used on m68k or 32-bit RISC-V.

@christos: LGTM


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c

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

Modified files:

Index: src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c
diff -u src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c:1.25 src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c:1.26
--- src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c:1.25	Mon May 28 21:05:06 2018
+++ src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c	Wed Mar 31 06:26:27 2021
@@ -1419,41 +1419,53 @@ die_base_name_parse(const char *name, ch
 	return (intr);
 }
 
+/*
+ * Return the CTF float encoding type.  The logic is all floating
+ * point types of 4 bytes or less are "float", 8 bytes or less are
+ * "double" and 16 bytes or less are "long double".  Anything bigger
+ * will error.
+ */
+#define	FLOAT_SIZE_SINGLE	 4
+#define	FLOAT_SIZE_DOUBLE	 8
+#define	FLOAT_SIZE_LONG_DOUBLE	16
+
 typedef struct fp_size_map {
-	size_t fsm_typesz[2];	/* size of {32,64} type */
+	size_t fsm_typesz;	/* size of type */
 	uint_t fsm_enc[3];	/* CTF_FP_* for {bare,cplx,imagry} type */
 } fp_size_map_t;
 
 static const fp_size_map_t fp_encodings[] = {
-	{ { 4, 4 }, { CTF_FP_SINGLE, CTF_FP_CPLX, CTF_FP_IMAGRY } },
-	{ { 8, 8 }, { CTF_FP_DOUBLE, CTF_FP_DCPLX, CTF_FP_DIMAGRY } },
-#ifdef __sparc
-	{ { 16, 16 }, { CTF_FP_LDOUBLE, CTF_FP_LDCPLX, CTF_FP_LDIMAGRY } },
-#else
-	{ { 12, 16 }, { CTF_FP_LDOUBLE, CTF_FP_LDCPLX, CTF_FP_LDIMAGRY } },
-#endif
-	{ { 0, 0 }, { 0, 0, 0 } }
+	{ FLOAT_SIZE_SINGLE, { CTF_FP_SINGLE, CTF_FP_CPLX, CTF_FP_IMAGRY } },
+	{ FLOAT_SIZE_DOUBLE, { CTF_FP_DOUBLE, CTF_FP_DCPLX, CTF_FP_DIMAGRY } },
+	{ FLOAT_SIZE_LONG_DOUBLE,
+	{ CTF_FP_LDOUBLE, CTF_FP_LDCPLX, CTF_FP_LDIMAGRY } },
+	{ 0, { 0, 0, 0 } }
 };
 
 static uint_t
 die_base_type2enc(dwarf_t *dw, Dwarf_Off off, Dwarf_Signed enc, size_t sz)
 {
 	const fp_size_map_t *map = fp_encodings;
-	uint_t szidx = dw->dw_ptrsz == sizeof (uint64_t);
 	uint_t mult = 1, col = 0;
 
-	if (enc == DW_ATE_complex_float) {
+	switch (enc) {
+	case DW_ATE_complex_float:
+#if defined(DW_ATE_SUN_interval_float)
+	case DW_ATE_SUN_interval_float:
+#endif
 		mult = 2;
 		col = 1;
-	} else if (enc == DW_ATE_imaginary_float
-#if defined(sun)
-	|| enc == DW_ATE_SUN_imaginary_float
+		break;
+	case DW_ATE_imaginary_float:
+#if defined(DW_ATE_SUN_imaginary_float)
+	case DW_ATE_SUN_imaginary_float:
 #endif
-	)
 		col = 2;
+		break;
+	}
 
-	while (map->fsm_typesz[szidx] != 0) {
-		if (map->fsm_typesz[szidx] * mult == sz)
+	while (map->fsm_typesz != 0) {
+		if (sz <= map->fsm_typesz * mult)
 			return (map->fsm_enc[col]);
 		map++;
 	}



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2021-03-25 Thread Greg Troxel
Module Name:src
Committed By:   gdt
Date:   Thu Mar 25 18:41:29 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c

Log Message:
zfs_ioctl.c: Drop WARNING that ZFS is under development

Following discussions on current-users@, it seems many rely on ZFS to
store data, and there are not particularly large issues with ZFS.  ATF
tests with /tmp as tmpfs, ffs2, and zfs are similar, with only a
slight increase in failures under zfs.

(This commit should probably NOT be pulled up to 9.)


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.22 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.23
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.22	Fri Feb 28 03:52:26 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c	Thu Mar 25 18:41:29 2021
@@ -7194,7 +7194,6 @@ zfs_modcmd(modcmd_t cmd, void *arg)
 		/* XXXNETBSD trim is not supported yet */
 		zfs_trim_enabled = B_FALSE;
 
-		printf("WARNING: ZFS on NetBSD is under development\n");
 		availrmem = (uint64_t)physmem * PAGE_SIZE / 1048576;
 		if (availrmem < ZFS_MIN_MEGS * 80 / 100) {
 			printf("ERROR: at least %dMB of memory required to "



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys

2021-02-16 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Feb 16 09:54:17 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_context.h

Log Message:
Use the right uid / gid for nobody:nobody like FreeBSD does.

Prevents null pointer dereferences when ZFS replaces this
illegal (according to IS_EPHEMERAL()) id with another
illegal id in operation zfs_fuid_create_cred() and
finally zfs_log_create() dereferences fuidp being NULL.

Adresses PR misc/55042 (Panic when creating a directory on a NFS served ZFS)


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h:1.2	Sat Jun 22 09:48:39 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h	Tue Feb 16 09:54:17 2021
@@ -157,13 +157,13 @@ extern "C" {
 #define fm_panic			panic
 #define getffd_getfile
 #define getminor(a)			minor(a)
-#define GID_NOBODY			(-2)
+#define GID_NOBODY			(39)
 #define issig(x)			(sigispending(curlwp, 0))
 #define kmem_debugging()		0
 #define releasef			fd_putfile
 #define strfree(str)			kmem_free((str), strlen(str)+1)
 #define td_rul_ru
-#define UID_NOBODY			(-2)
+#define UID_NOBODY			(32767)
 #define vnode_pager_setsize(vp, size)	zfs_netbsd_setsize(vp, size)
 #define zone_get_hostid(a)		0
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-11-28 Thread Yorick Hardy
Module Name:src
Committed By:   yhardy
Date:   Sat Nov 28 22:53:06 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
Use vn_close to release the vnodes in the error handling blocks, since
the vnodes were opened for writing. Fix proposed on current-users
and improved by hannken@.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.19
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18	Thu Jun 25 09:39:15 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Sat Nov 28 22:53:06 2020
@@ -215,7 +215,11 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 		return (SET_ERROR(error));
 	}
 	if (vp->v_type != VBLK) {
+#ifdef __NetBSD__
+		vn_close(vp, FREAD|FWRITE, kcred);
+#else
 		vrele(vp);
+#endif
 		vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
 		return (SET_ERROR(EINVAL));
 	}
@@ -247,7 +251,11 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 	error = workqueue_create(>vd_wq, "vdevsync",
 	vdev_disk_flush, dvd, PRI_NONE, IPL_NONE, WQ_MPSAFE);
 	if (error != 0) {
+#ifdef __NetBSD__
+		vn_close(vp, FREAD|FWRITE, kcred);
+#else
 		vrele(vp);
+#endif
 		return (SET_ERROR(error));
 	}
 



CVS commit: src/external/cddl/osnet/dist/uts/common/dtrace

2020-11-16 Thread Chuck Silvers
Module Name:src
Committed By:   chs
Date:   Tue Nov 17 03:20:33 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/dtrace: dtrace.c

Log Message:
Remove a pointless printf.


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 \
src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c
diff -u src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.40 src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.41
--- src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.40	Sat May 23 23:42:41 2020
+++ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c	Tue Nov 17 03:20:33 2020
@@ -13840,7 +13840,6 @@ doferr:
 	return (NULL);
 #endif /* __FreeBSD__ */
 #ifdef __NetBSD__
-	printf("dtrace: XXX %s not implemented (name=%s)\n", __func__, name);
 	return (NULL);
 #endif /* __NetBSD__ */
 }



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-11-14 Thread Chuck Silvers
Module Name:src
Committed By:   chs
Date:   Sun Nov 15 00:54:13 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Commit the ZFS file that I forgot in this previous commit:

Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately.  Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.
In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors.  Fixes PR 55702.


To generate a diff of this commit:
cvs rdiff -u -r1.70 -r1.71 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.70 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.71
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.70	Thu Aug 27 09:57:33 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sun Nov 15 00:54:13 2020
@@ -6049,20 +6049,13 @@ zfs_netbsd_getpages(void *v)
 			PAGE_SIZE, va, DMU_READ_PREFETCH);
 			zfs_unmap_page(pg, va);
 
-			rw_enter(rw, RW_WRITER);
 			if (err != 0) {
-for (i = 0; i < npages; i++) {
-	pg = ap->a_m[i];
-	if ((pg->flags & PG_FAKE) != 0) {
-		uvm_pagefree(pg);
-	} else {
-		uvm_page_unbusy(, 1);
-	}
-}
+uvm_aio_aiodone_pages(ap->a_m, npages, false, err);
 memset(ap->a_m, 0, sizeof(ap->a_m[0]) *
 npages);
 break;
 			}
+			rw_enter(rw, RW_WRITER);
 			pg->flags &= ~(PG_FAKE);
 		}
 
@@ -6089,14 +6082,13 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 	voff_t		len, klen;
 	int		err;
 
-	bool async = (flags & PGO_SYNCIO) == 0;
 	bool *cleanedp;
 	struct uvm_object *uobj = >v_uobj;
 	krwlock_t *rw = uobj->vmobjlock;
 
 	if (zp->z_sa_hdl == NULL) {
 		err = 0;
-		goto out_unbusy;
+		goto out;
 	}
 
 	/*
@@ -6170,12 +6162,8 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 	}
 	dmu_tx_commit(tx);
 
-out_unbusy:
-	rw_enter(rw, RW_WRITER);
-	uvm_page_unbusy(pp, count);
-	rw_exit(rw);
-
 out:
+	uvm_aio_aiodone_pages(pp, count, true, err);
 	return (err);
 }
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-10-09 Thread Frank Kardel
Module Name:src
Committed By:   kardel
Date:   Fri Oct  9 08:18:01 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_tx.c

Log Message:
PR kern/55705:
don't attempt to sleep for negative time, we are late anyway - avoids 
DIAGNOSTIC panic


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.6
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.5	Mon Mar  9 15:37:46 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c	Fri Oct  9 08:18:01 2020
@@ -1153,6 +1153,9 @@ dmu_tx_delay(dmu_tx_t *tx, uint64_t dirt
 #ifdef __NetBSD__
 	int timo = (wakeup - now) * hz / 10;
 
+	if (timo < 0)
+		return;
+
 	if (timo == 0)
 		timo = 1;
 	kpause("dmu_tx_delay", false, timo, NULL);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-09-07 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Mon Sep  7 19:04:27 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: dnode_sync.c

Log Message:
Comment out index out of bounds debugging code.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c:1.7
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c:1.6	Mon May 28 17:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c	Mon Sep  7 15:04:27 2020
@@ -689,6 +689,7 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx)
 			bzero(dnp->dn_blkptr + dnp->dn_nblkptr,
 			sizeof (blkptr_t) *
 			(dn->dn_next_nblkptr[txgoff] - dnp->dn_nblkptr));
+#ifdef notyet /* XXX: gcc-9 */
 #ifdef ZFS_DEBUG
 		} else {
 			int i;
@@ -698,6 +699,7 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx)
 			i < dnp->dn_nblkptr; i++)
 ASSERT(BP_IS_HOLE(>dn_blkptr[i]));
 #endif
+#endif
 		}
 		mutex_enter(>dn_mtx);
 		dnp->dn_nblkptr = dn->dn_next_nblkptr[txgoff];



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-09-07 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Mon Sep  7 07:44:53 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_raidz.c

Log Message:
i can't confirm or deny that GCC 9 is wrong about parity_valid[]
having uninitialised members, but since setting up reconstruct
isn't a hot path, just zero init the whole thing to be sure.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c:1.2	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c	Mon Sep  7 07:44:53 2020
@@ -1412,7 +1412,7 @@ vdev_raidz_reconstruct(raidz_map_t *rm, 
 	int i, c;
 	int code;
 	int nbadparity, nbaddata;
-	int parity_valid[VDEV_RAIDZ_MAXPARITY];
+	int parity_valid[VDEV_RAIDZ_MAXPARITY] = {0};
 
 	/*
 	 * The tgts list must already be sorted.



CVS commit: src/external/cddl/osnet/dist/lib/libdtrace/common

2020-09-06 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sun Sep  6 21:49:32 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/lib/libdtrace/common: dt_subr.c

Log Message:
Adjust string sizes


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/external/cddl/osnet/dist/lib/libdtrace/common/dt_subr.c

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

Modified files:

Index: src/external/cddl/osnet/dist/lib/libdtrace/common/dt_subr.c
diff -u src/external/cddl/osnet/dist/lib/libdtrace/common/dt_subr.c:1.13 src/external/cddl/osnet/dist/lib/libdtrace/common/dt_subr.c:1.14
--- src/external/cddl/osnet/dist/lib/libdtrace/common/dt_subr.c:1.13	Mon May 28 17:05:05 2018
+++ src/external/cddl/osnet/dist/lib/libdtrace/common/dt_subr.c	Sun Sep  6 17:49:32 2020
@@ -956,7 +956,7 @@ int
 dtrace_uaddr2str(dtrace_hdl_t *dtp, pid_t pid,
 uint64_t addr, char *str, int nbytes)
 {
-	char name[PATH_MAX], objname[PATH_MAX], c[PATH_MAX * 2];
+	char name[PATH_MAX / 2], objname[PATH_MAX], c[PATH_MAX * 2];
 	struct ps_prochandle *P = NULL;
 	GElf_Sym sym;
 	char *obj;
@@ -977,8 +977,8 @@ dtrace_uaddr2str(dtrace_hdl_t *dtp, pid_
 		obj = dt_basename(objname);
 
 		if (addr > sym.st_value) {
-			(void) snprintf(c, sizeof (c), "%s`%s+0x%llx", obj,
-			name, (u_longlong_t)(addr - sym.st_value));
+			(void) snprintf(c, sizeof (c), "%s`%s+0x%jx", obj,
+			name, (uintmax_t)(addr - sym.st_value));
 		} else {
 			(void) snprintf(c, sizeof (c), "%s`%s", obj, name);
 		}



CVS commit: src/external/cddl/osnet/dist/lib/libdtrace/common

2020-09-06 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sun Sep  6 21:49:44 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/lib/libdtrace/common: dt_options.c

Log Message:
Stop using alloca


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/external/cddl/osnet/dist/lib/libdtrace/common/dt_options.c

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

Modified files:

Index: src/external/cddl/osnet/dist/lib/libdtrace/common/dt_options.c
diff -u src/external/cddl/osnet/dist/lib/libdtrace/common/dt_options.c:1.8 src/external/cddl/osnet/dist/lib/libdtrace/common/dt_options.c:1.9
--- src/external/cddl/osnet/dist/lib/libdtrace/common/dt_options.c:1.8	Mon May 28 17:05:05 2018
+++ src/external/cddl/osnet/dist/lib/libdtrace/common/dt_options.c	Sun Sep  6 17:49:44 2020
@@ -904,8 +904,9 @@ dt_options_load(dtrace_hdl_t *dtp)
 	if (hdr.dofh_loadsz < sizeof (dof_hdr_t))
 		return (dt_set_errno(dtp, EINVAL));
 
-	dof = alloca(hdr.dofh_loadsz);
-	bzero(dof, sizeof (dof_hdr_t));
+	dof = calloc(hdr.dofh_loadsz, 1);
+	if (dof == NULL)
+		return (dt_set_errno(dtp, errno));
 	dof->dofh_loadsz = hdr.dofh_loadsz;
 
 	for (i = 0; i < DTRACEOPT_MAX; i++)
@@ -916,7 +917,10 @@ dt_options_load(dtrace_hdl_t *dtp)
 #else
 	if (dt_ioctl(dtp, DTRACEIOC_DOFGET, ) == -1)
 #endif
+	{
+		free(dof);
 		return (dt_set_errno(dtp, errno));
+	}
 
 	for (i = 0; i < dof->dofh_secnum; i++) {
 		sec = (dof_sec_t *)(uintptr_t)((uintptr_t)dof +
@@ -940,7 +944,7 @@ dt_options_load(dtrace_hdl_t *dtp)
 
 		dtp->dt_options[opt->dofo_option] = opt->dofo_value;
 	}
-
+	free(dof);
 	return (0);
 }
 



CVS commit: src/external/cddl/osnet/dist/lib/libctf/common

2020-09-06 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sun Sep  6 16:44:17 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/lib/libctf/common: ctf_lib.c

Log Message:
fix zeroing


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/external/cddl/osnet/dist/lib/libctf/common/ctf_lib.c

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

Modified files:

Index: src/external/cddl/osnet/dist/lib/libctf/common/ctf_lib.c
diff -u src/external/cddl/osnet/dist/lib/libctf/common/ctf_lib.c:1.8 src/external/cddl/osnet/dist/lib/libctf/common/ctf_lib.c:1.9
--- src/external/cddl/osnet/dist/lib/libctf/common/ctf_lib.c:1.8	Thu Aug 20 11:54:11 2020
+++ src/external/cddl/osnet/dist/lib/libctf/common/ctf_lib.c	Sun Sep  6 12:44:16 2020
@@ -234,7 +234,7 @@ ctf_fdopen(int fd, int *errp)
 	bzero(, sizeof (ctf_sect_t));
 	bzero(, sizeof (ctf_sect_t));
 	bzero(, sizeof (ctf_sect_t));
-	bzero(, sizeof (hdr));
+	bzero(, sizeof (hdr));
 
 	if (fstat64(fd, ) == -1)
 		return (ctf_set_open_errno(errp, errno));



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-08-27 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Aug 27 09:57:34 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c
zfs_vnops.c zfs_znode.c

Log Message:
Enable NCLOOKUP for ZFS.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.69 -r1.70 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.33 -r1.34 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.28 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.29
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.28	Tue May 26 08:39:27 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Thu Aug 27 09:57:33 2020
@@ -1517,7 +1517,7 @@ zfs_domount(vfs_t *vfsp, char *osname)
 #endif
 #ifdef __NetBSD__
 	vfsp->mnt_flag |= MNT_LOCAL;
-	vfsp->mnt_iflag |= IMNT_MPSAFE;
+	vfsp->mnt_iflag |= IMNT_MPSAFE | IMNT_NCLOOKUP;
 #endif
 
 	/*
@@ -2078,7 +2078,7 @@ zfs_mount(vfs_t *vfsp, const char *path,
 	vfsp->vfs_flag |= MNT_NFS4ACLS;
 #endif
 #ifdef __NetBSD__
-	vfsp->mnt_iflag |= IMNT_MPSAFE;
+	vfsp->mnt_iflag |= IMNT_MPSAFE | IMNT_NCLOOKUP;
 #endif
 
 	/*

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.69 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.70
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.69	Thu May 21 20:43:23 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Aug 27 09:57:33 2020
@@ -1354,6 +1354,10 @@ zfs_write(vnode_t *vp, uio_t *uio, int i
 			newmode = zp->z_mode;
 			(void) sa_update(zp->z_sa_hdl, SA_ZPL_MODE(zfsvfs),
 			(void *), sizeof (uint64_t), tx);
+#ifdef __NetBSD__
+			cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid,
+			true);
+#endif
 		}
 		mutex_exit(>z_acl_lock);
 
@@ -5645,8 +5649,11 @@ zfs_netbsd_setattr(void *v)
 	}
 
 	error = zfs_setattr(vp, (vattr_t *), flags, cred, NULL);
-	if (error == 0)
-		VN_KNOTE(vp, NOTE_ATTRIB);
+	if (error)
+		return error;
+
+	VN_KNOTE(vp, NOTE_ATTRIB);
+	cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, true);
 
 	return error;
 }

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.33 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.34
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.33	Thu May  7 09:13:06 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Thu Aug 27 09:57:33 2020
@@ -871,6 +871,7 @@ zfs_loadvnode(struct mount *mp, struct v
 		return (SET_ERROR(ENOENT));
 	}
 	ASSERT(zp == VTOZ(vp));
+	cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, true);
 
 	ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
 
@@ -891,6 +892,8 @@ zfs_newvnode(struct mount *mp, vnode_t *
 
 	zfs_mknode1(dzp, vap, tx, cr, flag, , acl_ids, vp);
 	ASSERT(zp == VTOZ(vp));
+	cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, true);
+
 	*key_len = sizeof(zp->z_id);
 	*new_key = >z_id;
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-27 Thread Jaromir Dolecek
Module Name:src
Committed By:   jdolecek
Date:   Sat Jun 27 21:21:11 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_queue.c

Log Message:
fix bug introduced in conversion to kmem(9), passing address of the local
variable instead of pointer to allocated memory

should fix PR kern/55426 by Andreas Gustafsson


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.2	Wed Jun 24 16:16:01 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c	Sat Jun 27 21:21:11 2020
@@ -820,7 +820,7 @@ again:
 	search = kmem_zalloc(sizeof (*search), KM_NOSLEEP);
 	if (search) {
 		search->io_offset = vq->vq_last_offset + 1;
-		VERIFY3P(avl_find(tree, , ), ==, NULL);
+		VERIFY3P(avl_find(tree, search, ), ==, NULL);
 		kmem_free(search, sizeof (*search));
 		zio = avl_nearest(tree, idx, AVL_AFTER);
 	} else {



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-25 Thread Michael van Elst
Module Name:src
Committed By:   mlelstv
Date:   Thu Jun 25 09:39:15 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
Don't assume everything is a wedge and has a parent device. On non-wedges
this crashes.

Instead, just talk to the referenced device and rely on the dk driver
to pass requests correctly.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17	Sun Jun 21 21:29:11 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Thu Jun 25 09:39:15 2020
@@ -222,19 +222,18 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 
 	pdk = NULL;
 	if (getdiskinfo(vp, ) == 0)
-		pdk = disk_find(dkw.dkw_parent);
+		pdk = disk_find(dkw.dkw_devname);
 
 	/* XXXNETBSD Once tls-maxphys gets merged this block becomes:
 		dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS);
 	*/
 	{
 		struct buf buf = {
+			.b_dev = vp->v_rdev,
 			.b_bcount = MAXPHYS,
 		};
-		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) {
-			buf.b_dev = pdk->dk_rawvp->v_rdev;
+		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
 			(*pdk->dk_driver->d_minphys)();
-		}
 		dvd->vd_maxphys = buf.b_bcount;
 	}
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-24 Thread Jaromir Dolecek
Module Name:src
Committed By:   jdolecek
Date:   Wed Jun 24 16:29:34 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: dsl_scan.c

Log Message:
reduce stack usage in dsl_scan_recurse() - allocate memory for
temporary zbookmark_phys_t using kmem_alloc() rather than stack;
this recuses several times usually, and this saves 2x
sizeof(zbookmark_phys_t) == 64 bytes per recursion

part of fix for PR kern/55402 by Frank Kardel


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.2	Wed Jun 24 16:23:16 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c	Wed Jun 24 16:29:34 2020
@@ -397,7 +397,7 @@ static void dsl_scan_visitbp(blkptr_t *b
 dmu_objset_type_t ostype, dmu_tx_t *tx);
 static void dsl_scan_visitdnode(dsl_scan_t *, dsl_dataset_t *ds,
 dmu_objset_type_t ostype,
-dnode_phys_t *dnp, uint64_t object, dmu_tx_t *tx);
+dnode_phys_t *dnp, uint64_t object, dmu_tx_t *tx, zbookmark_phys_t *);
 
 void
 dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bp)
@@ -585,9 +585,8 @@ dsl_scan_zil(dsl_pool_t *dp, zil_header_
 /* ARGSUSED */
 static void
 dsl_scan_prefetch(dsl_scan_t *scn, arc_buf_t *buf, blkptr_t *bp,
-uint64_t objset, uint64_t object, uint64_t blkid)
+uint64_t objset, uint64_t object, uint64_t blkid, zbookmark_phys_t *czb)
 {
-	zbookmark_phys_t czb;
 	arc_flags_t flags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH;
 
 	if (zfs_no_scrub_prefetch)
@@ -597,11 +596,11 @@ dsl_scan_prefetch(dsl_scan_t *scn, arc_b
 	(BP_GET_LEVEL(bp) == 0 && BP_GET_TYPE(bp) != DMU_OT_DNODE))
 		return;
 
-	SET_BOOKMARK(, objset, object, BP_GET_LEVEL(bp), blkid);
+	SET_BOOKMARK(czb, objset, object, BP_GET_LEVEL(bp), blkid);
 
 	(void) arc_read(scn->scn_zio_root, scn->scn_dp->dp_spa, bp,
 	NULL, NULL, ZIO_PRIORITY_ASYNC_READ,
-	ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD, , );
+	ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD, , czb);
 }
 
 static boolean_t
@@ -659,6 +658,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 		blkptr_t *cbp;
 		int epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT;
 		arc_buf_t *buf;
+		zbookmark_phys_t *czb;
 
 		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, ,
 		ZIO_PRIORITY_ASYNC_READ, zio_flags, , zb);
@@ -666,19 +666,19 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 			scn->scn_phys.scn_errors++;
 			return (err);
 		}
+		czb = kmem_alloc(sizeof (*czb), KM_SLEEP);
 		for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) {
 			dsl_scan_prefetch(scn, buf, cbp, zb->zb_objset,
-			zb->zb_object, zb->zb_blkid * epb + i);
+			zb->zb_object, zb->zb_blkid * epb + i, czb);
 		}
 		for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) {
-			zbookmark_phys_t czb;
-
-			SET_BOOKMARK(, zb->zb_objset, zb->zb_object,
+			SET_BOOKMARK(czb, zb->zb_objset, zb->zb_object,
 			zb->zb_level - 1,
 			zb->zb_blkid * epb + i);
-			dsl_scan_visitbp(cbp, , dnp,
+			dsl_scan_visitbp(cbp, czb, dnp,
 			ds, scn, ostype, tx);
 		}
+		kmem_free(czb, sizeof (*czb));
 		arc_buf_destroy(buf, );
 	} else if (BP_GET_TYPE(bp) == DMU_OT_DNODE) {
 		arc_flags_t flags = ARC_FLAG_WAIT;
@@ -686,6 +686,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 		int i, j;
 		int epb = BP_GET_LSIZE(bp) >> DNODE_SHIFT;
 		arc_buf_t *buf;
+		zbookmark_phys_t *czb;
 
 		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, ,
 		ZIO_PRIORITY_ASYNC_READ, zio_flags, , zb);
@@ -693,23 +694,27 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 			scn->scn_phys.scn_errors++;
 			return (err);
 		}
+		czb = kmem_alloc(sizeof (*czb), KM_SLEEP);
 		for (i = 0, cdnp = buf->b_data; i < epb; i++, cdnp++) {
 			for (j = 0; j < cdnp->dn_nblkptr; j++) {
 blkptr_t *cbp = >dn_blkptr[j];
 dsl_scan_prefetch(scn, buf, cbp,
-zb->zb_objset, zb->zb_blkid * epb + i, j);
+zb->zb_objset, zb->zb_blkid * epb + i, j,
+czb);
 			}
 		}
 		for (i = 0, cdnp = buf->b_data; i < epb; i++, cdnp++) {
 			dsl_scan_visitdnode(scn, ds, ostype,
-			cdnp, zb->zb_blkid * epb + i, tx);
+			cdnp, zb->zb_blkid * epb + i, tx, czb);
 		}
+		kmem_free(czb, sizeof (*czb));
 
 		arc_buf_destroy(buf, );
 	} else if (BP_GET_TYPE(bp) == DMU_OT_OBJSET) {
 		arc_flags_t flags = ARC_FLAG_WAIT;
 		objset_phys_t *osp;
 		arc_buf_t *buf;
+		zbookmark_phys_t *czb;
 
 		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, ,
 		ZIO_PRIORITY_ASYNC_READ, zio_flags, , zb);
@@ -720,8 +725,9 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 
 		osp = buf->b_data;
 
+		czb = kmem_alloc(sizeof (*czb), KM_SLEEP);
 		

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-24 Thread Jaromir Dolecek
Module Name:src
Committed By:   jdolecek
Date:   Wed Jun 24 16:23:16 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: dsl_scan.c

Log Message:
change dsl_scan_visitbp() to allocate blkptr_t dynamically rather than
on-stack - this function is called recursively, and the 120 bytes per call
add up; also remove unused variable

part of fix for PR kern/55402 by Frank Kardel


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.1.1.1 src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.2
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.1.1.1	Mon May 28 20:52:57 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c	Wed Jun 24 16:23:16 2020
@@ -778,10 +778,7 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo
 dmu_objset_type_t ostype, dmu_tx_t *tx)
 {
 	dsl_pool_t *dp = scn->scn_dp;
-	arc_buf_t *buf = NULL;
-	blkptr_t bp_toread = *bp;
-
-	/* ASSERT(pbuf == NULL || arc_released(pbuf)); */
+	blkptr_t *bp_toread = NULL;
 
 	if (dsl_scan_check_pause(scn, zb))
 		return;
@@ -803,8 +800,11 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo
 	if (bp->blk_birth <= scn->scn_phys.scn_cur_min_txg)
 		return;
 
-	if (dsl_scan_recurse(scn, ds, ostype, dnp, _toread, zb, tx) != 0)
-		return;
+	bp_toread = kmem_alloc(sizeof (blkptr_t), KM_SLEEP);
+	*bp_toread = *bp;
+
+	if (dsl_scan_recurse(scn, ds, ostype, dnp, bp_toread, zb, tx) != 0)
+		goto out;
 
 	/*
 	 * If dsl_scan_ddt() has aready visited this block, it will have
@@ -813,8 +813,7 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo
 	 */
 	if (ddt_class_contains(dp->dp_spa,
 	scn->scn_phys.scn_ddt_class_max, bp)) {
-		ASSERT(buf == NULL);
-		return;
+		goto out;
 	}
 
 	/*
@@ -827,6 +826,9 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo
 	if (BP_PHYSICAL_BIRTH(bp) <= scn->scn_phys.scn_cur_max_txg) {
 		scan_funcs[scn->scn_phys.scn_func](dp, bp, zb);
 	}
+
+out:
+	kmem_free(bp_toread, sizeof (blkptr_t));
 }
 
 static void



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-24 Thread Jaromir Dolecek
Module Name:src
Committed By:   jdolecek
Date:   Wed Jun 24 16:16:01 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_queue.c

Log Message:
reduce stack usage in vdev_queue_io_to_issue() - zio_t is about 1KB, and
the function potentially recurses into itself

part of fix for PR kern/55402 by Frank Kardel


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.3 -r1.2 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.1.1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.2
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.1.1.3	Mon May 28 20:52:59 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c	Wed Jun 24 16:16:01 2020
@@ -798,7 +798,7 @@ vdev_queue_io_to_issue(vdev_queue_t *vq)
 	zio_priority_t p;
 	avl_index_t idx;
 	avl_tree_t *tree;
-	zio_t search;
+	zio_t *search;
 
 again:
 	ASSERT(MUTEX_HELD(>vq_lock));
@@ -817,10 +817,16 @@ again:
 	 * For FIFO queues (sync), issue the i/o with the lowest timestamp.
 	 */
 	tree = vdev_queue_class_tree(vq, p);
-	search.io_timestamp = 0;
-	search.io_offset = vq->vq_last_offset + 1;
-	VERIFY3P(avl_find(tree, , ), ==, NULL);
-	zio = avl_nearest(tree, idx, AVL_AFTER);
+	search = kmem_zalloc(sizeof (*search), KM_NOSLEEP);
+	if (search) {
+		search->io_offset = vq->vq_last_offset + 1;
+		VERIFY3P(avl_find(tree, , ), ==, NULL);
+		kmem_free(search, sizeof (*search));
+		zio = avl_nearest(tree, idx, AVL_AFTER);
+	} else {
+		/* Can't find nearest, fallback to first */
+		zio = NULL;
+	}
 	if (zio == NULL)
 		zio = avl_first(tree);
 	ASSERT3U(zio->io_priority, ==, p);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-21 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Jun 21 21:29:11 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
If calling d_minphys on the parent disk device, make sure we use the
parent disk device's dev_t. Fixes zfs on wedges on ld(4).

XXX pullup-9


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.16 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.16	Wed Apr 29 04:30:40 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Sun Jun 21 21:29:11 2020
@@ -229,11 +229,12 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 	*/
 	{
 		struct buf buf = {
-			.b_dev = vp->v_rdev,
 			.b_bcount = MAXPHYS,
 		};
-		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
+		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) {
+			buf.b_dev = pdk->dk_rawvp->v_rdev;
 			(*pdk->dk_driver->d_minphys)();
+		}
 		dvd->vd_maxphys = buf.b_bcount;
 	}
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-06-19 Thread Jaromir Dolecek
Module Name:src
Committed By:   jdolecek
Date:   Fri Jun 19 14:13:23 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zio.c

Log Message:
use pool_cache for (meta)data buffers also on NetBSD

this should generally slightly improve performance on MP systems, and
specifically for xbd(4) storage avoids slow unaligned I/O buffer handling

this change requires updated kernel, to allow up to SPA_MAXBLOCKSHIFT item
size for pools

fixes PR kern/55397 by Frank Kardel


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c:1.7
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c:1.6	Tue May  7 08:49:59 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c	Fri Jun 19 14:13:23 2020
@@ -46,7 +46,7 @@
 SYSCTL_DECL(_vfs_zfs);
 SYSCTL_NODE(_vfs_zfs, OID_AUTO, zio, CTLFLAG_RW, 0, "ZFS ZIO");
 #ifdef __NetBSD__
-const int zio_use_uma = 0;
+const int zio_use_uma = 1;
 #else
 #if defined(__amd64__)
 static int zio_use_uma = 1;
@@ -156,7 +156,6 @@ zio_init(void)
 	zio_link_cache = kmem_cache_create("zio_link_cache",
 	sizeof (zio_link_t), 0, NULL, NULL, NULL, NULL, NULL, 0);
 
-#ifndef __NetBSD__
 	if (!zio_use_uma)
 		goto out;
 
@@ -220,7 +219,6 @@ zio_init(void)
 			zio_data_buf_cache[c - 1] = zio_data_buf_cache[c];
 	}
 out:
-#endif /* __NetBSD__ */
 
 	zio_inject_init();
 
@@ -242,7 +240,6 @@ zio_fini(void)
 	kmem_cache_t *last_cache = NULL;
 	kmem_cache_t *last_data_cache = NULL;
 
-#ifndef __NetBSD__	
 	for (c = 0; c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; c++) {
 		if (zio_buf_cache[c] != last_cache) {
 			last_cache = zio_buf_cache[c];
@@ -256,7 +253,6 @@ zio_fini(void)
 		}
 		zio_data_buf_cache[c] = NULL;
 	}
-#endif /* __NetBSD__ */
 
 	kmem_cache_destroy(zio_link_cache);
 	kmem_cache_destroy(zio_cache);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-05-21 Thread Andrew Doran
Module Name:src
Committed By:   ad
Date:   Thu May 21 20:43:23 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Fix bugs in previous.


To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.68 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.69
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.68	Wed May 20 20:47:18 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu May 21 20:43:23 2020
@@ -5971,7 +5971,6 @@ zfs_netbsd_getpages(void *v)
 	} */ * const ap = v;
 
 	vnode_t *const vp = ap->a_vp;
-	off_t offset = ap->a_offset + (ap->a_centeridx << PAGE_SHIFT);
 	const int flags = ap->a_flags;
 	const bool async = (flags & PGO_SYNCIO) == 0;
 	const bool memwrite = (ap->a_access_type & VM_PROT_WRITE) != 0;
@@ -5983,12 +5982,13 @@ zfs_netbsd_getpages(void *v)
 	vfs_t *mp;
 	struct vm_page *pg;
 	caddr_t va;
-	int npages, found, err = 0;
+	int npages = *ap->a_count, found, err = 0;
 
 	if (flags & PGO_LOCKED) {
- 		uvn_findpages(uobj, ap->a_offset, ap->a_count, ap->a_m, NULL,
+ 		uvn_findpages(uobj, ap->a_offset, , ap->a_m, NULL,
 		UFP_NOWAIT | UFP_NOALLOC | UFP_NOBUSY |
 		(memwrite ? UFP_NORDONLY : 0));
+		KASSERT(npages == *ap->a_count);
 		if (memwrite) {
 			KASSERT(rw_write_held(uobj->vmobjlock));
 			for (int i = 0; i < npages; i++) {
@@ -6010,9 +6010,6 @@ zfs_netbsd_getpages(void *v)
 	if (async) {
 		return 0;
 	}
-	if (*ap->a_count != 1) {
-		return EBUSY;
-	}
 
 	mp = vp->v_mount;
 	fstrans_start(mp);
@@ -6024,18 +6021,20 @@ zfs_netbsd_getpages(void *v)
 	ZFS_VERIFY_ZP(zp);
 
 	rw_enter(rw, RW_WRITER);
-	if (offset >= vp->v_size) {
+	if (ap->a_offset + (npages << PAGE_SHIFT) > round_page(vp->v_size)) {
 		rw_exit(rw);
 		ZFS_EXIT(zfsvfs);
 		fstrans_done(mp);
 		return EINVAL;
 	}
-	npages = *ap->a_count;
-	uvn_findpages(uobj, offset, , ap->a_m, NULL, UFP_ALL);
+	uvn_findpages(uobj, ap->a_offset, , ap->a_m, NULL, UFP_ALL);
+	KASSERT(npages == *ap->a_count);
 
 	for (int i = 0; i < npages; i++) {
 		pg = ap->a_m[i];
 		if (pg->flags & PG_FAKE) {
+			voff_t offset = pg->offset;
+			KASSERT(pg->offset == ap->a_offset + (i << PAGE_SHIFT));
 			rw_exit(rw);
 
 			va = zfs_map_page(pg, S_WRITE);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-05-20 Thread Andrew Doran
Module Name:src
Committed By:   ad
Date:   Wed May 20 20:47:18 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
zfs_netbsd_getpages:

- implement the PGO_LOCKED case
- handle npages > 1 for PGO_SYNCIO


To generate a diff of this commit:
cvs rdiff -u -r1.67 -r1.68 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.67 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.68
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.67	Sat May 16 18:31:46 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed May 20 20:47:18 2020
@@ -755,15 +755,14 @@ mappedread(vnode_t *vp, int nbytes, uio_
 			va = zfs_map_page(pp, S_READ);
 			error = uiomove(va + off, bytes, UIO_READ, uio);
 			zfs_unmap_page(pp, va);
+			rw_enter(rw, RW_WRITER);
+			uvm_page_unbusy(, 1);
+			rw_exit(rw);
 		} else {
 			error = dmu_read_uio_dbuf(sa_get_db(zp->z_sa_hdl),
 			uio, bytes);
 		}
 
-		rw_enter(rw, RW_WRITER);
-		uvm_page_unbusy(, 1);
-		rw_exit(rw);
-
 		len -= bytes;
 		off = 0;
 		if (error)
@@ -5987,9 +5986,24 @@ zfs_netbsd_getpages(void *v)
 	int npages, found, err = 0;
 
 	if (flags & PGO_LOCKED) {
-		*ap->a_count = 0;
-		ap->a_m[ap->a_centeridx] = NULL;
-		return EBUSY;
+ 		uvn_findpages(uobj, ap->a_offset, ap->a_count, ap->a_m, NULL,
+		UFP_NOWAIT | UFP_NOALLOC | UFP_NOBUSY |
+		(memwrite ? UFP_NORDONLY : 0));
+		if (memwrite) {
+			KASSERT(rw_write_held(uobj->vmobjlock));
+			for (int i = 0; i < npages; i++) {
+pg = ap->a_m[i];
+if (pg == NULL || pg == PGO_DONTCARE) {
+	continue;
+}
+if (uvm_pagegetdirty(pg) ==
+UVM_PAGE_STATUS_CLEAN) {
+	uvm_pagemarkdirty(pg,
+	UVM_PAGE_STATUS_UNKNOWN);
+}
+			}
+		}
+		return ap->a_m[ap->a_centeridx] == NULL ? EBUSY : 0;
 	}
 	rw_exit(rw);
 
@@ -6016,28 +6030,42 @@ zfs_netbsd_getpages(void *v)
 		fstrans_done(mp);
 		return EINVAL;
 	}
-	npages = 1;
-	pg = NULL;
-	uvn_findpages(uobj, offset, , , NULL, UFP_ALL);
+	npages = *ap->a_count;
+	uvn_findpages(uobj, offset, , ap->a_m, NULL, UFP_ALL);
 
-	if (pg->flags & PG_FAKE) {
-		rw_exit(rw);
+	for (int i = 0; i < npages; i++) {
+		pg = ap->a_m[i];
+		if (pg->flags & PG_FAKE) {
+			rw_exit(rw);
 
-		va = zfs_map_page(pg, S_WRITE);
-		err = dmu_read(zfsvfs->z_os, zp->z_id, offset, PAGE_SIZE,
-		va, DMU_READ_PREFETCH);
-		zfs_unmap_page(pg, va);
+			va = zfs_map_page(pg, S_WRITE);
+			err = dmu_read(zfsvfs->z_os, zp->z_id, offset,
+			PAGE_SIZE, va, DMU_READ_PREFETCH);
+			zfs_unmap_page(pg, va);
 
-		rw_enter(rw, RW_WRITER);
-		pg->flags &= ~(PG_FAKE);
-	}
+			rw_enter(rw, RW_WRITER);
+			if (err != 0) {
+for (i = 0; i < npages; i++) {
+	pg = ap->a_m[i];
+	if ((pg->flags & PG_FAKE) != 0) {
+		uvm_pagefree(pg);
+	} else {
+		uvm_page_unbusy(, 1);
+	}
+}
+memset(ap->a_m, 0, sizeof(ap->a_m[0]) *
+npages);
+break;
+			}
+			pg->flags &= ~(PG_FAKE);
+		}
 
-	if (memwrite && uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) {
-		/* For write faults, start dirtiness tracking. */
-		uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN);
+		if (memwrite && uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) {
+			/* For write faults, start dirtiness tracking. */
+			uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN);
+		}
 	}
 	rw_exit(rw);
-	ap->a_m[ap->a_centeridx] = pg;
 
 	ZFS_EXIT(zfsvfs);
 	fstrans_done(mp);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-05-12 Thread Chuck Silvers
Module Name:src
Committed By:   chs
Date:   Wed May 13 05:52:54 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
fix the handling in putpage of the page containing EOF.


To generate a diff of this commit:
cvs rdiff -u -r1.65 -r1.66 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.65 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.66
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.65	Thu May  7 09:12:03 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed May 13 05:52:54 2020
@@ -6066,9 +6066,29 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 		goto out_unbusy;
 	}
 
+	/*
+	 * Calculate the length and assert that no whole pages are past EOF.
+	 * This check is equivalent to "off + len <= round_page(zp->z_size)",
+	 * with gyrations to avoid signed integer overflow.
+	 */
+
 	off = pp[0]->offset;
 	len = count * PAGESIZE;
-	KASSERT(off + len <= round_page(zp->z_size));
+	KASSERT(off <= zp->z_size);
+	KASSERT(len <= round_page(zp->z_size));
+	KASSERT(off <= round_page(zp->z_size) - len);
+
+	/*
+	 * If EOF is within the last page, reduce len to avoid writing past
+	 * the file size in the ZFS buffer.  Assert that
+	 * "off + len <= zp->z_size", again avoiding signed integer overflow.
+	 */
+
+	if (len > zp->z_size - off) {
+		len = zp->z_size - off;
+	}
+	KASSERT(len <= zp->z_size);
+	KASSERT(off <= zp->z_size - len);
 
 	if (zfs_owner_overquota(zfsvfs, zp, B_FALSE) ||
 	zfs_owner_overquota(zfsvfs, zp, B_TRUE)) {



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-05-07 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu May  7 09:13:06 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c

Log Message:
Operation zfs_zget_cleaner() cannot fail, comment and add assertions.


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.32 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.33
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.32	Thu May  7 09:12:31 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Thu May  7 09:13:06 2020
@@ -1288,6 +1288,12 @@ zfs_zget(zfsvfs_t *zfsvfs, uint64_t obj_
 	return error;
 }
 
+/*
+ * Get a known cached znode, to be used from zil_commit()->zfs_get_data()
+ * to resolve log entries.  Doesn't take a reference, will never fail and
+ * depends on zfs_vnops.c::zfs_netbsd_reclaim() running a zil_commit()
+ * before the znode gets freed.
+ */
 int
 zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint64_t obj_num, znode_t **zpp)
 {
@@ -1295,31 +1301,26 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6
 	sa_handle_t *hdl;
 	dmu_object_info_t doi;
 	znode_t *zp;
-	int err;
 
 	ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num);
 
-	err = sa_buf_hold(zfsvfs->z_os, obj_num, NULL, );
-	if (err) {
-		ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
-		return (SET_ERROR(err));
-	}
+	VERIFY(0 == sa_buf_hold(zfsvfs->z_os, obj_num, NULL, ));
 
 	dmu_object_info_from_db(db, );
-	if (doi.doi_bonus_type != DMU_OT_SA &&
-	(doi.doi_bonus_type != DMU_OT_ZNODE ||
+	ASSERT(doi.doi_bonus_type == DMU_OT_SA ||
 	(doi.doi_bonus_type == DMU_OT_ZNODE &&
-	doi.doi_bonus_size < sizeof (znode_phys_t {
-		sa_buf_rele(db, NULL);
-		ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
-		return (SET_ERROR(EINVAL));
-	}
+	doi.doi_bonus_size >= sizeof (znode_phys_t)));
+
 	hdl = dmu_buf_get_user(db);
 	ASSERT3P(hdl, !=, NULL);
+
 	zp = sa_get_userdata(hdl);
 	ASSERT3U(zp->z_id, ==, obj_num);
+
 	sa_buf_rele(db, NULL);
+
 	ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
+
 	*zpp = zp;
 	return (0);
 }



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-05-07 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu May  7 09:12:03 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Revert Rev. 1.63 and add a comment why we have to zil_commit() here:

Operation zfs_znode.c::zfs_zget_cleaner() depends on this
zil_commit() as a barrier to guarantee the znode cannot
get freed before its log entries are resolved.


To generate a diff of this commit:
cvs rdiff -u -r1.64 -r1.65 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.64 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.65
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.64	Sat Mar 14 20:45:23 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu May  7 09:12:03 2020
@@ -5858,11 +5858,16 @@ zfs_netbsd_reclaim(void *v)
 			zp->z_atime_dirty = 0;
 			dmu_tx_commit(tx);
 		}
-
-		if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
-			zil_commit(zfsvfs->z_log, zp->z_id);
 	}
 
+	/*
+	 * Operation zfs_znode.c::zfs_zget_cleaner() depends on this
+	 * zil_commit() as a barrier to guarantee the znode cannot
+	 * get freed before its log entries are resolved.
+	 */
+	if (zfsvfs->z_log)
+		zil_commit(zfsvfs->z_log, zp->z_id);
+
 	if (zp->z_sa_hdl == NULL)
 		zfs_znode_free(zp);
 	else



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-05-07 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu May  7 09:12:32 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c

Log Message:
Revert Rev. 1.31 as it is no longer possible for the handle to be NULL.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.31 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.32
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.31	Fri Mar 20 08:26:01 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Thu May  7 09:12:31 2020
@@ -1315,11 +1315,7 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6
 		return (SET_ERROR(EINVAL));
 	}
 	hdl = dmu_buf_get_user(db);
-	if (hdl == NULL) {
-		sa_buf_rele(db, NULL);
-		ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
-		return (SET_ERROR(EINVAL));
-	}
+	ASSERT3P(hdl, !=, NULL);
 	zp = sa_get_userdata(hdl);
 	ASSERT3U(zp->z_id, ==, obj_num);
 	sa_buf_rele(db, NULL);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-04-28 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Apr 29 04:30:40 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
Set up more of a fake struct buf, for ldminphys.

Fixes:

arm64# zpool create rpool ld4
[ 198.4376097] panic: Trap: Data Abort (EL1): Translation Fault L1 with read 
access for 0178: pc c017acf4: opcode f940bc00: ldr x0, 
[x0,#376]
[ 198.4694793] fp c00073026660 ldminphys() at c017acf4 
netbsd:ldminphys+0x34
[ 198.4792624] fp c00073026680 vdev_disk_open.part.4() at c13d4c4c 
zfs:vdev_disk_open.part.4+0x37c
[ 198.4792624] fp c000730268d0 vdev_open() at c13d2530 
zfs:vdev_open+0x68
[ 198.4792624] fp c00073026920 vdev_open_children() at c13d2958 
zfs:vdev_open_children+0x40
[ 198.4792624] fp c00073026950 vdev_root_open() at c13dad48 
zfs:vdev_root_open+0x30

XXX pullup-9


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.15 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.16
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.15	Mon Mar  2 16:01:56 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Wed Apr 29 04:30:40 2020
@@ -228,7 +228,10 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 		dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS);
 	*/
 	{
-		struct buf buf = { .b_bcount = MAXPHYS };
+		struct buf buf = {
+			.b_dev = vp->v_rdev,
+			.b_bcount = MAXPHYS,
+		};
 		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
 			(*pdk->dk_driver->d_minphys)();
 		dvd->vd_maxphys = buf.b_bcount;



CVS commit: src/external/cddl/osnet/dist/lib/libzfs/common

2020-04-04 Thread Michael van Elst
Module Name:src
Committed By:   mlelstv
Date:   Sat Apr  4 13:45:22 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/lib/libzfs/common: libzfs_import.c

Log Message:
When collecting zpool devices, skip disks with wedges so that a
concurrent test of a wedge on that disk doesn't fail.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_import.c

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

Modified files:

Index: src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_import.c
diff -u src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_import.c:1.5 src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_import.c:1.6
--- src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_import.c:1.5	Tue Aug 20 08:11:21 2019
+++ src/external/cddl/osnet/dist/lib/libzfs/common/libzfs_import.c	Sat Apr  4 13:45:22 2020
@@ -1095,8 +1095,16 @@ zpool_open_func(void *arg)
 	}
 #endif /* __FreeBSD__ */
 #ifdef __NetBSD__
+	struct dkwedge_list dkwl;
 	off_t size;
 
+	/* skip devices with wedges */
+	if (native_ioctl(fd, DIOCLWEDGES, ) == 0 &&
+	dkwl.dkwl_nwedges > 0) {
+		(void) close(fd);
+		return;
+	}
+
 	if (native_ioctl(fd, DIOCGMEDIASIZE, ) < 0 ||
 	size < SPA_MINDEVSIZE) {
 		(void) close(fd);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-03-20 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Fri Mar 20 08:26:01 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c

Log Message:
With zfs_netbsd_reclaim() no longer doing an unconditional
zil commit dmu_buf_get_user() may return a NULL handle when
the znode already disappeared.


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.30 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.31
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.30	Sun Feb 23 15:46:38 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Fri Mar 20 08:26:01 2020
@@ -1315,7 +1315,11 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6
 		return (SET_ERROR(EINVAL));
 	}
 	hdl = dmu_buf_get_user(db);
-	ASSERT3P(hdl, !=, NULL);
+	if (hdl == NULL) {
+		sa_buf_rele(db, NULL);
+		ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
+		return (SET_ERROR(EINVAL));
+	}
 	zp = sa_get_userdata(hdl);
 	ASSERT3U(zp->z_id, ==, obj_num);
 	sa_buf_rele(db, NULL);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-03-16 Thread Santhosh Raju
Module Name:src
Committed By:   fox
Date:   Tue Mar 17 00:54:03 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_acl.c

Log Message:
external/cddl/osnet: Fix -Werror=maybe-uninitialized error in zfs_acl.c.

Detected by build.sh with MKLIBCSANITIZER=yes and fixed upstream, pick only the 
fix from the commit.

Upstream commits

https://github.com/zfsonfreebsd/ZoF/commit/100a91aa3e9773f2a2a373c5cb066b52c780716c
https://github.com/openzfs/zfs/commit/100a91aa3e9773f2a2a373c5cb066b52c780716c

Cherry-pick:
>From 100a91aa3e9773f2a2a373c5cb066b52c780716c Mon Sep 17 00:00:00 2001
From: Chunwei Chen 
Date: Fri, 17 Jun 2016 17:36:01 -0700
Subject: [PATCH] Fix NFS credential

Signed-off-by: Chunwei Chen 
Signed-off-by: Brian Behlendorf 
Closes #4772
Closes #4758

Reviewed by: kamil@


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.6
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.5	Fri Sep  7 02:25:40 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c	Tue Mar 17 00:54:03 2020
@@ -1598,7 +1598,7 @@ zfs_acl_ids_create(znode_t *dzp, int fla
 	int		error;
 	zfsvfs_t	*zfsvfs = dzp->z_zfsvfs;
 	zfs_acl_t	*paclp;
-	gid_t		gid;
+	gid_t		gid = vap->va_gid;
 	boolean_t	trim = B_FALSE;
 	boolean_t	inherited = B_FALSE;
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-03-09 Thread Santhosh Raju
Module Name:src
Committed By:   fox
Date:   Mon Mar  9 15:40:50 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: metaslab.c

Log Message:
external/cddl/osnet: Fix possible null pointer access.

Detected by UBSan and fixed upstream, pick only the fix from the commit.

Cherry-pick:
>From 928e8ad47d3478a3d5d01f0dd6ae74a9371af65e Mon Sep 17 00:00:00 2001
From: Serapheim Dimitropoulos 
Date: Wed, 20 Feb 2019 09:59:57 -0800
Subject: [PATCH] Introduce auxiliary metaslab histograms

Reviewed by: Paul Dagnelie 
Reviewed-by: Brian Behlendorf 
Reviewed by: Matt Ahrens 
Signed-off-by: Serapheim Dimitropoulos 
Closes #8358

Reviewed by: kamil@


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.3 -r1.2 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c:1.1.1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c:1.2
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c:1.1.1.3	Mon May 28 20:52:58 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c	Mon Mar  9 15:40:50 2020
@@ -3370,7 +3370,7 @@ metaslab_alloc(spa_t *spa, metaslab_clas
 zio_alloc_list_t *zal, zio_t *zio)
 {
 	dva_t *dva = bp->blk_dva;
-	dva_t *hintdva = hintbp->blk_dva;
+	dva_t *hintdva = (hintbp != NULL) ? hintbp->blk_dva : NULL;
 	int error = 0;
 
 	ASSERT(bp->blk_birth == 0);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-03-09 Thread Santhosh Raju
Module Name:src
Committed By:   fox
Date:   Mon Mar  9 15:37:46 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_tx.c spa.c

Log Message:
external/cddl/osnet: Fix possible signed integer overflow

Detected by UBSan and fixed upstream

Cherry-pick:
>From 05852b3467b44cdf88541ec67624cd1f5f2ded1d Mon Sep 17 00:00:00 2001
From: luozhengzheng 
Date: Fri, 14 Oct 2016 05:25:05 +0800
Subject: [PATCH] Fix coverity defects: CID 147571, 147574

CID 147571: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN)
CID 147574: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN)

Reviewed-by: Brian Behlendorf 
Signed-off-by: luozhengzheng 
Closes #5268

Reviewed by: kamil@


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c
cvs rdiff -u -r1.10 -r1.11 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.5
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.4	Fri Jun 21 10:59:50 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c	Mon Mar  9 15:37:46 2020
@@ -412,7 +412,7 @@ dmu_tx_count_dnode(dmu_tx_hold_t *txh)
 	dnode_t *dn = txh->txh_dnode;
 	dnode_t *mdn = DMU_META_DNODE(txh->txh_tx->tx_objset);
 	uint64_t space = mdn->dn_datablksz +
-	((mdn->dn_nlevels-1) << mdn->dn_indblkshift);
+	((uint64_t)(mdn->dn_nlevels-1) << mdn->dn_indblkshift);
 
 	if (dn && dn->dn_dbuf->db_blkptr &&
 	dsl_dataset_block_freeable(dn->dn_objset->os_dsl_dataset,

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.10 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.11
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.10	Tue Jul 23 07:46:22 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c	Mon Mar  9 15:37:46 2020
@@ -6293,7 +6293,7 @@ spa_async_tasks_pending(spa_t *spa)
 	} else {
 		config_task_suspended =
 		(gethrtime() - spa->spa_ccw_fail_time) <
-		(zfs_ccw_retry_interval * NANOSEC);
+		((hrtime_t)zfs_ccw_retry_interval * NANOSEC);
 	}
 
 	return (non_config_tasks || (config_task && !config_task_suspended));



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-03-08 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Mar  8 19:59:45 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Avoid unnecessary zil_commit on rm.

1. Issue zil_commit only if we're actually updating something --
   there's no need to commit if we're unlinking the file or if
   there's no atime update being applied.

2. Issue zil_commit only if the zfs has sync=always set -- for
   sync=standard there's no need for us to commit anything here since
   no application asked for an explicit sync.

Speeds up untarring base.tgz on top of itself by a factor of about
2x, and speeds up rm by a factor of about 10x, on my system with an
SSD SLOG over SATA.  Histogram of unlink, rmdir, and rename timing
shows dramatic reduction in latency for most samples.

(To be fair, this was not an improvement over zfs; issuing the
unnecessary zil_commit was a self-inflicted performance wound.)


To generate a diff of this commit:
cvs rdiff -u -r1.62 -r1.63 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.62 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.63
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.62	Sun Feb 23 15:46:38 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sun Mar  8 19:59:45 2020
@@ -5858,10 +5858,10 @@ zfs_netbsd_reclaim(void *v)
 			zp->z_atime_dirty = 0;
 			dmu_tx_commit(tx);
 		}
-	}
 
-	if (zfsvfs->z_log)
-		zil_commit(zfsvfs->z_log, zp->z_id);
+		if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
+			zil_commit(zfsvfs->z_log, zp->z_id);
+	}
 
 	if (zp->z_sa_hdl == NULL)
 		zfs_znode_free(zp);



CVS commit: src/external/cddl/osnet/dist/tools/ctf/cvt

2020-03-05 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Mar  5 16:05:06 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/tools/ctf/cvt: fixup_tdescs.c

Log Message:
Revert "Add fixup operation to remove private mutex types for x86."

The x86 (and arm) definitions of struct kmutex are no longer defined
differently depending on __MUTEX_PRIVATE.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c

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

Modified files:

Index: src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c
diff -u src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c:1.5 src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c:1.6
--- src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c:1.5	Tue Jul 16 07:27:35 2019
+++ src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c	Thu Mar  5 16:05:05 2020
@@ -280,48 +280,6 @@ fix_small_cpu_struct(tdata_t *td, size_t
 #ifdef __NetBSD__
 
 /*
- * The kmutex structure comes in two flavours, with or without __MUTEX_PRIVATE
- * defined.  Since many structures include kmutexes this causes massive amounts
- * of duplication on merge (~ 40% for a GENERIC kernel).  Remove the private
- * fields if we see them.
- */
-static void
-fix_kmutex_private(tdata_t *td, size_t ptrsize)
-{
-	tdesc_t *desc;
-	mlist_t *ml;
-
-	/*
-	 * X86 kmutex is either
-	 *	union {
-	 *		volatile uintptr_t mtxa_owner;
-	 *	} u
-	 * or
-	 *	union {
-	 *		volatile uintptr_t mtxa_owner;
-	 *		struct {
-	 *			...
-	 *		} s;
-	 *	} u
-	 * so we remove "struct s" if we find it.
-	 */
-	if ((desc = lookup_tdesc(td, "kmutex")) != NULL &&
-	desc->t_type == STRUCT &&
-	(ml = desc->t_members) != NULL &&
-	streq(ml->ml_name, "u") &&
-	(desc = ml->ml_type) != NULL &&
-	desc->t_type == UNION &&
-	(ml = desc->t_members) != NULL &&
-	streq(ml->ml_name, "mtxa_owner") &&
-	(ml = ml->ml_next) != NULL &&
-	streq(ml->ml_name, "s") &&
-	ml->ml_next == NULL) {
-		/* Found, delete member "s". */
-		desc->t_members->ml_next = NULL;
-	}
-}
-
-/*
  * XXX: A crude hack to bring down the number of types for a
  * GENRIC kernel below 2**15-1 (from ~34000 to ~29800).
  *
@@ -377,7 +335,6 @@ cvt_fixups(tdata_t *td, size_t ptrsize)
 {
 	fix_small_cpu_struct(td, ptrsize);
 #ifdef __NetBSD__
-	fix_kmutex_private(td, ptrsize);
 	fix_kill_attr(td, ptrsize);
 #endif
 }



CVS commit: src/external/cddl/osnet/dist/common/nvpair

2020-03-02 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Mon Mar  2 15:45:33 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/common/nvpair: nvpair.c

Log Message:
Fix undefined behavior in misaligned pointer usage

Detected by UBSan and already fixed upstream.

Cherry-pick:
>From aa0218d6a12814fac50b287214f9f3b0b99e11b1 Mon Sep 17 00:00:00 2001
From: Brian Behlendorf 
Date: Tue, 7 Jan 2014 23:24:37 +0100
Subject: [PATCH] Fix nvlist 'Bus Error' for Sparc

The mis-aligned memory accesses in nvpair_native_embedded() and
nvpair_native_embedded_array() will cause a 'Bus Error' for
architectures such as Sparc which not fully byte addressible.
To avoid this issue care is taken to avoid dereferencing the
potentially mis-aligned packed nvlist_t.

Signed-off-by: Brian Behlendorf 
Signed-off-by: Ned Bass 
Signed-off-by: marku89 
Issue #1700


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/cddl/osnet/dist/common/nvpair/nvpair.c

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

Modified files:

Index: src/external/cddl/osnet/dist/common/nvpair/nvpair.c
diff -u src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.4 src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.5
--- src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.4	Mon May 28 21:05:04 2018
+++ src/external/cddl/osnet/dist/common/nvpair/nvpair.c	Mon Mar  2 15:45:33 2020
@@ -2586,7 +2586,8 @@ nvpair_native_embedded(nvstream_t *nvs, 
 		 * structure. The address may not be aligned, so we have
 		 * to use bzero.
 		 */
-		bzero(>nvl_priv, sizeof (packed->nvl_priv));
+		bzero((char *)packed + offsetof(nvlist_t, nvl_priv),
+		sizeof (uint64_t));
 	}
 
 	return (nvs_embedded(nvs, EMBEDDED_NVL(nvp)));
@@ -2614,7 +2615,8 @@ nvpair_native_embedded_array(nvstream_t 
 			 * packed structure. The address may not be aligned,
 			 * so we have to use bzero.
 			 */
-			bzero(>nvl_priv, sizeof (packed->nvl_priv));
+			bzero((char *)packed + offsetof(nvlist_t, nvl_priv),
+			sizeof (uint64_t));
 	}
 
 	return (nvs_embedded_nvl_array(nvs, nvp, NULL));



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-29 Thread Michael van Elst
Module Name:src
Committed By:   mlelstv
Date:   Sat Feb 29 17:15:43 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
Use utility functions to handle disk geometry.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.13 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.14
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.13	Sun Dec  1 20:25:31 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Sat Feb 29 17:15:43 2020
@@ -35,7 +35,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 
@@ -147,10 +146,11 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 	spa_t *spa = vd->vdev_spa;
 	vdev_disk_t *dvd;
 	vnode_t *vp;
-	struct dkwedge_info dkw;
-	struct disk *pdk;
 	int error, cmd;
-	struct partinfo pinfo;
+	uint64_t numsecs;
+	unsigned secsize;
+	struct disk *pdk;
+	struct dkwedge_info dkw;
 
 	/*
 	 * We must have a pathname, and it must be absolute.
@@ -219,33 +219,15 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 		return (SET_ERROR(EINVAL));
 	}
 
+	pdk = NULL;
+	if (getdiskinfo(vp, ) == 0)
+		pdk = disk_find(dkw.dkw_parent);
+
 	/* XXXNETBSD Once tls-maxphys gets merged this block becomes:
-		if (VOP_IOCTL(vp, DIOCGWEDGEINFO, , FREAD, NOCRED) == 0)
-			pdk = disk_find(dkw.dkw_parent);
-		else
-			pdk = disk_find_blk(vp->v_rdev);
 		dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS);
 	*/
 	{
 		struct buf buf = { .b_bcount = MAXPHYS };
-
-		if (VOP_IOCTL(vp, DIOCGWEDGEINFO, , FREAD, NOCRED) == 0) {
-			pdk = disk_find(dkw.dkw_parent);
-		} else {
-			const char *dev_name;
-
-			dev_name = devsw_blk2name(major(vp->v_rdev));
-			if (dev_name) {
-char disk_name[16];
-
-snprintf(disk_name, sizeof(disk_name), "%s%d",
-dev_name, DISKUNIT(vp->v_rdev));
-pdk = disk_find(disk_name);
-			} else {
-pdk = NULL;
-			}
-			buf.b_dev = vp->v_rdev;
-		}
 		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
 			(*pdk->dk_driver->d_minphys)();
 		dvd->vd_maxphys = buf.b_bcount;
@@ -268,32 +250,22 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 	dvd->vd_vp = vp;
 
 skip_open:
-	/*
-	 * Determine the actual size of the device.
-	 * Try wedge info first as it supports larger disks.
-	 */
-	error = VOP_IOCTL(vp, DIOCGWEDGEINFO, , FREAD, NOCRED);
-	if (error == 0) {
-		pdk = disk_find(dkw.dkw_parent);
-		if (pdk) {
-			pinfo.pi_secsize = (1 << pdk->dk_byteshift);
-			pinfo.pi_size = dkw.dkw_size;
-			pinfo.pi_offset = dkw.dkw_offset;
-		} else	
-			error = ENODEV;
-	}
-	if (error)
-		error = VOP_IOCTL(vp, DIOCGPARTINFO, , FREAD, kcred);
+	error = getdisksize(vp, , );
 	if (error != 0) {
 		vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
 		return (SET_ERROR(error));
 	}
-	*psize = pinfo.pi_size * pinfo.pi_secsize;
+
+	*psize = numsecs * secsize;
 	*max_psize = *psize;
 
-	*ashift = highbit(MAX(pinfo.pi_secsize, SPA_MINBLOCKSIZE)) - 1;
+	*ashift = highbit(MAX(secsize, SPA_MINBLOCKSIZE)) - 1;
 	*pashift = *ashift;
-	vd->vdev_wholedisk = (pinfo.pi_offset == 0); /* XXXNETBSD */
+
+	vd->vdev_wholedisk = 0;
+	if (getdiskinfo(vp, ) != 0 &&
+	dkw.dkw_offset == 0 && dkw.dkw_size == numsecs)
+		vd->vdev_wholedisk = 1,
 
 	/*
 	 * Clear the nowritecache bit, so that on a vdev_reopen() we will



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-29 Thread Michael van Elst
Module Name:src
Committed By:   mlelstv
Date:   Sat Feb 29 17:03:33 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zvol.c

Log Message:
Fix disk geometry calculation. Add DIOCGPARTINFO to support
getdisksize() used by other drivers, filesystems and specfs.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.13
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.12	Wed May 22 08:47:02 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c	Sat Feb 29 17:03:33 2020
@@ -72,6 +72,9 @@
 #include 
 #include 
 #include 
+#ifdef __NetBSD__
+#include 
+#endif
 #include 
 #include 
 #include 
@@ -316,12 +319,17 @@ zvol_size_changed(zvol_state_t *zv, uint
 #endif /* __FreeBSD__ */
 #ifdef __NetBSD__
 	struct disk_geom *dg = >zv_dk.dk_geom;
+	objset_t *os = zv->zv_objset;
+	spa_t *spa = dmu_objset_spa(os);
+	unsigned secsize;
 
 	zv->zv_volsize = volsize;
 
+	secsize = MAX(DEV_BSIZE, 1U << spa->spa_max_ashift);
+
 	memset(dg, 0, sizeof(*dg));
-	dg->dg_secsize = DEV_BSIZE; /* XXX 512? */
-	dg->dg_secperunit = zv->zv_volsize / dg->dg_secsize;;
+	dg->dg_secsize = secsize;
+	dg->dg_secperunit = volsize / secsize;
 	disk_set_info(NULL, >zv_dk, "ZVOL");
 #endif
 }
@@ -3589,19 +3597,47 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t 
 	case DIOCGWEDGEINFO:
 	{
 		struct dkwedge_info *dkw = (void *) arg;
-		
+		struct disk_geom *dg = >zv_dk.dk_geom;
+
 		memset(dkw, 0, sizeof(*dkw));
 		strlcpy(dkw->dkw_devname, zv->zv_name,
 		sizeof(dkw->dkw_devname));
+
+		/*
+		 * dkw_parent is interpreted as disk device name by the kernel
+		 * to locate the disk driver and its geometry data. The faked
+		 * name "ZFS" must never match a device name. The kernel will
+		 * then call DIOCGPARTINFO below to retrieve the missing
+		 * information.
+		 *
+		 * Userland will also be confused, but it can use the
+		 * proplib based DIOCGDISKINFO to get the geometry
+		 * information.
+		 */
 		strlcpy(dkw->dkw_parent, "ZFS", sizeof(dkw->dkw_parent));
-		
+
 		dkw->dkw_offset = 0;
-		dkw->dkw_size = zv->zv_volsize / DEV_BSIZE;
+		dkw->dkw_size = dg->dg_secperunit;
 		strcpy(dkw->dkw_ptype, DKW_PTYPE_FFS);
 
 		break;
 	}
 
+	case DIOCGPARTINFO:
+	{
+		struct partinfo *pi = (void *) arg;
+		struct disk_geom *dg = >zv_dk.dk_geom;
+
+		memset(pi, 0, sizeof(*pi));
+		pi->pi_offset = 0;
+		pi->pi_secsize = dg->dg_secsize;
+		pi->pi_size = dg->dg_secperunit;
+		pi->pi_fstype = FS_OTHER;
+		pi->pi_bsize = MAX(BLKDEV_IOSIZE, pi->pi_secsize);
+
+		break;
+	}
+
 	default:
 		dprintf("unknown disk_ioctl called\n");
 		error = ENOTTY;



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-27 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Feb 28 03:52:26 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c

Log Message:
Teach zfs bdevsw to do b_psize.

This is needed, among other things, to swap on zvols.

Attempting to swap on zvols currently deadlocks but that's a separate
issue that needs to be fixed too!


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.21 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.22
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.21	Mon Oct 14 13:18:00 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c	Fri Feb 28 03:52:26 2020
@@ -7062,6 +7062,29 @@ nb_zvol_strategy(struct buf *bp)
 	(void) zvol_strategy(bp);
 }
 
+static int
+nb_zvol_psize(dev_t dev)
+{
+	minor_t minor = getminor(dev);
+	off_t nbytes;
+	unsigned bytespersector;
+
+	if (minor == 0)		/* /dev/zfs */
+		return -1;
+
+	if (zvol_ioctl(dev, DIOCGMEDIASIZE, (intptr_t), 0,
+		NOCRED, NULL))
+		return -1;
+	if (zvol_ioctl(dev, DIOCGSECTORSIZE, (intptr_t), 0,
+		NOCRED, NULL))
+		return -1;
+	if (bytespersector == 0) /* paranoia */
+		return -1;
+	if (nbytes/bytespersector > INT_MAX) /* paranoia */
+		return -1;
+	return nbytes/bytespersector;
+}
+
 static const struct fileops zfs_fileops = {
 	.fo_name = "zfs",
 	.fo_read = fbadop_read,
@@ -7081,7 +7104,7 @@ const struct bdevsw zfs_bdevsw = {
 	.d_strategy = nb_zvol_strategy,
 	.d_ioctl = nb_zfsdev_ioctl,
 	.d_dump = nodump,
-	.d_psize = nosize,
+	.d_psize = nb_zvol_psize,
 	.d_flag = D_DISK | D_MPSAFE
 };
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Feb 23 06:15:27 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Teach device nodes on zfs to handle fsync by calling spec_fsync too.


To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.61 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.60 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.61
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.60	Sun Feb 23 05:50:25 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sun Feb 23 06:15:27 2020
@@ -5509,6 +5509,19 @@ zfs_netbsd_fsync(void *v)
 }
 
 static int
+zfs_spec_fsync(void *v)
+{
+	struct vop_fsync_args *ap = v;
+	int error;
+
+	error = spec_fsync(v);
+	if (error)
+		return error;
+
+	return (zfs_fsync(ap->a_vp, ap->a_flags, ap->a_cred, NULL));
+}
+
+static int
 zfs_netbsd_getattr(void *v)
 {
 	struct vop_getattr_args *ap = v;
@@ -6355,7 +6368,7 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ _poll_desc,		spec_poll },
 	{ _kqfilter_desc,		spec_kqfilter },
 	{ _revoke_desc,		spec_revoke },
-	{ _fsync_desc,		zfs_netbsd_fsync },
+	{ _fsync_desc,		zfs_spec_fsync },
 	{ _remove_desc,		spec_remove },
 	{ _link_desc,		spec_link },
 	{ _lock_desc,		zfs_netbsd_lock },



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Feb 23 05:50:25 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Teach zfs spec nodes to VOP_BWRITE too.

Fixes hang on writing to, e.g., ffs mounted on a device node that
lives on zfs.

XXX pullup


To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.59 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.60
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.59	Wed Feb 19 05:52:52 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sun Feb 23 05:50:25 2020
@@ -6376,6 +6376,7 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ _islocked_desc,		zfs_netbsd_islocked },
 	{ _advlock_desc,		spec_advlock },
 	{ _strategy_desc,		spec_strategy },
+	{ _bwrite_desc,		spec_bwrite },
 	{ _print_desc,		zfs_netbsd_print },
 	{ _fcntl_desc,		zfs_netbsd_fcntl },
 	{ NULL, NULL }



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Feb 19 17:05:06 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: spa_history.c

Log Message:
Mark previous #ifdef __NetBSD__, per request from hannken.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.6
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.5	Wed Feb 19 16:11:19 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c	Wed Feb 19 17:05:06 2020
@@ -540,9 +540,17 @@ spa_history_log_internal_dd(dsl_dir_t *d
 void
 spa_history_log_version(spa_t *spa, const char *operation)
 {
+#ifdef __NetBSD__
 	spa_history_log_internal(spa, operation, NULL,
 	"pool version %llu; software version %llu/%d; %s %s %s %s %s",
 	(u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION,
 	utsname.sysname, utsname.nodename, utsname.release, utsname.version,
 	utsname.machine);
+#else
+	spa_history_log_internal(spa, operation, NULL,
+	"pool version %llu; software version %llu/%d; uts %s %s %s %s",
+	(u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION,
+	utsname.nodename, utsname.release, utsname.version,
+	utsname.machine);
+#endif
 }



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-18 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Feb 19 05:52:52 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Define VOP_STRATEGY on zfs device nodes too.

Fixes eternal hangs in attempts to do I/O on device nodes on zfs.

XXX pullup


To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.58 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.59
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.58	Sat Feb 15 19:03:15 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed Feb 19 05:52:52 2020
@@ -6375,6 +6375,7 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ _mmap_desc,		spec_mmap },
 	{ _islocked_desc,		zfs_netbsd_islocked },
 	{ _advlock_desc,		spec_advlock },
+	{ _strategy_desc,		spec_strategy },
 	{ _print_desc,		zfs_netbsd_print },
 	{ _fcntl_desc,		zfs_netbsd_fcntl },
 	{ NULL, NULL }



CVS commit: src/external/cddl/osnet/dist/cmd/zpool

2020-02-16 Thread Roy Marples
Module Name:src
Committed By:   roy
Date:   Sun Feb 16 14:06:10 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/cmd/zpool: zpool_vdev.c

Log Message:
zpool: The NetBSD specific ioctl needs to include sys/ioctl.h


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/cddl/osnet/dist/cmd/zpool/zpool_vdev.c

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

Modified files:

Index: src/external/cddl/osnet/dist/cmd/zpool/zpool_vdev.c
diff -u src/external/cddl/osnet/dist/cmd/zpool/zpool_vdev.c:1.4 src/external/cddl/osnet/dist/cmd/zpool/zpool_vdev.c:1.5
--- src/external/cddl/osnet/dist/cmd/zpool/zpool_vdev.c:1.4	Mon May 28 21:05:04 2018
+++ src/external/cddl/osnet/dist/cmd/zpool/zpool_vdev.c	Sun Feb 16 14:06:10 2020
@@ -80,6 +80,7 @@
 #endif
 #ifdef __NetBSD__
 #include 
+#include 
 #endif
 
 #include "zpool_util.h"



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-15 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb 15 19:03:15 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Teach zfs to revoke vnodes the usual way.

XXX pullup


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.57 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.58
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.57	Thu Feb 13 16:53:32 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sat Feb 15 19:03:15 2020
@@ -6309,6 +6309,7 @@ const struct vnodeopv_entry_desc zfs_vno
 	{ _ioctl_desc,		zfs_netbsd_ioctl },
 	{ _poll_desc,		genfs_poll },
 	{ _kqfilter_desc,		genfs_kqfilter },
+	{ _revoke_desc,		genfs_revoke },
 	{ _fsync_desc,		zfs_netbsd_fsync },
 	{ _remove_desc,		zfs_netbsd_remove },
 	{ _link_desc,		zfs_netbsd_link },
@@ -6353,6 +6354,7 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ _ioctl_desc,		spec_ioctl },
 	{ _poll_desc,		spec_poll },
 	{ _kqfilter_desc,		spec_kqfilter },
+	{ _revoke_desc,		spec_revoke },
 	{ _fsync_desc,		zfs_netbsd_fsync },
 	{ _remove_desc,		spec_remove },
 	{ _link_desc,		spec_link },
@@ -6397,6 +6399,7 @@ const struct vnodeopv_entry_desc zfs_fif
 	{ _ioctl_desc,		vn_fifo_bypass },
 	{ _poll_desc,		vn_fifo_bypass },
 	{ _kqfilter_desc,		vn_fifo_bypass },
+	{ _revoke_desc,		vn_fifo_bypass },
 	{ _fsync_desc,		zfs_netbsd_fsync },
 	{ _remove_desc,		vn_fifo_bypass },
 	{ _link_desc,		vn_fifo_bypass },



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-02-13 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Feb 13 16:53:32 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
zfs_netbsd_setattr: ignore size changes on device nodes.


To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.56 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.57
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.56	Sat Jan 18 15:21:32 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Feb 13 16:53:32 2020
@@ -5575,6 +5575,9 @@ zfs_netbsd_setattr(void *v)
 
 	zflags = VTOZ(vp)->z_pflags;
 
+	/* Ignore size changes on device nodes. */
+	if (vp->v_type == VBLK || vp->v_type == VCHR)
+		xvap.xva_vattr.va_mask &= ~AT_SIZE;
 	if (vap->va_flags != VNOVAL) {
 		int error;
 



CVS commit: src/external/cddl/osnet/dist/lib/libdtrace/common

2020-02-11 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Feb 12 01:10:08 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/lib/libdtrace/common: dt_impl.h
dt_module.c dt_open.c

Log Message:
Use /dev/ksyms, not /netbsd, for the running kernel's symbols.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/external/cddl/osnet/dist/lib/libdtrace/common/dt_impl.h
cvs rdiff -u -r1.17 -r1.18 \
src/external/cddl/osnet/dist/lib/libdtrace/common/dt_module.c
cvs rdiff -u -r1.16 -r1.17 \
src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c

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

Modified files:

Index: src/external/cddl/osnet/dist/lib/libdtrace/common/dt_impl.h
diff -u src/external/cddl/osnet/dist/lib/libdtrace/common/dt_impl.h:1.8 src/external/cddl/osnet/dist/lib/libdtrace/common/dt_impl.h:1.9
--- src/external/cddl/osnet/dist/lib/libdtrace/common/dt_impl.h:1.8	Mon May 28 21:05:05 2018
+++ src/external/cddl/osnet/dist/lib/libdtrace/common/dt_impl.h	Wed Feb 12 01:10:08 2020
@@ -750,8 +750,6 @@ extern int yylex(void);
 #endif
 
 #ifdef __NetBSD__
-extern const char *dt_bootfile(char *, size_t);
-
 #define longlong_t long long
 #define u_longlong_t unsigned long long
 #define __DECONST(a, b) __UNCONST(b)

Index: src/external/cddl/osnet/dist/lib/libdtrace/common/dt_module.c
diff -u src/external/cddl/osnet/dist/lib/libdtrace/common/dt_module.c:1.17 src/external/cddl/osnet/dist/lib/libdtrace/common/dt_module.c:1.18
--- src/external/cddl/osnet/dist/lib/libdtrace/common/dt_module.c:1.17	Sat Jun  2 01:19:46 2018
+++ src/external/cddl/osnet/dist/lib/libdtrace/common/dt_module.c	Wed Feb 12 01:10:08 2020
@@ -43,6 +43,7 @@
 #endif
 #ifdef __NetBSD__
 #include 
+#include 
 #endif
 
 #include 
@@ -1185,9 +1186,7 @@ dt_module_update(dtrace_hdl_t *dtp, stru
 	bool ismod;
 
 	if (strcmp("netbsd", name) == 0) {
-		/* want the kernel, but it is not absolute */
-		dt_bootfile(machine, sizeof(machine));
-		snprintf(fname, sizeof(fname), "/%s", machine);
+		strlcpy(fname, _PATH_KSYMS, sizeof fname);
 		ismod = false;
 	} else {
 

Index: src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c
diff -u src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c:1.16 src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c:1.17
--- src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c:1.16	Wed Jul 24 16:57:45 2019
+++ src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c	Wed Feb 12 01:10:08 2020
@@ -1025,24 +1025,15 @@ dt_get_sysinfo(int cmd, char *buf, size_
 }
 #endif
 
-#ifndef illumos
-# ifdef __FreeBSD__
-#  define DEFKERNEL	"kernel"
-#  define BOOTFILE	"kern.bootfile"
-# endif
-# ifdef __NetBSD__
-#  define DEFKERNEL	"netbsd"
-#  define BOOTFILE	"machdep.booted_kernel"
-# endif
-
-const char *
+#ifdef __FreeBSD__
+static const char *
 dt_bootfile(char *bootfile, size_t len)
 {
 	char *p;
 	size_t olen = len;
 
-	if (sysctlbyname(BOOTFILE, bootfile, , NULL, 0) != 0)
-		strlcpy(bootfile, DEFKERNEL, olen);
+	if (sysctlbyname("kern.bootfile", bootfile, , NULL, 0) != 0)
+		strlcpy(bootfile, "kernel", olen);
 
 	if ((p = strrchr(bootfile, '/')) != NULL)
 		p++;
@@ -1050,9 +1041,6 @@ dt_bootfile(char *bootfile, size_t len)
 		p = bootfile;
 	return p;
 }
-
-# undef DEFKERNEL
-# undef BOOTFILE
 #endif
 
 static dtrace_hdl_t *



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2020-01-18 Thread Andrew Doran
Module Name:src
Committed By:   ad
Date:   Sat Jan 18 15:21:32 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Track page dirtyness for ZFS (yamt-pagecache).  I had forgotten that it had
its own cache.  Thanks to hannken@ for the repro.


To generate a diff of this commit:
cvs rdiff -u -r1.55 -r1.56 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.55 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.56
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.55	Wed Jan 15 17:55:43 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sat Jan 18 15:21:32 2020
@@ -779,7 +779,7 @@ update_pages(vnode_t *vp, int64_t start,
 	struct uvm_object *uobj = >v_uobj;
 	kmutex_t *mtx = uobj->vmobjlock;
 	caddr_t va;
-	int off;
+	int off, status;
 
 	ASSERT(vp->v_mount != NULL);
 
@@ -796,6 +796,26 @@ update_pages(vnode_t *vp, int64_t start,
 		found = uvn_findpages(uobj, start, , , NULL,
 		UFP_NOALLOC);
 		if (found) {
+			/*
+			 * We're about to zap the page's contents and don't
+			 * care about any existing modifications.  We must
+			 * keep track of any new modifications past this
+			 * point.  Clear the modified bit in the pmap, and
+			 * if the page is marked dirty revert to tracking
+			 * the modified bit.
+			 */
+			switch (uvm_pagegetdirty(pp)) {
+			case UVM_PAGE_STATUS_DIRTY:
+/* Does pmap_clear_modify(). */
+uvm_pagemarkdirty(pp, UVM_PAGE_STATUS_UNKNOWN);
+break;
+			case UVM_PAGE_STATUS_UNKNOWN:
+pmap_clear_modify(pp);
+break;
+			case UVM_PAGE_STATUS_CLEAN:
+/* Nothing to do. */
+break;
+			}
 			mutex_exit(mtx);
 
 			va = zfs_map_page(pp, S_WRITE);
@@ -5990,10 +6010,13 @@ zfs_netbsd_getpages(void *v)
 
 		mutex_enter(mtx);
 		pg->flags &= ~(PG_FAKE);
-		pmap_clear_modify(pg);
 	}
 
 	if (memwrite) {
+		if (uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) {
+			/* For write faults, start dirtiness tracking. */
+			uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN);
+		}
 		if ((vp->v_iflag & VI_ONWORKLST) == 0) {
 			vn_syncer_add_to_worklist(vp, filedelay);
 		}



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-12-08 Thread Sevan Janiyan
Module Name:src
Committed By:   sevan
Date:   Mon Dec  9 00:15:11 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c

Log Message:
We currently lack a tunable to control ZFS prefetch, so skip the warning and
FreeBSD specific instructions on settings.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.15 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.16
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.15	Sun Dec  1 20:26:05 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c	Mon Dec  9 00:15:11 2019
@@ -6218,6 +6218,7 @@ arc_init(void)
 	}
 
 #ifdef _KERNEL
+#ifdef __FreeBSD__
 	if (TUNABLE_INT_FETCH("vfs.zfs.prefetch_disable", _prefetch_disable))
 		prefetch_tunable_set = 1;
 
@@ -6239,6 +6240,7 @@ arc_init(void)
 		zfs_prefetch_disable = 1;
 	}
 #endif
+#endif
 	/* Warn about ZFS memory and address space requirements. */
 	if (((uint64_t)physmem * PAGESIZE) < (256 + 128 + 64) * (1 << 20)) {
 		printf("ZFS WARNING: Recommended minimum RAM size is 512MB; "
@@ -6247,9 +6249,11 @@ arc_init(void)
 	if (kmem_size() < 512 * (1 << 20)) {
 		printf("ZFS WARNING: Recommended minimum kmem_size is 512MB; "
 		"expect unstable behavior.\n");
+#ifdef __FreeBSD__
 		printf(" Consider tuning vm.kmem_size and "
 		"vm.kmem_size_max\n");
 		printf(" in /boot/loader.conf.\n");
+#endif
 	}
 #endif
 }



CVS commit: src/external/cddl/osnet/dist/uts/common/os

2019-12-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Dec  1 20:26:31 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/os: fm.c

Log Message:
Need sys/atomic.h on NetBSD


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/dist/uts/common/os/fm.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/os/fm.c
diff -u src/external/cddl/osnet/dist/uts/common/os/fm.c:1.1 src/external/cddl/osnet/dist/uts/common/os/fm.c:1.2
--- src/external/cddl/osnet/dist/uts/common/os/fm.c:1.1	Mon Jun 24 08:27:20 2019
+++ src/external/cddl/osnet/dist/uts/common/os/fm.c	Sun Dec  1 20:26:31 2019
@@ -65,6 +65,7 @@
 #include 
 #include 
 #ifdef __NetBSD__
+#include 
 #include 
 #else
 #include 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-12-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Dec  1 20:26:05 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c

Log Message:
Provide a default ptob() implementation


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.14 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.15
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.14	Sun May 26 10:21:00 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c	Sun Dec  1 20:26:05 2019
@@ -280,6 +280,9 @@ int arc_procfd;
 #ifndef btop
 #define	btop(x)		((x) / PAGE_SIZE)
 #endif
+#ifndef ptob
+#define ptob(x)		((x) * PAGE_SIZE)
+#endif
 //#define	needfree	(uvmexp.free < uvmexp.freetarg ? uvmexp.freetarg : 0)
 #define	buf_init	arc_buf_init
 #define	freemem		uvmexp.free



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-12-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Dec  1 20:25:31 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
Initialize b_dev before passing buf to d_minphys (ldminphys needs this)


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.13
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.12	Tue Aug 20 08:12:14 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Sun Dec  1 20:25:31 2019
@@ -244,6 +244,7 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 			} else {
 pdk = NULL;
 			}
+			buf.b_dev = vp->v_rdev;
 		}
 		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
 			(*pdk->dk_driver->d_minphys)();



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-04-15 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Apr 15 12:59:38 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c
zfs_vnops.c zfs_znode.c

Log Message:
Add support for fifos, character and block devices.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.47 -r1.48 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.25 -r1.26 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.21 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.22
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.21	Mon Mar 18 09:22:14 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Mon Apr 15 12:59:38 2019
@@ -147,10 +147,14 @@ void zfs_init(void);
 void zfs_fini(void);
 
 extern const struct vnodeopv_desc zfs_vnodeop_opv_desc;
+extern const struct vnodeopv_desc zfs_specop_opv_desc;
+extern const struct vnodeopv_desc zfs_fifoop_opv_desc;
 extern const struct vnodeopv_desc zfs_sfsop_opv_desc;
 
 static const struct vnodeopv_desc * const zfs_vnodeop_descs[] = {
 	_vnodeop_opv_desc,
+	_specop_opv_desc,
+	_fifoop_opv_desc,
 	_sfsop_opv_desc,
 	NULL,
 };

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.48
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47	Mon Mar 18 09:20:58 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Mon Apr 15 12:59:38 2019
@@ -81,6 +81,7 @@
 
 #ifdef __NetBSD__
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -5072,16 +5073,39 @@ static int
 zfs_netbsd_read(void *v)
 {
 	struct vop_read_args *ap = v;
+	vnode_t *vp = ap->a_vp;
+	znode_t *zp = VTOZ(vp);
 
-	return (zfs_read(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL));
+	switch (vp->v_type) {
+	case VBLK:
+	case VCHR:
+		ZFS_ACCESSTIME_STAMP(zp->z_zfsvfs, zp);
+		return (VOCALL(spec_vnodeop_p, VOFFSET(vop_read), ap));
+	case VFIFO:
+		ZFS_ACCESSTIME_STAMP(zp->z_zfsvfs, zp);
+		return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_read), ap));
+	}
+
+	return (zfs_read(vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL));
 }
 
 static int
 zfs_netbsd_write(void *v)
 {
 	struct vop_write_args *ap = v;
+	vnode_t *vp = ap->a_vp;
 
-	return (zfs_write(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL));
+	switch (vp->v_type) {
+	case VBLK:
+	case VCHR:
+		GOP_MARKUPDATE(vp, GOP_UPDATE_MODIFIED);
+		return (VOCALL(spec_vnodeop_p, VOFFSET(vop_write), ap));
+	case VFIFO:
+		GOP_MARKUPDATE(vp, GOP_UPDATE_MODIFIED);
+		return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_write), ap));
+	}
+
+	return (zfs_write(vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL));
 }
 
 static int
@@ -5278,6 +5302,44 @@ zfs_netbsd_create(void *v)
 }
 
 static int
+zfs_netbsd_mknod(void *v)
+{
+	struct vop_mknod_v3_args /* {
+		struct vnode *a_dvp;
+		struct vnode **a_vpp;
+		struct componentname *a_cnp;
+		struct vattr *a_vap;
+	} */ *ap = v;
+	struct vnode *dvp = ap->a_dvp;
+	struct vnode **vpp = ap->a_vpp;
+	struct componentname *cnp = ap->a_cnp;
+	struct vattr *vap = ap->a_vap;
+	char *nm;
+	int mode;
+	int error;
+
+	KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
+
+	vattr_init_mask(vap);
+	mode = vap->va_mode & ALLPERMS;
+
+	/* ZFS wants a null-terminated name. */
+	nm = PNBUF_GET();
+	(void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1);
+
+	/* XXX !EXCL is wrong here...  */
+	error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL);
+
+	PNBUF_PUT(nm);
+
+	KASSERT((error == 0) == (*vpp != NULL));
+	KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
+	VOP_UNLOCK(*vpp, 0);
+
+	return (error);
+}
+
+static int
 zfs_netbsd_remove(void *v)
 {
 	struct vop_remove_v2_args /* {
@@ -6149,6 +6211,7 @@ const struct vnodeopv_entry_desc zfs_vno
 	{ _default_desc,		vn_default_error },
 	{ _lookup_desc,		zfs_netbsd_lookup },
 	{ _create_desc,		zfs_netbsd_create },
+	{ _mknod_desc,		zfs_netbsd_mknod },
 	{ _open_desc,		zfs_netbsd_open },
 	{ _close_desc,		zfs_netbsd_close },
 	{ _access_desc,		zfs_netbsd_access },
@@ -6185,4 +6248,87 @@ const struct vnodeopv_entry_desc zfs_vno
 const struct vnodeopv_desc zfs_vnodeop_opv_desc =
 	{ _vnodeop_p, zfs_vnodeop_entries };
 
+int (**zfs_specop_p)(void *);
+const struct vnodeopv_entry_desc zfs_specop_entries[] = {
+	{ _default_desc,		vn_default_error },
+	{ _lookup_desc,		spec_lookup },
+	{ _create_desc,		spec_create },
+	{ _mknod_desc,		spec_mknod },
+	{ _open_desc,		spec_open },
+	{ _close_desc,		spec_close },
+	{ _access_desc,		

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-03-18 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Mar 18 09:22:15 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c
zfs_vfsops.c
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_ctldir.h

Log Message:
Make ZFS exportable by NFS, implement zfsctl_vptofh(),
zfs_netbsd_vptofh() and zfs_netbsd_fhtovp().

Undo changes to now completely unused zfs_fhtovp().


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
cvs rdiff -u -r1.20 -r1.21 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_ctldir.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.9
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8	Mon Mar 18 09:21:31 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c	Mon Mar 18 09:22:14 2019
@@ -1885,6 +1885,33 @@ zfsctl_loadvnode(vfs_t *vfsp, vnode_t *v
 	return 0;
 }
 
+int
+zfsctl_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size)
+{
+	struct sfs_node *node = VTOSFS(vp);
+	uint64_t object = node->sn_id;
+	zfid_short_t *zfid = (zfid_short_t *)fidp;
+	int i;
+
+	SFS_NODE_ASSERT(vp);
+
+	if (*fh_size < SHORT_FID_LEN) {
+		*fh_size = SHORT_FID_LEN;
+		return SET_ERROR(E2BIG);
+	}
+	*fh_size = SHORT_FID_LEN;
+
+	zfid->zf_len = SHORT_FID_LEN;
+	for (i = 0; i < sizeof(zfid->zf_object); i++)
+		zfid->zf_object[i] = (uint8_t)(object >> (8 * i));
+
+	/* .zfs nodes always have a generation number of 0 */
+	for (i = 0; i < sizeof(zfid->zf_gen); i++)
+		zfid->zf_gen[i] = 0;
+
+	return 0;
+}
+
 /*
  * Return the ".zfs" vnode.
  */

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.21
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20	Mon Mar 18 09:20:58 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Mon Mar 18 09:22:14 2019
@@ -136,7 +136,8 @@ static int zfs_umount(vfs_t *vfsp, int f
 static int zfs_root(vfs_t *vfsp, int flags, vnode_t **vpp);
 static int zfs_netbsd_root(vfs_t *vfsp, vnode_t **vpp);
 static int zfs_statvfs(vfs_t *vfsp, struct statvfs *statp);
-static int zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp);
+static int zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size);
+static int zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp);
 static int zfs_vget(vfs_t *vfsp, ino_t ino, vnode_t **vpp);
 static int zfs_sync(vfs_t *vfsp, int waitfor);
 static int zfs_netbsd_sync(vfs_t *vfsp, int waitfor, cred_t *cr);
@@ -172,8 +173,8 @@ struct vfsops zfs_vfsops = {
 	.vfs_renamelock_enter = genfs_renamelock_enter,
 	.vfs_renamelock_exit = genfs_renamelock_exit,
 	.vfs_reinit = (void *)nullop,
-	.vfs_vptofh = (void *)eopnotsupp,
-	.vfs_fhtovp = (void *)eopnotsupp,
+	.vfs_vptofh = zfs_netbsd_vptofh,
+	.vfs_fhtovp = zfs_netbsd_fhtovp,
 	.vfs_quotactl = (void *)eopnotsupp,
 	.vfs_extattrctl = (void *)eopnotsupp,
 	.vfs_suspendctl = genfs_suspendctl,
@@ -254,6 +255,171 @@ zfs_netbsd_root(vfs_t *vfsp, vnode_t **v
 	return zfs_root(vfsp, LK_EXCLUSIVE | LK_RETRY, vpp);
 }
 
+static int
+zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size)
+{
+	znode_t		*zp;
+	zfsvfs_t	*zfsvfs;
+	uint32_t	gen;
+	uint64_t	gen64;
+	uint64_t	object;
+	zfid_short_t	*zfid;
+	int		size, i, error;
+
+	if (zfsctl_is_node(vp))
+		return zfsctl_vptofh(vp, fidp, fh_size);
+
+	zp = VTOZ(vp);
+	zfsvfs = zp->z_zfsvfs;
+	object = zp->z_id;
+
+	ZFS_ENTER(zfsvfs);
+	ZFS_VERIFY_ZP(zp);
+
+	if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs),
+	, sizeof (uint64_t))) != 0) {
+		ZFS_EXIT(zfsvfs);
+		return (error);
+	}
+
+	gen = (uint32_t)gen64;
+
+	size = (zfsvfs->z_parent != zfsvfs) ? LONG_FID_LEN : SHORT_FID_LEN;
+
+	if (*fh_size < size) {
+		ZFS_EXIT(zfsvfs);
+		*fh_size = size;
+		return SET_ERROR(E2BIG);
+	}
+	*fh_size = size;
+
+	zfid = (zfid_short_t *)fidp;
+
+	zfid->zf_len = size;
+
+	for (i = 0; i < sizeof (zfid->zf_object); i++)
+		zfid->zf_object[i] = (uint8_t)(object >> (8 * i));
+
+	/* Must have a non-zero generation number to distinguish from .zfs */
+	if (gen == 0)
+		gen = 1;
+	for (i = 0; i < sizeof (zfid->zf_gen); i++)
+		zfid->zf_gen[i] = (uint8_t)(gen >> (8 * i));
+
+	if (size == LONG_FID_LEN) {
+		uint64_t	objsetid = dmu_objset_id(zfsvfs->z_os);
+		zfid_long_t	*zlfid;
+
+		zlfid = (zfid_long_t *)fidp;
+
+		for (i = 0; i < sizeof (zlfid->zf_setid); i++)
+			zlfid->zf_setid[i] = (uint8_t)(objsetid >> (8 * i));
+
+		/* XXX - this should be the generation 

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-03-18 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Mar 18 09:21:31 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c

Log Message:
Implement zfsctl_lookup_objset() to look up "zfsvfs" of an mounted snapshot.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7	Mon Mar 18 09:20:58 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c	Mon Mar 18 09:21:31 2019
@@ -1946,8 +1946,23 @@ zfsctl_destroy(zfsvfs_t *zfsvfs)
 int
 zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp)
 {
+	struct sfs_node_key key = {
+		.parent_id = ZFSCTL_INO_SNAPDIR,
+		.id = objsetid
+	};
+	vnode_t *vp;
+	int error;
 
-	return EINVAL;
+	*zfsvfsp = NULL;
+	error = vcache_get(vfsp, , sizeof(key), );
+	if (error == 0) {
+		if (vp->v_mountedhere)
+			*zfsvfsp = vp->v_mountedhere->mnt_data;
+		vrele(vp);
+	}
+	if (*zfsvfsp == NULL)
+		return SET_ERROR(EINVAL);
+	return 0;
 }
 
 int



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-03-18 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Mar 18 09:20:58 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c
zfs_vfsops.c zfs_vnops.c

Log Message:
Set "mnt_stat.f_fsid" and "mnt_stat.f_fsidx" from the objset guid
like FreeBSD and Illumos do.

Use "f_fsid" for "va_fsid" and cheat NFSD to export snapshots under
".zfs" by setting these snaphots "f_fsidx" to the parents "f_fsidx".


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
cvs rdiff -u -r1.19 -r1.20 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.46 -r1.47 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.6	Wed Feb 20 10:08:37 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c	Mon Mar 18 09:20:58 2019
@@ -1335,7 +1335,9 @@ sfs_snapshot_mount(vnode_t *vp, const ch
 	if (error)
 		goto out;
 
-	vfs_getnewfsid(vfsp);
+	/* Set f_fsidx from parent to cheat NFSD. */
+	vfsp->mnt_stat.f_fsidx = vp->v_vfsp->mnt_stat.f_fsidx;
+
 	strlcpy(vfsp->mnt_stat.f_mntfromname, osname,
 	sizeof(vfsp->mnt_stat.f_mntfromname));
 	set_statvfs_info(path, UIO_SYSSPACE, vfsp->mnt_stat.f_mntfromname,
@@ -1622,7 +1624,7 @@ sfs_getattr(void *v)
 	vap->va_nlink = 2;
 	vap->va_uid = 0;
 	vap->va_gid = 0;
-	vap->va_fsid = vp->v_vfsp->mnt_stat.f_fsidx.__fsid_val[0];
+	vap->va_fsid = vp->v_vfsp->mnt_stat.f_fsid;
 	vap->va_fileid = node->sn_id;
 	vap->va_size = 0;
 	vap->va_blocksize = 0;

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.19 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.19	Tue Feb  5 09:54:36 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Mon Mar 18 09:20:58 2019
@@ -1374,7 +1374,9 @@ zfs_domount(vfs_t *vfsp, char *osname)
 #endif
 #ifdef __NetBSD__
 	vfsp->mnt_stat.f_fsidx.__fsid_val[0] = fsid_guid;
-	vfsp->mnt_stat.f_fsidx.__fsid_val[1] = fsid_guid >> 32;
+	vfsp->mnt_stat.f_fsidx.__fsid_val[1] = ((fsid_guid>>32) << 8) |
+	makefstype(vfsp->mnt_op->vfs_name) & 0xFF;
+	vfsp->mnt_stat.f_fsid = fsid_guid;
 #endif
 
 	/*
@@ -1962,8 +1964,6 @@ zfs_mount(vfs_t *vfsp, const char *path,
 #endif
 
 #ifdef __NetBSD__
-	vfs_getnewfsid(vfsp);
-
 	/* setup zfs mount info */
 	strlcpy(vfsp->mnt_stat.f_mntfromname, osname,
 	sizeof(vfsp->mnt_stat.f_mntfromname));
@@ -2036,7 +2036,8 @@ zfs_statvfs(vfs_t *vfsp, struct statvfs 
 	statp->f_fsid = d32;
 #endif
 #ifdef __NetBSD__
-	statp->f_fsid = vfsp->mnt_stat.f_fsidx.__fsid_val[0];
+	statp->f_fsid = vfsp->mnt_stat.f_fsid;
+	statp->f_fsidx = vfsp->mnt_stat.f_fsidx;
 #endif
 
 	/*

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46	Mon Mar 18 09:20:15 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Mon Mar 18 09:20:58 2019
@@ -3073,7 +3073,7 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
 	vap->va_nodeid = zp->z_id;
 #endif
 #ifdef __NetBSD__
-	vap->va_fsid = vp->v_mount->mnt_stat.f_fsidx.__fsid_val[0];
+	vap->va_fsid = vp->v_mount->mnt_stat.f_fsid;
 	vap->va_nodeid = zp->z_id;
 	/*
 	 * If we are a snapshot mounted under .zfs, return



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-03-18 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Mar 18 09:20:15 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
As zfs_netbsd_getpages() ignores "a_count" and processes exactly one page
return an error if "a_count != 1".


To generate a diff of this commit:
cvs rdiff -u -r1.45 -r1.46 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.45 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.45	Mon Mar 18 09:19:39 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Mon Mar 18 09:20:15 2019
@@ -5844,6 +5844,9 @@ zfs_netbsd_getpages(void *v)
 	if (async) {
 		return 0;
 	}
+	if (*ap->a_count != 1) {
+		return EBUSY;
+	}
 
 	ZFS_ENTER(zfsvfs);
 	ZFS_VERIFY_ZP(zp);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-03-18 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Mar 18 09:19:39 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Change zfs_readdir() to use malloc() instead of kmem_alloc() to
allocate cookies.  Required by protocol, caller uses free().


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.44 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.45
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.44	Tue Feb  5 09:54:36 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Mon Mar 18 09:19:39 2019
@@ -85,6 +85,7 @@
 #include 
 #include 
 #include 
+#include 
 
 uint_t zfs_putpage_key;
 #endif
@@ -2754,7 +2755,7 @@ zfs_readdir(vnode_t *vp, uio_t *uio, cre
 #endif
 #ifdef __NetBSD__
 		ncooks = uio->uio_resid / _DIRENT_MINSIZE(odp);
-		cooks = kmem_alloc(ncooks * sizeof(off_t), KM_SLEEP);
+		cooks = malloc(ncooks * sizeof(off_t), M_TEMP, M_WAITOK);
 #endif
 		*cookies = cooks;
 		*ncookies = ncooks;



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-02-22 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Fri Feb 22 09:01:32 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_replay.c

Log Message:
Always set "cn_namelen" in addition to "cn_nameptr".

Fix vnode locking for REMOVE, RMDIR and RENAME.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.12
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.11	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c	Fri Feb 22 09:01:32 2019
@@ -501,6 +501,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c
 			name = (char *)start;
 
 		cn.cn_nameptr = name;
+#ifdef __NetBSD__
+		cn.cn_namelen = strlen(name);
+#endif
 		error = VOP_CREATE(ZTOV(dzp), , , _vattr /*,vflg*/);
 		break;
 	case TX_MKDIR_ATTR:
@@ -519,6 +522,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c
 			name = (char *)(lr + 1);
 
 		cn.cn_nameptr = name;
+#ifdef __NetBSD__
+		cn.cn_namelen = strlen(name);
+#endif
 		error = VOP_MKDIR(ZTOV(dzp), , , _vattr /*,vflg*/);
 		break;
 	case TX_MKXATTR:
@@ -528,6 +534,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c
 		name = (char *)(lr + 1);
 		link = name + strlen(name) + 1;
 		cn.cn_nameptr = name;
+#ifdef __NetBSD__
+		cn.cn_namelen = strlen(name);
+#endif
 		error = VOP_SYMLINK(ZTOV(dzp), , , _vattr, link /*,vflg*/);
 		break;
 	default:
@@ -585,7 +594,7 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_r
 		goto fail;
 	}
 #ifdef __NetBSD__
-	VOP_UNLOCK(vp, 0);
+	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
 #endif
 
 	switch ((int)lr->lr_common.lrc_txtype) {
@@ -596,11 +605,12 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_r
 		error = VOP_RMDIR(ZTOV(dzp), vp,  /*,vflg*/);
 		break;
 	default:
+#ifdef __NetBSD__
+		vput(vp);
+#endif
 		error = SET_ERROR(ENOTSUP);
 	}
-#ifdef __NetBSD__
-	vrele(vp);
-#else
+#ifndef __NetBSD__
 	vput(vp);
 #endif
 	VOP_UNLOCK(ZTOV(dzp), 0);
@@ -635,6 +645,9 @@ zfs_replay_link(zfsvfs_t *zfsvfs, lr_lin
 		vflg |= FIGNORECASE;
 
 	cn.cn_nameptr = name;
+#ifdef __NetBSD__
+	cn.cn_namelen = strlen(name);
+#endif
 	cn.cn_cred = kcred;
 #ifndef __NetBSD__
 	cn.cn_thread = curthread;
@@ -698,7 +711,9 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_r
 	VOP_UNLOCK(ZTOV(sdzp), 0);
 	if (error != 0)
 		goto fail;
+#ifndef __NetBSD__
 	VOP_UNLOCK(svp, 0);
+#endif
 
 	tcn.cn_nameptr = tname;
 	tcn.cn_namelen = strlen(tname);
@@ -718,7 +733,8 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_r
 		goto fail;
 	}
 #ifdef __NetBSD__
-	vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY);
+	if (tvp != NULL)
+		vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY);
 #endif
 
 	error = VOP_RENAME(ZTOV(sdzp), svp, , ZTOV(tdzp), tvp,  /*,vflg*/);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-02-05 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Feb  5 09:55:48 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c

Log Message:
Implement the ZFS control directory ".zfs" and its subdirectory 'snapshot".

Automatically mount snapshots on access of ".zfs/snapshot/".


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.5
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.4	Tue Feb  5 09:54:36 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c	Tue Feb  5 09:55:48 2019
@@ -1261,14 +1261,584 @@ zfsctl_umount_snapshots(vfs_t *vfsp, int
 
 #ifdef __NetBSD__
 
+#include 
+#include 
 #include 
+#include 
 #include 
 #include 
+#include 
+#include 
+
+struct zfsctl_root {
+	timestruc_t zc_cmtime;
+};
+
+struct sfs_node_key {
+	uint64_t parent_id;
+	uint64_t id;
+};
+struct sfs_node {
+	struct sfs_node_key sn_key;
+#define sn_parent_id sn_key.parent_id
+#define sn_id sn_key.id
+	lwp_t *sn_mounting;
+};
+
+#define ZFS_SNAPDIR_NAME "snapshot"
+
+#define VTOSFS(vp) ((struct sfs_node *)((vp)->v_data))
+
+#define SFS_NODE_ASSERT(vp) \
+	do { \
+		struct sfs_node *np = VTOSFS(vp); \
+		ASSERT((vp)->v_op == zfs_sfsop_p); \
+		ASSERT((vp)->v_type == VDIR); \
+	} while (/*CONSTCOND*/ 0)
 
 static int (**zfs_sfsop_p)(void *);
 
-static const struct vnodeopv_entry_desc zfs_sfsop_entries[] = {
+/*
+ * Mount a snapshot.  Cannot use do_sys_umount() as it
+ * doesn't allow its "path" argument from SYSSPACE.
+ */
+static int
+sfs_snapshot_mount(vnode_t *vp, const char *snapname)
+{
+	struct sfs_node *node = VTOSFS(vp);
+	zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data;
+	vfs_t *vfsp;
+	char *path, *osname;
+	int error;
+	extern int zfs_domount(vfs_t *, char *);
+
+	path = PNBUF_GET();
+	osname = PNBUF_GET();
+
+	dmu_objset_name(zfsvfs->z_os, path);
+	snprintf(osname, MAXPATHLEN, "%s@%s", path, snapname);
+	snprintf(path, MAXPATHLEN,
+	"%s/" ZFS_CTLDIR_NAME "/" ZFS_SNAPDIR_NAME "/%s",
+	vp->v_vfsp->mnt_stat.f_mntonname, snapname);
+
+	vfsp = vfs_mountalloc(vp->v_vfsp->mnt_op, vp);
+	if (vfsp == NULL) {
+		error = ENOMEM;
+		goto out;
+	}
+	vfsp->mnt_op->vfs_refcount++;
+	vfsp->mnt_stat.f_owner = 0;
+	vfsp->mnt_flag = MNT_RDONLY | MNT_NOSUID | MNT_IGNORE;
+
+	mutex_enter(>mnt_updating);
+
+	error = zfs_domount(vfsp, osname);
+	if (error)
+		goto out;
+
+	vfs_getnewfsid(vfsp);
+	strlcpy(vfsp->mnt_stat.f_mntfromname, osname,
+	sizeof(vfsp->mnt_stat.f_mntfromname));
+	set_statvfs_info(path, UIO_SYSSPACE, vfsp->mnt_stat.f_mntfromname,
+	UIO_SYSSPACE, vfsp->mnt_op->vfs_name, vfsp, curlwp);
+
+	vfsp->mnt_lower = vp->v_vfsp;
+
+	mountlist_append(vfsp);
+	vref(vp);
+	vp->v_mountedhere = vfsp;
+
+	mutex_exit(>mnt_updating);
+	(void) VFS_STATVFS(vfsp, >mnt_stat);
+
+out:;
+	if (error && vfsp) {
+		mutex_exit(>mnt_updating);
+		fstrans_unmount(vfsp);
+		vfs_rele(vfsp);
+	}
+	PNBUF_PUT(osname);
+	PNBUF_PUT(path);
+
+	return error;
+}
+
+static int
+sfs_lookup_snapshot(vnode_t *dvp, struct componentname *cnp, vnode_t **vpp)
+{
+	zfsvfs_t *zfsvfs = dvp->v_vfsp->vfs_data;
+	vnode_t *vp;
+	struct sfs_node *node;
+	struct sfs_node_key key;
+	char snapname[ZFS_MAX_DATASET_NAME_LEN];
+	int error;
+
+	/* Retrieve the snapshot object id and the to be mounted on vnode. */
+	if (cnp->cn_namelen >= sizeof(snapname))
+		return ENOENT;
+
+	strlcpy(snapname, cnp->cn_nameptr, cnp->cn_namelen + 1);
+	error = dsl_dataset_snap_lookup( dmu_objset_ds(zfsvfs->z_os),
+	snapname, );
+	if (error)
+		return error;
+	key.parent_id = ZFSCTL_INO_SNAPDIR;
+	error = vcache_get(zfsvfs->z_vfs, , sizeof(key), vpp);
+	if (error)
+		return error;
+
+	/* Handle case where the vnode is currently mounting. */
+	vp = *vpp;
+	mutex_enter(vp->v_interlock);
+	node = VTOSFS(vp);
+	if (node->sn_mounting) {
+		if (node->sn_mounting == curlwp)
+			error = 0;
+		else
+			error = ERESTART;
+		mutex_exit(vp->v_interlock);
+		if (error)
+			yield();
+		return error;
+	}
+
+	/* If not yet mounted mount the snapshot. */
+	if (vp->v_mountedhere == NULL) {
+		ASSERT(node->sn_mounting == NULL);
+		node->sn_mounting = curlwp;
+		mutex_exit(vp->v_interlock);
+
+		VOP_UNLOCK(dvp, 0);
+		error = sfs_snapshot_mount(vp, snapname);
+		if (vn_lock(dvp, LK_EXCLUSIVE) != 0) {
+			vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
+			error = ENOENT;
+		}
+
+		mutex_enter(vp->v_interlock);
+		if ((node = VTOSFS(vp)))
+			node->sn_mounting = NULL;
+		mutex_exit(vp->v_interlock);
+
+		if (error) {
+			vrele(vp);
+			*vpp = NULL;
+			return error;
+		}
+	} else
+		mutex_exit(vp->v_interlock);
+
+	/* Return the mounted root 

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-02-05 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Feb  5 09:50:18 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
zfs_netbsd_reclaim(): validate "z_log" before zil_commit().


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.42 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.43
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.42	Sat Jan  5 09:20:29 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Tue Feb  5 09:50:18 2019
@@ -5680,7 +5680,8 @@ zfs_netbsd_reclaim(void *v)
 		}
 	}
 
-	zil_commit(zfsvfs->z_log, zp->z_id);
+	if (zfsvfs->z_log)
+		zil_commit(zfsvfs->z_log, zp->z_id);
 
 	if (zp->z_sa_hdl == NULL)
 		zfs_znode_free(zp);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-01-12 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sat Jan 12 10:43:33 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c
zfs_onexit.c

Log Message:
The ZFS onexit routines expect opening ZFS_DEV with O_EXCL to return
a cloned device with an unique minor number.

Use fd_clone() on this condition to return a cloned device descriptor.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.14 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.15
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.14	Tue Jan  1 10:08:01 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c	Sat Jan 12 10:43:33 2019
@@ -6205,6 +6205,8 @@ zfs_ctldev_init(dev_t *devp)
 
 #ifdef __FreeBSD__
 	devfs_set_cdevpriv((void *)(uintptr_t)minor, zfsdev_close);
+#else
+	*devp = makedev(major(*devp), minor);
 #endif
 
 	zs = ddi_get_soft_state(zfsdev_state, minor);
@@ -6973,11 +6975,52 @@ MODULE_DEPEND(zfsctrl, acl_nfs4, 1, 1, 1
 
 MODULE(MODULE_CLASS_DRIVER, zfs, "solaris");
 
+static const struct fileops zfs_fileops;
+
+static int
+nb_zfsdev_fioctl(struct file *fp,  u_long cmd, void *argp)
+{
+	dev_t dev = (dev_t)(uintptr_t)fp->f_data;
+	int rval;
+
+	return zfsdev_ioctl(dev, cmd, (intptr_t)argp, fp->f_flag,
+	kauth_cred_get(), );
+}
+
+static int
+nb_zfsdev_fclose(struct file *fp)
+{
+	dev_t dev = (dev_t)(uintptr_t)fp->f_data;
+	int error;
+
+	return zfsdev_close(dev, fp->f_flag, OTYPCHR, fp->f_cred);
+}
+
 static int
 nb_zfsdev_copen(dev_t dev, int flag, int mode, lwp_t *l)
 {
+	const bool must_clone = (getminor(dev) == 0 && (flag & FEXCL) != 0);
+	struct file *fp;
+	int error, fd;
+
+	if (must_clone) {
+		error = fd_allocfile(, );
+		if (error)
+			return error;
+	}
+
+	error = zfsdev_open(, flag, OTYPCHR, kauth_cred_get());
 
-	return zfsdev_open(, flag, OTYPCHR, kauth_cred_get());
+	if (must_clone) {
+		if (error) {
+			fd_abort(curproc, fp, fd);
+			return error;
+		}
+		return fd_clone(fp, fd, flag, _fileops,
+		(void *)(uintptr_t)dev);
+	}
+
+	return error;
 }
 
 static int
@@ -7031,6 +7074,19 @@ nb_zvol_strategy(struct buf *bp)
 	(void) zvol_strategy(bp);
 }
 
+static const struct fileops zfs_fileops = {
+	.fo_name = "zfs",
+	.fo_read = fbadop_read,
+	.fo_write = fbadop_write,
+	.fo_ioctl = nb_zfsdev_fioctl,
+	.fo_fcntl = fnullop_fcntl,
+	.fo_poll = fnullop_poll,
+	.fo_stat = fbadop_stat,
+	.fo_close = nb_zfsdev_fclose,
+	.fo_kqfilter = fnullop_kqfilter,
+	.fo_restart = fnullop_restart,
+};
+
 const struct bdevsw zfs_bdevsw = {
 	.d_open = nb_zfsdev_bopen,
 	.d_close = nb_zfsdev_bclose,

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c:1.2	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c	Sat Jan 12 10:43:33 2019
@@ -146,7 +146,8 @@ zfs_onexit_fd_hold(int fd, minor_t *mino
 	if (fp == NULL)
 		return (SET_ERROR(EBADF));
 
-	*minorp = getminor(fp->f_vnode->v_rdev);
+	ASSERT(strcmp(fp->f_ops->fo_name, "zfs") == 0);
+	*minorp = minor((dev_t)(uintptr_t)fp->f_data);
 #endif
 
 	return (zfs_onexit_minor_to_state(*minorp, ));



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-01-12 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sat Jan 12 10:42:09 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_send.c

Log Message:
Need FOF_UPDATE_OFFSET to update the offset on plain files.

Running "zfs send" to plain files no longer writes garbage.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c:1.2	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c	Sat Jan 12 10:42:09 2019
@@ -72,6 +72,8 @@ static int
 fo_write(struct file *fp, struct uio *uio, cred_t *cred, int flags, kthread_t *thr)
 {
 
+	if (fp->f_type == DTYPE_VNODE)
+		flags |= FOF_UPDATE_OFFSET;
 	return (*fp->f_ops->fo_write)(fp, >f_offset, uio, cred, flags);
 }
 
@@ -79,6 +81,8 @@ static int
 fo_read(struct file *fp, struct uio *uio, cred_t *cred, int flags, kthread_t *thr)
 {
 
+	if (fp->f_type == DTYPE_VNODE)
+		flags |= FOF_UPDATE_OFFSET;
 	return (*fp->f_ops->fo_read)(fp, >f_offset, uio, cred, flags);
 }
 #endif



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-01-05 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sat Jan  5 09:20:29 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Even though zfs_netbsd_putpages() cannot use ZFS_ENTER() it has
to respect the teardown lock.

Enter z_teardown_lock as reader and ZFS_EXIT().

Instead of ZFS_VERIFY_ZP() return without writing and without
error from zfs_putapage() if "z_sa_hdl == NULL".


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.41 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.42
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.41	Tue Jan  1 10:09:26 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sat Jan  5 09:20:29 2019
@@ -5863,6 +5863,11 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 	struct uvm_object *uobj = >v_uobj;
 	kmutex_t *mtx = uobj->vmobjlock;
 
+	if (zp->z_sa_hdl == NULL) {
+		err = 0;
+		goto out_unbusy;
+	}
+
 	off = pp[0]->offset;
 	len = count * PAGESIZE;
 	KASSERT(off + len <= round_page(zp->z_size));
@@ -5914,6 +5919,7 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 	}
 	dmu_tx_commit(tx);
 
+out_unbusy:
 	mutex_enter(mtx);
 	mutex_enter(_pageqlock);
 	uvm_page_unbusy(pp, count);
@@ -5994,6 +6000,12 @@ zfs_netbsd_putpages(void *v)
 return 0;
 			}
 		}
+		/*
+		 * Cannot use ZFS_ENTER() here as it returns with error
+		 * if z_unmounted.  The next statement is equivalent.
+		 */
+		rrm_enter(>z_teardown_lock, RW_READER, FTAG);
+
 		rl = zfs_range_lock(zp, offlo, len, RL_WRITER);
 		mutex_enter(vp->v_interlock);
 		tsd_set(zfs_putpage_key, );
@@ -6011,6 +6023,7 @@ zfs_netbsd_putpages(void *v)
 		if (cleaned)
 		if (!async || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
 			zil_commit(zfsvfs->z_log, zp->z_id);
+		ZFS_EXIT(zfsvfs);
 		fstrans_done(vp->v_mount);
 	}
 	return error;



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-01-01 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Jan  1 10:08:42 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
As already noted in XXX comment do a zil_commit() on reclaim.


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.39 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.40
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.39	Thu Dec 13 10:20:51 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Tue Jan  1 10:08:42 2019
@@ -5663,11 +5663,6 @@ zfs_netbsd_reclaim(void *v)
 	/*
 	 * Process a deferred atime update.
 	 */
-	/*
-	 * XXXNETBSD I don't think this actually works.
-	 * We are dirtying the znode again after the vcache layer cleaned it,
-	 * so we would need to zil_commit() again here.
-	 */
 	if (zp->z_atime_dirty && zp->z_unlinked == 0) {
 		dmu_tx_t *tx = dmu_tx_create(zfsvfs->z_os);
 
@@ -5684,6 +5679,8 @@ zfs_netbsd_reclaim(void *v)
 		}
 	}
 
+	zil_commit(zfsvfs->z_log, zp->z_id);
+
 	if (zp->z_sa_hdl == NULL)
 		zfs_znode_free(zp);
 	else



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-01-01 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Jan  1 10:09:27 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Cannot use ZFS_ENTER() / ZFS_EXIT() as zfs_netbsd_putpages() is used
during vnode reclaim.

Add missing protection with fstrans.


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.40 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.41
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.40	Tue Jan  1 10:08:42 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Tue Jan  1 10:09:26 2019
@@ -84,6 +84,7 @@
 #include 
 #include 
 #include 
+#include 
 
 uint_t zfs_putpage_key;
 #endif
@@ -5972,9 +5973,6 @@ zfs_netbsd_putpages(void *v)
 	bool async = (flags & PGO_SYNCIO) == 0;
 	bool cleaning = (flags & PGO_CLEANIT) != 0;
 
-	ZFS_ENTER(zfsvfs);
-	ZFS_VERIFY_ZP(zp);
-
 	if (cleaning) {
 		ASSERT((offlo & PAGE_MASK) == 0 && (offhi & PAGE_MASK) == 0);
 		ASSERT(offlo < offhi || offhi == 0);
@@ -5983,25 +5981,38 @@ zfs_netbsd_putpages(void *v)
 		else
 			len = offhi - offlo;
 		mutex_exit(vp->v_interlock);
+		if (curlwp == uvm.pagedaemon_lwp) {
+			error = fstrans_start_nowait(vp->v_mount);
+			if (error)
+return error;
+		} else {
+			vfs_t *mp = vp->v_mount;
+			fstrans_start(mp);
+			if (vp->v_mount != mp) {
+fstrans_done(mp);
+ASSERT(!vn_has_cached_data(vp));
+return 0;
+			}
+		}
 		rl = zfs_range_lock(zp, offlo, len, RL_WRITER);
 		mutex_enter(vp->v_interlock);
 		tsd_set(zfs_putpage_key, );
 	}
 	error = genfs_putpages(v);
-	if (rl) {
+	if (cleaning) {
 		tsd_set(zfs_putpage_key, NULL);
 		zfs_range_unlock(rl);
-	}
 
-	/*
-	 * Only zil_commit() if we cleaned something.
-	 * This avoids deadlock if we're called from zfs_netbsd_setsize().
-	 */
+		/*
+		 * Only zil_commit() if we cleaned something.  This avoids 
+		 * deadlock if we're called from zfs_netbsd_setsize().
+		 */
 
-	if (cleaned)
-	if (!async || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
-		zil_commit(zfsvfs->z_log, zp->z_id);
-	ZFS_EXIT(zfsvfs);
+		if (cleaned)
+		if (!async || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
+			zil_commit(zfsvfs->z_log, zp->z_id);
+		fstrans_done(vp->v_mount);
+	}
 	return error;
 }
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2019-01-01 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Jan  1 10:08:01 UTC 2019

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c
zfs_vfsops.c zfs_znode.c
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_znode.h

Log Message:
Cannot hold zfs object across call to vcache_get() as it might
deadlock with another reclaim.

Add vfs operation zfs_newvnode() to create a new zfs node and
hold the zfs object in zfs_loadvnode() and zfs_newvnode() only.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
cvs rdiff -u -r1.17 -r1.18 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.23 -r1.24 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
cvs rdiff -u -r1.8 -r1.9 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.13 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.14
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.13	Mon Aug 20 06:47:16 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c	Tue Jan  1 10:08:01 2019
@@ -7120,7 +7120,6 @@ zfs_modcmd(modcmd_t cmd, void *arg)
 	uint64_t availrmem;
 
 	extern struct vfsops zfs_vfsops;
-	extern uint_t zfs_loadvnode_key;
 	extern uint_t zfs_putpage_key;
 
 	switch (cmd) {
@@ -7144,7 +7143,6 @@ zfs_modcmd(modcmd_t cmd, void *arg)
 		tsd_create(_fsyncer_key, NULL);
 		tsd_create(_tsd_key, rrw_tsd_destroy);
 		tsd_create(_allow_log_key, zfs_allow_log_destroy);
-		tsd_create(_loadvnode_key, zfs_loadvnode_destroy);
 		tsd_create(_putpage_key, NULL);
 
 		spa_init(FREAD | FWRITE);
@@ -7179,7 +7177,6 @@ attacherr:
 		spa_fini();
 
 		tsd_destroy(_putpage_key);
-		tsd_destroy(_loadvnode_key);
 		tsd_destroy(_fsyncer_key);
 		tsd_destroy(_tsd_key);
 		tsd_destroy(_allow_log_key);

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.17 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.18
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.17	Sun Sep 16 06:09:01 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Tue Jan  1 10:08:01 2019
@@ -163,6 +163,7 @@ struct vfsops zfs_vfsops = {
 	.vfs_sync = zfs_netbsd_sync,
 	.vfs_vget = zfs_vget,
 	.vfs_loadvnode = zfs_loadvnode,
+	.vfs_newvnode = zfs_newvnode,
 	.vfs_init = zfs_init,
 	.vfs_done = zfs_fini,
 	.vfs_start = (void *)nullop,

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.23 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.24
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.23	Thu Dec  6 09:58:52 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Tue Jan  1 10:08:01 2019
@@ -60,15 +60,6 @@ extern int (**zfs_vnodeop_p)(void *);
 extern int (**zfs_fifoop_p)(void *);
 extern int (**zfs_specop_p)(void *);
 
-struct zfs_loadvnode_args {
-	dmu_buf_t		*db;
-	int			blksz;
-	dmu_object_type_t	obj_type;
-	void			*sa_hdl;
-};
-
-uint_t zfs_loadvnode_key;
-
 #endif
 #endif /* _KERNEL */
 
@@ -621,6 +612,7 @@ zfs_vnode_forget(vnode_t *vp)
 	vgone(vp);
 	vput(vp);
 }
+#endif /* __FreeBSD__ */
 
 /*
  * Construct a new znode/vnode and intialize.
@@ -630,11 +622,18 @@ zfs_vnode_forget(vnode_t *vp)
  * return the znode
  */
 static znode_t *
+#ifdef __NetBSD__
+zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz,
+dmu_object_type_t obj_type, sa_handle_t *hdl, vnode_t *vp)
+#else
 zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz,
 dmu_object_type_t obj_type, sa_handle_t *hdl)
+#endif
 {
 	znode_t	*zp;
+#ifndef __NetBSD__
 	vnode_t *vp;
+#endif
 	uint64_t mode;
 	uint64_t parent;
 	sa_bulk_attr_t bulk[9];
@@ -643,6 +642,7 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
 
 	zp = kmem_cache_alloc(znode_cache, KM_SLEEP);
 
+#ifndef __NetBSD__
 	KASSERT(curthread->td_vp_reserv > 0,
 	("zfs_znode_alloc: getnewvnode without any vnodes reserved"));
 	error = getnewvnode("zfs", zfsvfs->z_parent->z_vfs, _vnodeops, );
@@ -650,6 +650,7 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
 		kmem_cache_free(znode_cache, zp);
 		return (NULL);
 	}
+#endif
 	zp->z_vnode = vp;
 	vp->v_data = zp;
 
@@ -669,6 +670,12 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
 	zp->z_seq = 0x7A4653;
 	zp->z_sync_cnt = 0;
 
+#ifdef __NetBSD__
+	vp->v_op = zfs_vnodeop_p;
+	vp->v_tag = VT_ZFS;
+	zp->z_lockf = NULL;
+#endif
+
 	vp = ZTOV(zp);
 
 	zfs_znode_sa_init(zfsvfs, zp, db, obj_type, hdl);
@@ -692,7 +699,9 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
 	if (sa_bulk_lookup(zp->z_sa_hdl, bulk, 

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-12-13 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Dec 13 10:20:51 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Drop v_interlock for zfs_range_lock(), another thread might hold part
of this range and wait for v_interlock.


To generate a diff of this commit:
cvs rdiff -u -r1.38 -r1.39 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.38 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.39
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.38	Thu Dec 13 10:20:20 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Dec 13 10:20:51 2018
@@ -5985,7 +5985,9 @@ zfs_netbsd_putpages(void *v)
 			len = UINT64_MAX;
 		else
 			len = offhi - offlo;
+		mutex_exit(vp->v_interlock);
 		rl = zfs_range_lock(zp, offlo, len, RL_WRITER);
+		mutex_enter(vp->v_interlock);
 		tsd_set(zfs_putpage_key, );
 	}
 	error = genfs_putpages(v);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-12-13 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Dec 13 10:20:20 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Operation zfs_range_lock() needs range as (offset,length), not as (low,high).


To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.37 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.38
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.37	Thu Dec  6 10:00:40 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Dec 13 10:20:20 2018
@@ -5968,6 +5968,7 @@ zfs_netbsd_putpages(void *v)
 	znode_t *zp = VTOZ(vp);
 	zfsvfs_t *zfsvfs = zp->z_zfsvfs;
 	rl_t *rl = NULL;
+	uint64_t len;
 	int error;
 	bool cleaned = false;
 
@@ -5978,7 +5979,13 @@ zfs_netbsd_putpages(void *v)
 	ZFS_VERIFY_ZP(zp);
 
 	if (cleaning) {
-		rl = zfs_range_lock(zp, offlo, offhi, RL_WRITER);
+		ASSERT((offlo & PAGE_MASK) == 0 && (offhi & PAGE_MASK) == 0);
+		ASSERT(offlo < offhi || offhi == 0);
+		if (offhi == 0)
+			len = UINT64_MAX;
+		else
+			len = offhi - offlo;
+		rl = zfs_range_lock(zp, offlo, len, RL_WRITER);
 		tsd_set(zfs_putpage_key, );
 	}
 	error = genfs_putpages(v);



CVS commit: src/external/cddl/osnet/dist/cmd/zdb

2018-12-09 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sun Dec  9 18:01:01 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/cmd/zdb: zdb.c

Log Message:
fix printf warnings.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/external/cddl/osnet/dist/cmd/zdb/zdb.c

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

Modified files:

Index: src/external/cddl/osnet/dist/cmd/zdb/zdb.c
diff -u src/external/cddl/osnet/dist/cmd/zdb/zdb.c:1.7 src/external/cddl/osnet/dist/cmd/zdb/zdb.c:1.8
--- src/external/cddl/osnet/dist/cmd/zdb/zdb.c:1.7	Mon May 28 17:05:04 2018
+++ src/external/cddl/osnet/dist/cmd/zdb/zdb.c	Sun Dec  9 13:01:01 2018
@@ -1144,8 +1144,8 @@ dump_history(spa_t *spa)
 			(void) snprintf(internalstr,
 			sizeof (internalstr),
 			"[internal %s txg:%lld] %s",
-			zfs_history_event_names[ievent], txg,
-			intstr);
+			zfs_history_event_names[ievent], 
+			(u_longlong_t)txg, intstr);
 			cmd = internalstr;
 		}
 		tsec = time;
@@ -2048,7 +2048,7 @@ dump_uberblock(uberblock_t *ub, const ch
 {
 	time_t timestamp = ub->ub_timestamp;
 
-	(void) printf(header ? header : "");
+	(void) printf("%s", header);
 	(void) printf("\tmagic = %016llx\n", (u_longlong_t)ub->ub_magic);
 	(void) printf("\tversion = %llu\n", (u_longlong_t)ub->ub_version);
 	(void) printf("\ttxg = %llu\n", (u_longlong_t)ub->ub_txg);
@@ -2060,7 +2060,7 @@ dump_uberblock(uberblock_t *ub, const ch
 		snprintf_blkptr(blkbuf, sizeof (blkbuf), >ub_rootbp);
 		(void) printf("\trootbp = %s\n", blkbuf);
 	}
-	(void) printf(footer ? footer : "");
+	(void) printf("%s", footer);
 }
 
 static void



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-12-06 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Dec  6 10:00:40 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
We have component names as counted strings (cn_nameptr, cn_namelen) but
ZFS expects a null-terminated name.

Always create a copy with PNBUF_GET()/strlcpy()/PNBUF_PUT().

For LOOKUP use a small buffer on stack and allocate/free compomnent names
longer than 30 chars.


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.36 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.37
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.36	Fri Nov 30 09:53:40 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Dec  6 10:00:40 2018
@@ -3847,8 +3847,13 @@ zfs_rename_relock(struct vnode *sdvp, st
 	zfsvfs_t	*zfsvfs;
 	struct vnode	*nvp, *svp, *tvp;
 	znode_t		*sdzp, *tdzp, *szp, *tzp;
+#ifdef __FreeBSD__
 	const char	*snm = scnp->cn_nameptr;
 	const char	*tnm = tcnp->cn_nameptr;
+#endif
+#ifdef __NetBSD__
+	char *snm, *tnm;
+#endif
 	int error;
 
 #ifdef __FreeBSD__
@@ -3918,7 +3923,15 @@ relock:
 	 * Re-resolve svp to be certain it still exists and fetch the
 	 * correct vnode.
 	 */
+#ifdef __NetBSD__
+	/* ZFS wants a null-terminated name. */
+	snm = PNBUF_GET();
+	strlcpy(snm, scnp->cn_nameptr, scnp->cn_namelen + 1);
+#endif
 	error = zfs_dirent_lookup(sdzp, snm, , ZEXISTS);
+#ifdef __NetBSD__
+	PNBUF_PUT(snm);
+#endif
 	if (error != 0) {
 		/* Source entry invalid or not there. */
 		ZFS_EXIT(zfsvfs);
@@ -3937,7 +3950,15 @@ relock:
 	/*
 	 * Re-resolve tvp, if it disappeared we just carry on.
 	 */
+#ifdef __NetBSD__
+	/* ZFS wants a null-terminated name. */
+	tnm = PNBUF_GET();
+	strlcpy(tnm, tcnp->cn_nameptr, tcnp->cn_namelen + 1);
+#endif
 	error = zfs_dirent_lookup(tdzp, tnm, , 0);
+#ifdef __NetBSD__
+	PNBUF_PUT(tnm);
+#endif
 	if (error != 0) {
 		ZFS_EXIT(zfsvfs);
 		VOP_UNLOCK(sdvp, 0);
@@ -4138,8 +4159,13 @@ zfs_rename(vnode_t *sdvp, vnode_t **svpp
 	znode_t		*sdzp, *tdzp, *szp, *tzp;
 	zilog_t		*zilog = NULL;
 	dmu_tx_t	*tx;
+#ifdef __FreeBSD__
 	char		*snm = __UNCONST(scnp->cn_nameptr);
 	char		*tnm = __UNCONST(tcnp->cn_nameptr);
+#endif
+#ifdef __NetBSD__
+	char *snm, *tnm;
+#endif
 	int		error = 0;
 
 	/* Reject renames across filesystems. */
@@ -4167,6 +4193,13 @@ zfs_rename(vnode_t *sdvp, vnode_t **svpp
 	sdzp = VTOZ(sdvp);
 	zfsvfs = tdzp->z_zfsvfs;
 	zilog = zfsvfs->z_log;
+#ifdef __NetBSD__
+	/* ZFS wants a null-terminated name. */
+	snm = PNBUF_GET();
+	strlcpy(snm, scnp->cn_nameptr, scnp->cn_namelen + 1);
+	tnm = PNBUF_GET();
+	strlcpy(tnm, tcnp->cn_nameptr, tcnp->cn_namelen + 1);
+#endif
 
 	/*
 	 * After we re-enter ZFS_ENTER() we will have to revalidate all
@@ -4388,6 +4421,10 @@ unlockout:			/* all 4 vnodes are locked,
 
 	VOP_UNLOCK(*svpp, 0);
 	VOP_UNLOCK(sdvp, 0);
+#ifdef __NetBSD__
+	PNBUF_PUT(snm);
+	PNBUF_PUT(tnm);
+#endif
 
 	if (*tvpp != sdvp && *tvpp != *svpp)
 	if (*tvpp != NULL)
@@ -5060,12 +5097,11 @@ zfs_netbsd_lookup(void *v)
 	struct vnode *dvp = ap->a_dvp;
 	struct vnode **vpp = ap->a_vpp;
 	struct componentname *cnp = ap->a_cnp;
-	char nm[NAME_MAX + 1];
+	char *nm, short_nm[31];
 	int error;
 	int iswhiteout;
 
 	KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
-	KASSERT(cnp->cn_namelen < sizeof nm);
 
 	*vpp = NULL;
 
@@ -5095,11 +5131,19 @@ zfs_netbsd_lookup(void *v)
 	 * zfs_lookup wants a null-terminated component name, but namei
 	 * gives us a pointer into the full pathname.
 	 */
+	ASSERT(cnp->cn_namelen < PATH_MAX - 1);
+	if (cnp->cn_namelen + 1 > sizeof(short_nm))
+		nm = PNBUF_GET();
+	else
+		nm = short_nm;
 	(void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1);
 
 	error = zfs_lookup(dvp, nm, vpp, NULL, 0, NULL, cnp->cn_cred, NULL,
 	NULL, NULL);
 
+	if (nm != short_nm)
+		PNBUF_PUT(nm);
+
 	/*
 	 * Translate errors to match our namei insanity.  Also, if the
 	 * caller wants to create an entry here, it's apparently our
@@ -5174,6 +5218,7 @@ zfs_netbsd_create(void *v)
 	struct vnode **vpp = ap->a_vpp;
 	struct componentname *cnp = ap->a_cnp;
 	struct vattr *vap = ap->a_vap;
+	char *nm;
 	int mode;
 	int error;
 
@@ -5182,9 +5227,14 @@ zfs_netbsd_create(void *v)
 	vattr_init_mask(vap);
 	mode = vap->va_mode & ALLPERMS;
 
+	/* ZFS wants a null-terminated name. */
+	nm = PNBUF_GET();
+	(void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1);
+
 	/* XXX !EXCL is wrong here...  */
-	error = zfs_create(dvp, __UNCONST(cnp->cn_nameptr), vap, !EXCL, mode,
-	vpp, cnp->cn_cred, NULL);
+	error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL);
+
+	PNBUF_PUT(nm);
 
 	KASSERT((error == 0) == (*vpp 

CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-12-06 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Dec  6 09:58:52 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c

Log Message:
Add missing ZFS_OBJ_HOLD_ENTER() / ZFS_OBJ_HOLD_EXIT() to zfs_zget_cleaner().


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.22 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.23
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.22	Wed Nov 28 09:55:36 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Thu Dec  6 09:58:52 2018
@@ -1188,8 +1188,11 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6
 	znode_t *zp;
 	int err;
 
+	ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num);
+
 	err = sa_buf_hold(zfsvfs->z_os, obj_num, NULL, );
 	if (err) {
+		ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
 		return (SET_ERROR(err));
 	}
 
@@ -1199,12 +1202,15 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6
 	(doi.doi_bonus_type == DMU_OT_ZNODE &&
 	doi.doi_bonus_size < sizeof (znode_phys_t {
 		sa_buf_rele(db, NULL);
+		ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
 		return (SET_ERROR(EINVAL));
 	}
 	hdl = dmu_buf_get_user(db);
-	KASSERT(hdl != NULL);
+	ASSERT3P(hdl, !=, NULL);
 	zp = sa_get_userdata(hdl);
+	ASSERT3U(zp->z_id, ==, obj_num);
 	sa_buf_rele(db, NULL);
+	ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
 	*zpp = zp;
 	return (0);
 }



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-28 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Nov 28 09:57:16 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
We expect VOP_ACCESS() to return EACCESS as general error.

Change zfs_netbsd_access() to translate the common EPERM to EACCES.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.31 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.32
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.31	Wed Nov 28 09:56:40 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed Nov 28 09:57:16 2018
@@ -5053,6 +5053,10 @@ zfs_netbsd_access(void *v)
 	KASSERT(VOP_ISLOCKED(vp));
 	error = zfs_access(vp, zfs_mode, 0, cred, NULL);
 
+	/* We expect EACCES as common error. */
+	if (error == EPERM)
+		error = EACCES;
+
 	return (error);
 }
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-28 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Nov 28 09:56:40 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Don't try to release a NULL vnode in zfs_netbsd_rename().


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.30 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.31
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.30	Wed Nov 28 09:56:09 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed Nov 28 09:56:40 2018
@@ -5467,7 +5467,8 @@ zfs_netbsd_rename(void *v)
 
 	VN_RELE(fdvp);
 	VN_RELE(tdvp);
-	VN_RELE(fvp);
+	if (fvp != NULL)
+		VN_RELE(fvp);
 	if (tvp != NULL)
 		VN_RELE(tvp);
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-28 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Nov 28 09:56:09 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Remove an early test for "source and target are equal" from zfs_rename()
that broke BSD semantics.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.29 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.30
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.29	Wed Nov 28 09:55:06 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed Nov 28 09:56:09 2018
@@ -4191,11 +4191,13 @@ zfs_rename(vnode_t *sdvp, vnode_t **svpp
 		goto unlockout;
 	}
 
+#ifndef __NetBSD__
 	/* If source and target are the same file, there is nothing to do. */
 	if ((*svpp) == (*tvpp)) {
 		error = 0;
 		goto unlockout;
 	}
+#endif
 
 	if (((*svpp)->v_type == VDIR && (*svpp)->v_mountedhere != NULL) ||
 	((*tvpp) != NULL && (*tvpp)->v_type == VDIR &&



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-28 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Nov 28 09:55:36 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c

Log Message:
Add missing sa_buf_rele() into zfs_zget_cleaner().


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.21 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.22
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.21	Tue Jul 31 09:33:50 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Wed Nov 28 09:55:36 2018
@@ -1204,6 +1204,7 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6
 	hdl = dmu_buf_get_user(db);
 	KASSERT(hdl != NULL);
 	zp = sa_get_userdata(hdl);
+	sa_buf_rele(db, NULL);
 	*zpp = zp;
 	return (0);
 }



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-28 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Nov 28 09:55:06 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Always unbusy pages in zfs_putapage() after the data has been written
into the DMU.  Running fsx no longer hangs the kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.28 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.29
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.28	Thu Nov 15 04:55:49 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Wed Nov 28 09:55:06 2018
@@ -5826,13 +5826,11 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 	}
 	dmu_tx_commit(tx);
 
-	if (async) {
-		mutex_enter(mtx);
-		mutex_enter(_pageqlock);
-		uvm_page_unbusy(pp, count);
-		mutex_exit(_pageqlock);
-		mutex_exit(mtx);
-	}
+	mutex_enter(mtx);
+	mutex_enter(_pageqlock);
+	uvm_page_unbusy(pp, count);
+	mutex_exit(_pageqlock);
+	mutex_exit(mtx);
 
 out:
 	return (err);



CVS commit: src/external/cddl/osnet/dist/uts/common/sys

2018-11-14 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Nov 15 04:55:17 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/sys: dtrace.h

Log Message:
Omit conflicting definition that breaks build on aarch64.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
src/external/cddl/osnet/dist/uts/common/sys/dtrace.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/sys/dtrace.h
diff -u src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.17 src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.18
--- src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.17	Mon Jun  4 21:36:03 2018
+++ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h	Thu Nov 15 04:55:17 2018
@@ -2483,7 +2483,10 @@ extern void dtrace_helpers_destroy(proc_
 #define	ARG2_MASK	0x1f
 #define	OFFSET_SHIFT	15
 #define	OFFSET_SIZE	7
+#if 0
+/* conflicts with lzjb.c */
 #define	OFFSET_MASK	((1 << OFFSET_SIZE) - 1)
+#endif
 
 #define	DTRACE_INVOP_PUSHM	1
 #define	DTRACE_INVOP_RET	2



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-14 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Nov 15 04:55:49 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c

Log Message:
Need  for mm_md_direct_mapped_phys.

It turns out this code always sees __HAVE_MM_MD_DIRECT_MAPPED_PHYS as
disabled on amd64, for reasons that I shall address forthwith, but it
is enabled on aarch64 and so the MKZFS=yes build breaks.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.27 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.28
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.27	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Nov 15 04:55:49 2018
@@ -80,6 +80,7 @@
 #endif
 
 #ifdef __NetBSD__
+#include 
 #include 
 #include 
 #include 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-14 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Nov 15 04:55:38 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: spa_misc.c
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: spa_impl.h

Log Message:
Be consistent about _KERNEL vs _HARDKERNEL in zfs.

As it happens, on x86 both _HARDKERNEL and _KERNEL get defined; see
the conditional in sys/rump/Makefile.rump that _refrains_ from
defining _RUMPKERNEL on x86.

So the only version of this code that has been tested is the one with
all of it included.  But on, e.g., aarch64, we do not get _HARDKERNEL
here, and the code fails to build because some things use the field
struct spa::spa_deadman_cycid under _KERNEL when it is declared only
under _HARDKERNEL.

If there's a reason _not_ to use this in rump -- and it's not obvious
to me why -- then all access to the field needs to agree to use
_HARDKERNEL.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c
cvs rdiff -u -r1.2 -r1.3 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c:1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c:1.4
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c:1.3	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c	Thu Nov 15 04:55:38 2018
@@ -391,7 +391,7 @@ zfs_deadman_init(void)
 #endif	/* __FreeBSD__ */
 
 #ifdef __NetBSD__
-#ifdef _HARDKERNEL
+#ifdef _KERNEL
 static struct workqueue *spa_workqueue;
 
 static void spa_deadman(void *arg);
@@ -420,10 +420,10 @@ zfs_deadman_fini(void)
 	workqueue_destroy(spa_workqueue);
 	spa_workqueue = NULL;
 }
-#else /* !_HARDKERNEL */
+#else /* !_KERNEL */
 #define zfs_deadman_init() /* nothing */
 #define zfs_deadman_fini() /* nothing */
-#endif /* !_HARDKERNEL */
+#endif /* !_KERNEL */
 #endif /* __NetBSD__ */
 
 /*
@@ -664,7 +664,7 @@ spa_deadman(void *arg)
 #endif
 }
 
-#ifdef _HARDKERNEL
+#ifdef _KERNEL
 static void
 spa_deadman_timeout(void *arg)
 {
@@ -771,7 +771,7 @@ spa_add(const char *name, nvlist_t *conf
 #endif
 #endif
 #ifdef __NetBSD__
-#ifdef _HARDKERNEL
+#ifdef _KERNEL
 	callout_init(>spa_deadman_cycid, 0);
 	callout_setfunc(>spa_deadman_cycid, spa_deadman_timeout, spa);
 #endif
@@ -892,7 +892,7 @@ spa_remove(spa_t *spa)
 #endif
 #endif
 #ifdef __NetBSD__
-#ifdef _HARDKERNEL
+#ifdef _KERNEL
 	callout_drain(>spa_deadman_cycid);
 #endif
 #endif

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h:1.2	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h	Thu Nov 15 04:55:38 2018
@@ -44,7 +44,7 @@
 #include 
 #include 
 
-#if defined(__NetBSD__) && defined(_HARDKERNEL)
+#if defined(__NetBSD__) && defined(_KERNEL)
 #include 
 #endif
 
@@ -276,7 +276,7 @@ struct spa {
 #endif
 #endif /* __FreeBSD__ */
 #ifdef __NetBSD__
-#ifdef _HARDKERNEL
+#ifdef _KERNEL
 	struct callout	spa_deadman_cycid;	/* callout id */
 	struct work	spa_deadman_work;
 #endif



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-11-14 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Nov 15 04:55:06 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev.c

Log Message:
"PRIu64", not llu, to print uint64_t.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c:1.6
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c:1.5	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c	Thu Nov 15 04:55:06 2018
@@ -3614,12 +3614,12 @@ vdev_deadman(vdev_t *vd)
 			delta = gethrtime() - fio->io_timestamp;
 			if (delta > spa_deadman_synctime(spa)) {
 zfs_dbgmsg("SLOW IO: zio timestamp %lluns, "
-"delta %lluns, last io %lluns",
+"delta %"PRIu64"ns, last io %lluns",
 fio->io_timestamp, delta,
 vq->vq_io_complete_ts);
 
 printf("SLOW IO: zio timestamp %lluns, "
-"delta %luns, last io %lluns",
+"delta %"PRIu64"ns, last io %lluns",
 fio->io_timestamp, delta,
 vq->vq_io_complete_ts);
 



CVS commit: src/external/cddl/osnet/dist/uts/common/sys

2018-10-23 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Tue Oct 23 22:25:21 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/sys: nvpair.h

Log Message:
prefix all nv* symbols with opensolaris_


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.3 -r1.2 \
src/external/cddl/osnet/dist/uts/common/sys/nvpair.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/sys/nvpair.h
diff -u src/external/cddl/osnet/dist/uts/common/sys/nvpair.h:1.1.1.3 src/external/cddl/osnet/dist/uts/common/sys/nvpair.h:1.2
--- src/external/cddl/osnet/dist/uts/common/sys/nvpair.h:1.1.1.3	Mon May 28 16:53:03 2018
+++ src/external/cddl/osnet/dist/uts/common/sys/nvpair.h	Tue Oct 23 18:25:21 2018
@@ -30,6 +30,8 @@
 #include 
 #include 
 
+#include 
+
 #if defined(_KERNEL) && !defined(_BOOT)
 #include 
 #endif



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-09-16 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Sun Sep 16 06:09:01 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c

Log Message:
Do not initialize .vfs_fhtovp twice


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.16 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.17
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.16	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c	Sun Sep 16 06:09:01 2018
@@ -163,7 +163,6 @@ struct vfsops zfs_vfsops = {
 	.vfs_sync = zfs_netbsd_sync,
 	.vfs_vget = zfs_vget,
 	.vfs_loadvnode = zfs_loadvnode,
-	.vfs_fhtovp = zfs_fhtovp,
 	.vfs_init = zfs_init,
 	.vfs_done = zfs_fini,
 	.vfs_start = (void *)nullop,



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-09-14 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Fri Sep 14 19:06:53 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_fuid.c

Log Message:
The macros kidmap_getsidby{u,g}id always return 1 from sid.h on NetBSD,
and clang is complaining about the impossible... So initialize rid and
be done with it, it is the least intrusive fix.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.6
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.5	Sat Aug 18 07:59:25 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c	Fri Sep 14 15:06:53 2018
@@ -558,7 +558,7 @@ zfs_fuid_create(zfsvfs_t *zfsvfs, uint64
 	const char *domain;
 	char *kdomain;
 	uint32_t fuid_idx = FUID_INDEX(id);
-	uint32_t rid;
+	uint32_t rid = UID_NOBODY;	// XXX: broken clang
 	idmap_stat status;
 	uint64_t idx = 0;
 	zfs_fuid_t *zfuid = NULL;



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-09-06 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Fri Sep  7 02:25:40 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_acl.c

Log Message:
handle clang stupidity


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.5
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.4	Mon May 28 17:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c	Thu Sep  6 22:25:40 2018
@@ -2359,6 +2359,7 @@ zfs_zaccess(znode_t *zp, int mode, int f
 	 */
 	if (zp->z_pflags & ZFS_XATTR)
 		return (0);
+	xzp = NULL;	// XXX: hello clang is_attr is false here.
 #else
 	/*
 	 * If attribute then validate against base file



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-08-20 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Mon Aug 20 06:47:16 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c

Log Message:
Avoid uninitialized warning.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.13
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.12	Sat Jun 16 11:18:33 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c	Mon Aug 20 02:47:16 2018
@@ -6470,7 +6470,8 @@ zfsdev_ioctl(dev_t dev, int zcmd, intptr
 goto out;
 			}
 		}
-	}
+	} else
+		zc_iocparm = NULL;
 
 	if (compat) {
 		if (newioc) {



CVS commit: src/external/cddl/osnet/dist/common/zfs

2018-08-18 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Aug 18 12:00:11 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/common/zfs: zfs_ioctl_compat.c

Log Message:
use the right variables (fix cut-n-pastos)


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 \
src/external/cddl/osnet/dist/common/zfs/zfs_ioctl_compat.c

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

Modified files:

Index: src/external/cddl/osnet/dist/common/zfs/zfs_ioctl_compat.c
diff -u src/external/cddl/osnet/dist/common/zfs/zfs_ioctl_compat.c:1.1.1.1 src/external/cddl/osnet/dist/common/zfs/zfs_ioctl_compat.c:1.2
--- src/external/cddl/osnet/dist/common/zfs/zfs_ioctl_compat.c:1.1.1.1	Mon May 28 16:52:52 2018
+++ src/external/cddl/osnet/dist/common/zfs/zfs_ioctl_compat.c	Sat Aug 18 08:00:11 2018
@@ -333,7 +333,7 @@ zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_
 		FIELD_COPY(zc_inject_record.zi_freq);
 		FIELD_COPY(zc_inject_record.zi_failfast);
 		strlcpy(zc->zc_inject_record.zi_func,
-		resume_c->zc_inject_record.zi_func, MAXNAMELEN);
+		zcdm_c->zc_inject_record.zi_func, MAXNAMELEN);
 		FIELD_COPY(zc_inject_record.zi_iotype);
 		FIELD_COPY(zc_inject_record.zi_duration);
 		FIELD_COPY(zc_inject_record.zi_timer);
@@ -617,7 +617,7 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_
 		FIELD_COPY(zc_inject_record.zi_type);
 		FIELD_COPY(zc_inject_record.zi_freq);
 		FIELD_COPY(zc_inject_record.zi_failfast);
-		strlcpy(resume_c->zc_inject_record.zi_func,
+		strlcpy(edbp_c->zc_inject_record.zi_func,
 		zc->zc_inject_record.zi_func, MAXNAMELEN);
 		FIELD_COPY(zc_inject_record.zi_iotype);
 		FIELD_COPY(zc_inject_record.zi_duration);
@@ -675,7 +675,7 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_
 		FIELD_COPY(zc_inject_record.zi_type);
 		FIELD_COPY(zc_inject_record.zi_freq);
 		FIELD_COPY(zc_inject_record.zi_failfast);
-		strlcpy(resume_c->zc_inject_record.zi_func,
+		strlcpy(zcmd_c->zc_inject_record.zi_func,
 		zc->zc_inject_record.zi_func, MAXNAMELEN);
 		FIELD_COPY(zc_inject_record.zi_iotype);
 		FIELD_COPY(zc_inject_record.zi_duration);
@@ -744,7 +744,7 @@ zfs_cmd_compat_put(zfs_cmd_t *zc, caddr_
 		FIELD_COPY(zc_inject_record.zi_type);
 		FIELD_COPY(zc_inject_record.zi_freq);
 		FIELD_COPY(zc_inject_record.zi_failfast);
-		strlcpy(resume_c->zc_inject_record.zi_func,
+		strlcpy(zcdm_c->zc_inject_record.zi_func,
 		zc->zc_inject_record.zi_func, MAXNAMELEN);
 		FIELD_COPY(zc_inject_record.zi_iotype);
 		FIELD_COPY(zc_inject_record.zi_duration);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-08-18 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Aug 18 11:59:25 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_fuid.c

Log Message:
make sure rid and idx are initialized.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.5
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.4	Mon May 28 17:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c	Sat Aug 18 07:59:25 2018
@@ -605,8 +605,14 @@ zfs_fuid_create(zfsvfs_t *zfsvfs, uint64
 			rid = FUID_RID(fuidp->z_fuid_group);
 			idx = FUID_INDEX(fuidp->z_fuid_group);
 			break;
+		default:
+			rid = UID_NOBODY;
+			break;
 		};
-		domain = fuidp->z_domain_table[idx - 1];
+		if (idx == 0)
+			domain = nulldomain;
+		else
+			domain = fuidp->z_domain_table[idx - 1];
 	} else {
 		if (type == ZFS_OWNER || type == ZFS_ACE_USER)
 			status = kidmap_getsidbyuid(crgetzone(cr), id,



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-08-18 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Aug 18 11:58:59 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_label.c

Log Message:
vdev_inuse might not be called and spare_guid contains random stuff.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.3 -r1.2 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c:1.1.1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c:1.2
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c:1.1.1.3	Mon May 28 16:52:58 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c	Sat Aug 18 07:58:59 2018
@@ -648,7 +648,7 @@ vdev_label_init(vdev_t *vd, uint64_t crt
 	char *buf;
 	size_t buflen;
 	int error;
-	uint64_t spare_guid, l2cache_guid;
+	uint64_t spare_guid = 0, l2cache_guid;
 	int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL;
 
 	ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL);



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-07-31 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Tue Jul 31 09:33:50 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c

Log Message:
Initialize z_lockf for new znodes.

Ok: Chuck Silvers


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.20 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.21
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.20	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c	Tue Jul 31 09:33:50 2018
@@ -1309,6 +1309,7 @@ skip_lookup:
 	zp->z_blksz = blksz;
 	zp->z_seq = 0x7A4653;
 	zp->z_sync_cnt = 0;
+	zp->z_lockf = NULL;
 
 	zfs_znode_sa_init(zfsvfs, zp, db, obj_type, hdl);
 



CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs

2018-06-16 Thread Andreas Gustafsson
Module Name:src
Committed By:   gson
Date:   Sat Jun 16 15:18:33 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c

Log Message:
Use space between words


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.12
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.11	Mon May 28 21:05:07 2018
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c	Sat Jun 16 15:18:33 2018
@@ -7133,7 +7133,7 @@ zfs_modcmd(modcmd_t cmd, void *arg)
 		printf("WARNING: ZFS on NetBSD is under development\n");
 		availrmem = (uint64_t)physmem * PAGE_SIZE / 1048576;
 		if (availrmem < ZFS_MIN_MEGS * 80 / 100) {
-			printf("ERROR: at least %dMB of memory required to"
+			printf("ERROR: at least %dMB of memory required to "
 			"use ZFS\n", ZFS_MIN_MEGS);
 			return ENOMEM;
 		}



CVS commit: src/external/cddl/osnet/dist/uts/common/rpc

2018-06-12 Thread Maya Rashish
Module Name:src
Committed By:   maya
Date:   Wed Jun 13 04:21:21 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/rpc: types.h

Log Message:
Avoid declaring ulonglong_t.

Comment here already says it isn't necessary and will be removed.
Hasten the process for us and avoid the problematic typedef.

This is useful because u_longlong_t would otherwise need to be
provided by compat headers.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/external/cddl/osnet/dist/uts/common/rpc/types.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/rpc/types.h
diff -u src/external/cddl/osnet/dist/uts/common/rpc/types.h:1.2 src/external/cddl/osnet/dist/uts/common/rpc/types.h:1.3
--- src/external/cddl/osnet/dist/uts/common/rpc/types.h:1.2	Fri Apr 10 22:44:20 2015
+++ src/external/cddl/osnet/dist/uts/common/rpc/types.h	Wed Jun 13 04:21:21 2018
@@ -49,13 +49,6 @@ extern "C" {
 typedef int bool_t;
 typedef int enum_t;
 
-/*
- * The ulonglong_t type was introduced to workaround an rpcgen bug
- * that has been fixed, this next typedef will be removed in a future release.
- * Do *NOT* use!
- */
-typedef u_longlong_t ulonglong_t;
-
 #if defined(_LP64) || defined(_I32LPx)
 typedef	uint32_t rpcprog_t;
 typedef	uint32_t rpcvers_t;



CVS commit: src/external/cddl/osnet/dist/uts/common/dtrace

2018-06-06 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Wed Jun  6 15:24:57 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/uts/common/dtrace: dtrace.c

Log Message:
Correct compilation of osnet/dist/uts/common/dtrace/dtrace.c under Clang

Add missing const keywords in dtrace_strncmp().

Initialize lim1 and lim2 to zero always. This prevents a false positive
about potentially unset but used variable.

This could be done with -W flags, but they are incompatible between
compilers.

This is a step forward functional MKLLVM=yes HAVE_LLVM=yes build.

Sponsored by 


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 \
src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c
diff -u src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.36 src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.37
--- src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.36	Mon May 28 21:05:06 2018
+++ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c	Wed Jun  6 15:24:57 2018
@@ -1263,7 +1263,7 @@ dtrace_strtoll(char *input, int base, si
  * Compare two strings using safe loads.
  */
 static int
-dtrace_strncmp(char *s1, char *s2, size_t limit)
+dtrace_strncmp(const char *s1, const char *s2, size_t limit)
 {
 	uint8_t c1, c2;
 	volatile uint16_t *flags;
@@ -6592,7 +6592,7 @@ dtrace_dif_emulate(dtrace_difo_t *difo, 
 			size_t sz = state->dts_options[DTRACEOPT_STRSIZE];
 			uintptr_t s1 = regs[r1];
 			uintptr_t s2 = regs[r2];
-			size_t lim1, lim2;
+			size_t lim1 = 0, lim2 = 0;
 
 			if (s1 != 0 &&
 			!dtrace_strcanload(s1, sz, , mstate, vstate))



CVS commit: src/external/cddl/osnet/dist/cmd/dtrace

2018-06-06 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Wed Jun  6 14:46:58 UTC 2018

Modified Files:
src/external/cddl/osnet/dist/cmd/dtrace: dtrace.c

Log Message:
Correct compilation of osnet/dist/cmd/dtrace/dtrace.c under Clang

Add missing const keywords.

This could be done with -W flags, but they are incompatible between
compilers.

This is a step forward functional MKLLVM=yes HAVE_LLVM=yes build.

Sponsored by 


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/external/cddl/osnet/dist/cmd/dtrace/dtrace.c

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

Modified files:

Index: src/external/cddl/osnet/dist/cmd/dtrace/dtrace.c
diff -u src/external/cddl/osnet/dist/cmd/dtrace/dtrace.c:1.11 src/external/cddl/osnet/dist/cmd/dtrace/dtrace.c:1.12
--- src/external/cddl/osnet/dist/cmd/dtrace/dtrace.c:1.11	Mon May 28 21:05:04 2018
+++ src/external/cddl/osnet/dist/cmd/dtrace/dtrace.c	Wed Jun  6 14:46:58 2018
@@ -555,7 +555,7 @@ static void
 print_probe_info(const dtrace_probeinfo_t *p)
 {
 	char buf[BUFSIZ];
-	char *user;
+	const char *user;
 	int i;
 
 	oprintf("\n\tProbe Description Attributes\n");
@@ -1164,8 +1164,8 @@ go(void)
 	int i;
 
 	struct {
-		char *name;
-		char *optname;
+		const char *name;
+		const char *optname;
 		dtrace_optval_t val;
 	} bufs[] = {
 		{ "buffer size", "bufsize" },
@@ -1221,7 +1221,7 @@ go(void)
 
 	for (i = 0; rates[i].name != NULL; i++) {
 		dtrace_optval_t nval;
-		char *dir;
+		const char *dir;
 
 		if (rates[i].val == DTRACEOPT_UNSET)
 			continue;



  1   2   3   4   >