Whamcloud - gitweb
LU-9894 lfsck: Print correct lfsck start info 04/28604/5
authorPatrick Farrell <paf@cray.com>
Mon, 21 Aug 2017 09:45:05 +0000 (04:45 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 22 Nov 2017 03:55:16 +0000 (03:55 +0000)
When printing which scan type was started, lfsck iterates
through an array of types and compares the given type to
the types in the array.  Type numbers are a bit mask.

However, LFSCK_TYPES_SUPPORTED and LFSCK_TYPES_DEF are the
full mask, and they are the first in the array.  This means
we always match LFSCK_TYPES_SUPPORTED, which results in
always printing "all" as the type of scan.

Reorder the struct to increasing bit order to fix this.

Test-Parameters: trivial testlist=sanity-scrub,sanity-lfsck
Signed-off-by: Patrick Farrell <paf@cray.com>
Change-Id: Ibc82369ff6531b56ceda4b1c0a833720dc61f3f4
Reviewed-on: https://review.whamcloud.com/28604
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: James Nunez <james.a.nunez@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/utils/lustre_lfsck.c

index 2524f99..ad8913b 100644 (file)
@@ -87,12 +87,14 @@ struct lfsck_type_name {
        enum lfsck_type  ltn_type;
 };
 
        enum lfsck_type  ltn_type;
 };
 
+/* Note types must be in order of increasing value so we can iterate through
+ * this correctly.  See enum lfsck_type for values. LU-9894. */
 static struct lfsck_type_name lfsck_types_names[] = {
 static struct lfsck_type_name lfsck_types_names[] = {
-       { .ltn_name = "all",            .ltn_type = LFSCK_TYPES_SUPPORTED },
-       { .ltn_name = "default",        .ltn_type = LFSCK_TYPES_DEF },
        { .ltn_name = "layout",         .ltn_type = LFSCK_TYPE_LAYOUT },
        { .ltn_name = "namespace",      .ltn_type = LFSCK_TYPE_NAMESPACE },
        { .ltn_name = "scrub",          .ltn_type = LFSCK_TYPE_SCRUB },
        { .ltn_name = "layout",         .ltn_type = LFSCK_TYPE_LAYOUT },
        { .ltn_name = "namespace",      .ltn_type = LFSCK_TYPE_NAMESPACE },
        { .ltn_name = "scrub",          .ltn_type = LFSCK_TYPE_SCRUB },
+       { .ltn_name = "all",            .ltn_type = LFSCK_TYPES_SUPPORTED },
+       { .ltn_name = "default",        .ltn_type = LFSCK_TYPES_DEF },
        { .ltn_name = NULL } };
 
 static enum lfsck_type lfsck_name2type(const char *name)
        { .ltn_name = NULL } };
 
 static enum lfsck_type lfsck_name2type(const char *name)