]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting.
authorMassimo Maggi <me@massimo-maggi.eu>
Sun, 14 Jul 2013 11:49:01 +0000 (13:49 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 14 Jul 2013 11:49:01 +0000 (13:49 +0200)
ChangeLog
grub-core/fs/zfs/zfsinfo.c

index 45c1df1697c51c50e92a5be830d22bfd8eaba332..8a7c7665fe2ab112c5026dd094bc53e4ab5d5247 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+20013-07-14  Massimo Maggi <me@massimo-maggi.eu>
+
+       * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting.
+
 2013-07-13  Andrey Borzenkov <arvidjaar@gmail.com>
 
        * docs/grub.texi (Commands): Document postition parameters
index fdb587a4c9d28225039add1f4e70a5a9e0d35ac2..c96bf2183c09e0df909537513b7cb22b7030bc1f 100644 (file)
@@ -132,21 +132,31 @@ print_vdev_info (char *nvlist, int tab)
       grub_free (path);
       return GRUB_ERR_NONE;
     }
+  char is_mirror=(grub_strcmp(type,VDEV_TYPE_MIRROR) == 0);
+  char is_raidz=(grub_strcmp(type,VDEV_TYPE_RAIDZ) == 0);
 
-  if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0)
+  if (is_mirror || is_raidz)
     {
       int nelm, i;
 
       nelm = grub_zfs_nvlist_lookup_nvlist_array_get_nelm
        (nvlist, ZPOOL_CONFIG_CHILDREN);
 
+      if(is_mirror){
+        grub_puts_ (N_("This VDEV is a mirror"));
+      }
+      else if(is_raidz){
+        grub_uint64_t parity;
+        grub_zfs_nvlist_lookup_uint64(nvlist,"nparity",&parity);
+        grub_printf_ (N_("This VDEV is a RAIDZ%llu\n"),(unsigned long long)parity);
+      }
       print_tabs (tab);
       if (nelm <= 0)
        {
-         grub_puts_ (N_("Incorrect mirror"));
+         grub_puts_ (N_("Incorrect VDEV"));
          return GRUB_ERR_NONE;
        }
-      grub_printf_ (N_("Mirror with %d children\n"), nelm);
+      grub_printf_ (N_("VDEV with %d children\n"), nelm);
       print_state (nvlist, tab);
       for (i = 0; i < nelm; i++)
        {
@@ -162,14 +172,14 @@ print_vdev_info (char *nvlist, int tab)
                 total element number. And the number itself is fine,
                 only the element isn't.
              */
-             grub_printf_ (N_("Mirror element number %d isn't correct\n"), i);
+             grub_printf_ (N_("VDEV element number %d isn't correct\n"), i);
              continue;
            }
 
          /* TRANSLATORS: it's the element carying the number %d, not
             total element number. This is used in enumeration
             "Element number 1", "Element number 2", ... */
-         grub_printf_ (N_("Mirror element number %d:\n"), i);
+         grub_printf_ (N_("VDEV element number %d:\n"), i);
          print_vdev_info (child, tab + 1);
 
          grub_free (child);