]> granicus.if.org Git - zfs/commitdiff
Illumos 4966 - zpool list iterator does not update output
authorGeorge Wilson <george.wilson@delphix.com>
Sun, 5 Jul 2015 19:00:34 +0000 (21:00 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 10 Jul 2015 19:00:35 +0000 (12:00 -0700)
4966 zpool list iterator does not update output
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Garrett D'Amore <garrett@damore.org>

References:
  https://github.com/illumos/illumos-gate/commit/cd67d23
  https://www.illumos.org/issues/4966

Ported-by: kernelOfTruth kerneloftruth@gmail.com
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #3566

cmd/zpool/zpool_main.c

index fd1e8284aa6c5dec86e905ef73b753d1f0c2f1cf..e6517574d0b5db801b5ca7b799717d65d9128aff 100644 (file)
@@ -3285,17 +3285,10 @@ zpool_do_list(int argc, char **argv)
        if (zprop_get_list(g_zfs, props, &cb.cb_proplist, ZFS_TYPE_POOL) != 0)
                usage(B_FALSE);
 
-       if ((list = pool_list_get(argc, argv, &cb.cb_proplist, &ret)) == NULL)
-               return (1);
-
-       if (argc == 0 && !cb.cb_scripted && pool_list_count(list) == 0) {
-               (void) printf(gettext("no pools available\n"));
-               zprop_free_list(cb.cb_proplist);
-               return (0);
-       }
-
        for (;;) {
-               pool_list_update(list);
+               if ((list = pool_list_get(argc, argv, &cb.cb_proplist,
+                   &ret)) == NULL)
+                       return (1);
 
                if (pool_list_count(list) == 0)
                        break;
@@ -3315,9 +3308,16 @@ zpool_do_list(int argc, char **argv)
                if (count != 0 && --count == 0)
                        break;
 
+               pool_list_free(list);
                (void) sleep(interval);
        }
 
+       if (argc == 0 && !cb.cb_scripted && pool_list_count(list) == 0) {
+               (void) printf(gettext("no pools available\n"));
+               ret = 0;
+       }
+
+       pool_list_free(list);
        zprop_free_list(cb.cb_proplist);
        return (ret);
 }