From 53618046da08fb1514ff70ff67ae372edbac54ad Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 13:49:01 +0200 Subject: [PATCH] * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfsinfo.c | 20 +++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 45c1df169..8a7c7665f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +20013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting. + 2013-07-13 Andrey Borzenkov * docs/grub.texi (Commands): Document postition parameters diff --git a/grub-core/fs/zfs/zfsinfo.c b/grub-core/fs/zfs/zfsinfo.c index fdb587a4c..c96bf2183 100644 --- a/grub-core/fs/zfs/zfsinfo.c +++ b/grub-core/fs/zfs/zfsinfo.c @@ -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);