]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: fix: correct printing value of blocks per migration unit
authorLukasz Dorau <lukasz.dorau@intel.com>
Fri, 18 Nov 2011 14:28:36 +0000 (15:28 +0100)
committerNeilBrown <neilb@suse.de>
Mon, 21 Nov 2011 05:17:56 +0000 (16:17 +1100)
The value of blocks per migration unit is not printed correctly
when the metadata's content is examined using -E option on disks
without present migration record. (Migration record is present only
on 2 first disks in array due to IMSM compatibility restrictions.)

Printing the value of blocks per migration unit was corrected.
It is printed as N/A (Not Available) for disks
without the migration record.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
super-intel.c

index 2d9444e85eda7ff7a8d228690243a68b0f732930..360c4ccb16de83bdca13fe4569174af7f5159271 100644 (file)
@@ -1018,6 +1018,8 @@ static unsigned long long min_acceptable_spare_size_imsm(struct supertype *st)
 static __u64 blocks_per_migr_unit(struct intel_super *super,
                                  struct imsm_dev *dev);
 
+static int is_gen_migration(struct imsm_dev *dev);
+
 static void print_imsm_dev(struct intel_super *super,
                           struct imsm_dev *dev,
                           char *uuid,
@@ -1110,9 +1112,13 @@ static void print_imsm_dev(struct intel_super *super,
                struct imsm_map *map = get_imsm_map(dev, 1);
 
                printf(" <-- %s", map_state_str[map->map_state]);
-               printf("\n     Checkpoint : %u (%llu)",
-                      __le32_to_cpu(dev->vol.curr_migr_unit),
-                      (unsigned long long)blocks_per_migr_unit(super, dev));
+               printf("\n     Checkpoint : %u ",
+                          __le32_to_cpu(dev->vol.curr_migr_unit));
+               if ((is_gen_migration(dev)) && (super->disks->index > 1))
+                       printf("(N/A)");
+               else
+                       printf("(%llu)", (unsigned long long)
+                                  blocks_per_migr_unit(super, dev));
        }
        printf("\n");
        printf("    Dirty State : %s\n", dev->vol.dirty ? "dirty" : "clean");
@@ -1141,8 +1147,6 @@ static void print_imsm_disk(struct imsm_disk *disk, int index, __u32 reserved)
               human_size(sz * 512));
 }
 
-static int is_gen_migration(struct imsm_dev *dev);
-
 void examine_migr_rec_imsm(struct intel_super *super)
 {
        struct migr_record *migr_rec = super->migr_rec;