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.pa...@gmail.com>
  Signed-off-by: Brian Behlendorf <behlendo...@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;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to