Show all bitmaps while examining bitmap

This adds capability of exmining bitmaps corresponding to all
nodes/slots on the device.

Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Guoqing Jiang 2015-06-10 13:42:07 +08:00 committed by NeilBrown
parent 7716570e6d
commit b98043a2f8
1 changed files with 42 additions and 9 deletions

View File

@ -260,7 +260,7 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st)
int rv = 1;
char buf[64];
int swap;
int fd;
int fd, i;
__u32 uuid32[4];
fd = bitmap_file_open(filename, &st);
@ -317,9 +317,13 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st)
uuid32[2],
uuid32[3]);
printf(" Events : %llu\n", (unsigned long long)sb->events);
printf(" Events Cleared : %llu\n", (unsigned long long)sb->events_cleared);
printf(" State : %s\n", bitmap_state(sb->state));
if (sb->nodes == 0) {
printf(" Events : %llu\n", (unsigned long long)sb->events);
printf(" Events Cleared : %llu\n", (unsigned long long)sb->events_cleared);
printf(" State : %s\n", bitmap_state(sb->state));
}
printf(" Chunksize : %s\n", human_chunksize(sb->chunksize));
printf(" Daemon : %ds flush period\n", sb->daemon_sleep);
if (sb->write_behind)
@ -329,11 +333,40 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st)
printf(" Write Mode : %s\n", buf);
printf(" Sync Size : %llu%s\n", (unsigned long long)sb->sync_size/2,
human_size(sb->sync_size * 512));
if (brief)
goto free_info;
printf(" Bitmap : %llu bits (chunks), %llu dirty (%2.1f%%)\n",
info->total_bits, info->dirty_bits,
100.0 * info->dirty_bits / (info->total_bits?:1));
if (sb->nodes == 0) {
if (brief)
goto free_info;
printf(" Bitmap : %llu bits (chunks), %llu dirty (%2.1f%%)\n",
info->total_bits, info->dirty_bits,
100.0 * info->dirty_bits / (info->total_bits?:1));
} else {
printf(" Cluster nodes : %d\n", sb->nodes);
printf(" Cluster name : %64s\n", sb->cluster_name);
for (i = 0; i < (int)sb->nodes; i++) {
if (i) {
free(info);
info = bitmap_fd_read(fd, brief);
sb = &info->sb;
}
if (sb->magic != BITMAP_MAGIC)
pr_err("invalid bitmap magic 0x%x, the bitmap file appears to be corrupted\n", sb->magic);
printf(" Node Slot : %d\n", i);
printf(" Events : %llu\n",
(unsigned long long)sb->events);
printf(" Events Cleared : %llu\n",
(unsigned long long)sb->events_cleared);
printf(" State : %s\n", bitmap_state(sb->state));
if (brief)
continue;
printf(" Bitmap : %llu bits (chunks), %llu dirty (%2.1f%%)\n",
info->total_bits, info->dirty_bits,
100.0 * info->dirty_bits / (info->total_bits?:1));
}
}
free_info:
free(info);
return rv;