]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Illumos 5767 - fix several problems with zfs test suite
authorJohn Wren Kennedy <john.kennedy@delphix.com>
Fri, 5 Feb 2016 21:31:34 +0000 (13:31 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 8 Feb 2016 17:37:55 +0000 (09:37 -0800)
5767 fix several problems with zfs test suite
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Approved by: Gordon Ross <gwr@nexenta.com>

References:
  https://www.illumos.org/issues/5767
  https://github.com/illumos/illumos-gate/commit/52244c0

Porting Notes:
- Only the updates to zpool_main.c were kept because the ZFS test
  suite is not currently part of the ZoL source tree.  The test
  suite itself should be updated to include the latest versions
  of the tests once we're running it for every commit
- Fixes `zpool list` output.

Ported-by: Brian Behlendorf <behlendorf1@llnl.gov>
cmd/zpool/zpool_main.c

index 8cb9c861cb3678bcf531f934ad5f4546a7f630b9..9bf28c29f10cd97481d9b11697963b19c6c07176 100644 (file)
@@ -3128,6 +3128,9 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
        uint_t c, children;
        char *vname;
        boolean_t scripted = cb->cb_scripted;
+       uint64_t islog = B_FALSE;
+       boolean_t haslog = B_FALSE;
+       char *dashes = "%-*s      -      -      -         -      -      -\n";
 
        verify(nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
            (uint64_t **)&vs, &c) == 0);
@@ -3178,24 +3181,47 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
                    ZPOOL_CONFIG_IS_HOLE, &ishole) == 0 && ishole)
                        continue;
 
+               if (nvlist_lookup_uint64(child[c],
+                   ZPOOL_CONFIG_IS_LOG, &islog) == 0 && islog) {
+                       haslog = B_TRUE;
+                       continue;
+               }
+
                vname = zpool_vdev_name(g_zfs, zhp, child[c], B_FALSE);
                print_list_stats(zhp, vname, child[c], cb, depth + 2);
                free(vname);
        }
 
-       /*
-        * Include level 2 ARC devices in iostat output
-        */
+       if (haslog == B_TRUE) {
+               /* LINTED E_SEC_PRINTF_VAR_FMT */
+               (void) printf(dashes, cb->cb_namewidth, "log");
+               for (c = 0; c < children; c++) {
+                       if (nvlist_lookup_uint64(child[c], ZPOOL_CONFIG_IS_LOG,
+                           &islog) != 0 || !islog)
+                               continue;
+                       vname = zpool_vdev_name(g_zfs, zhp, child[c], B_FALSE);
+                       print_list_stats(zhp, vname, child[c], cb, depth + 2);
+                       free(vname);
+               }
+       }
+
        if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE,
-           &child, &children) != 0)
-               return;
+           &child, &children) == 0 && children > 0) {
+               /* LINTED E_SEC_PRINTF_VAR_FMT */
+               (void) printf(dashes, cb->cb_namewidth, "cache");
+               for (c = 0; c < children; c++) {
+                       vname = zpool_vdev_name(g_zfs, zhp, child[c], B_FALSE);
+                       print_list_stats(zhp, vname, child[c], cb, depth + 2);
+                       free(vname);
+               }
+       }
 
-       if (children > 0) {
-               (void) printf("%-*s      -      -      -      -      -      "
-                   "-\n", cb->cb_namewidth, "cache");
+       if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_SPARES, &child,
+           &children) == 0 && children > 0) {
+               /* LINTED E_SEC_PRINTF_VAR_FMT */
+               (void) printf(dashes, cb->cb_namewidth, "spare");
                for (c = 0; c < children; c++) {
-                       vname = zpool_vdev_name(g_zfs, zhp, child[c],
-                           B_FALSE);
+                       vname = zpool_vdev_name(g_zfs, zhp, child[c], B_FALSE);
                        print_list_stats(zhp, vname, child[c], cb, depth + 2);
                        free(vname);
                }