Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 May 2019 12:27:22 +0000 (UTC)
From:      Allan Jude <allanjude@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r347953 - head/cddl/contrib/opensolaris/cmd/zfs
Message-ID:  <201905181227.x4ICRMsG073717@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: allanjude
Date: Sat May 18 12:27:22 2019
New Revision: 347953
URL: https://svnweb.freebsd.org/changeset/base/347953

Log:
  MFV/ZoL: `zfs userspace` ignored all unresolved UIDs after the first
  
  zfsonlinux/zfs@88cfff182432e4d1c24c877f33b47ee6cf109eee
  
  zfs_main: fix `zfs userspace` squashing unresolved entries
  
  The `zfs userspace` squashes all entries with unresolved numeric
  values into a single output entry due to the comparsion always
  made by the string name which is empty in case of unresolved IDs.
  
  Fix this by falling to a numerical comparison when either one
  of string values is not found. This then compares any numerical
  values after all with a name resolved.
  
  Signed-off-by: Pavel Boldin <boldin.pavel@gmail.com>
  Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
  
  Reported by:	clusteradm
  Obtained from:	ZFS-on-Linux
  MFC after:	3 days

Modified:
  head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c

Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c	Sat May 18 11:14:43 2019	(r347952)
+++ head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c	Sat May 18 12:27:22 2019	(r347953)
@@ -2361,6 +2361,7 @@ us_compare(const void *larg, const void *rarg, void *u
 		case ZFS_PROP_NAME:
 			propname = "name";
 			if (numname) {
+compare_nums:
 				(void) nvlist_lookup_uint64(lnvl, propname,
 				    &lv64);
 				(void) nvlist_lookup_uint64(rnvl, propname,
@@ -2368,10 +2369,12 @@ us_compare(const void *larg, const void *rarg, void *u
 				if (rv64 != lv64)
 					rc = (rv64 < lv64) ? 1 : -1;
 			} else {
-				(void) nvlist_lookup_string(lnvl, propname,
-				    &lvstr);
-				(void) nvlist_lookup_string(rnvl, propname,
-				    &rvstr);
+				if ((nvlist_lookup_string(lnvl, propname,
+						&lvstr) == ENOENT) ||
+				    (nvlist_lookup_string(rnvl, propname,
+						&rvstr) == ENOENT)) {
+					goto compare_nums;
+				}
 				rc = strcmp(lvstr, rvstr);
 			}
 			break;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201905181227.x4ICRMsG073717>