From e977913cc8c34ca2728d31fe71ffc4b0e27e8c31 Mon Sep 17 00:00:00 2001 From: Jacob Malevich Date: Tue, 9 Dec 2014 18:26:13 -0800 Subject: [PATCH] bcacheadm: fix status command previously it wasn't properly looking through the list of member info in the cache that has the highest seq. Change-Id: I2a6ebf6bd0814055ec1247d0f4d79dab683115d3 Signed-off-by: Jacob Malevich --- bcache.c | 12 ------------ bcache.h | 1 - bcacheadm.c | 49 +++++++++++++++++++++++++++++-------------------- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/bcache.c b/bcache.c index 4cc6949..1373d1a 100644 --- a/bcache.c +++ b/bcache.c @@ -1236,18 +1236,6 @@ err: return err; } -void sb_state(struct cache_sb *sb, char *dev) -{ - struct cache_member *m = ((struct cache_member *) sb->d) + - sb->nr_this_dev; - - printf("device %s\n", dev); - printf("\tcache state\t%s\n", cache_state[CACHE_STATE(m)]); - printf("\tcache_tier\t%llu\n", CACHE_TIER(m)); - printf("\tseq#: \t%llu\n", sb->seq); - -} - char *read_stat_dir(DIR *dir, char *stats_dir, char *stat_name, bool print_val) { struct stat statbuf; diff --git a/bcache.h b/bcache.h index c031567..07e9733 100644 --- a/bcache.h +++ b/bcache.h @@ -69,7 +69,6 @@ char *parse_array_to_list(char *const *); char *register_bcache(char *const *); char *unregister_bcache(char *const *); char *probe(char *, int); -void sb_state(struct cache_sb *, char *); char *read_stat_dir(DIR *, char *, char *, bool); char *find_matching_uuid(char *, char *, const char*); char *add_devices(char *const *, char *); diff --git a/bcacheadm.c b/bcacheadm.c index 9788315..a0c9536 100644 --- a/bcacheadm.c +++ b/bcacheadm.c @@ -459,31 +459,40 @@ int bcache_query_devs(NihCommand *command, char *const *args) int bcache_status(NihCommand *command, char *const *args) { - int i; - struct cache_sb *sb_tier0 = NULL, *sb_tier1 = NULL; - char *dev0 = NULL, *dev1 = NULL; + int i, seq, nr_in_set = 0; + struct cache_sb *seq_sb = NULL; for (i = 0; args[i] != NULL; i++) { - struct cache_sb *sb = query_dev(args[i], false, false, false, NULL); - struct cache_member *m = ((struct cache_member *) sb->d) + - sb->nr_this_dev; - long long unsigned cache_tier = CACHE_TIER(m); - - if (!cache_tier) { - if (!sb_tier0 || sb->seq > sb_tier0->seq) { - sb_tier0 = sb; - dev0 = args[i]; - } - } else if (cache_tier == 1) { - if (!sb_tier1 || sb->seq > sb_tier1->seq) { - sb_tier1 = sb; - dev1 = args[i]; - } + struct cache_sb *sb = query_dev(args[i], false, false, + false, NULL); + + if(!sb) { + printf("Unable to open superblock, bad path\n"); + return -1; + } + + if(!seq_sb || sb->seq > seq) { + seq = sb->seq; + seq_sb = sb; + nr_in_set = sb->nr_in_set; } } - if (sb_tier0) sb_state(sb_tier0, dev0); - if (sb_tier1) sb_state(sb_tier1, dev1); + if(!seq_sb) + printf("Unable to find a superblock\n"); + else + printf("%-50s%-15s%-4s\n", "uuid", "state", "tier"); + + for (i = 0; i < seq_sb->nr_in_set; i++) { + char uuid_str[40]; + struct cache_member *m = ((struct cache_member *) seq_sb->d) + i; + + uuid_unparse(m->uuid.b, uuid_str); + + printf("%-50s%-15s%-4llu\n", uuid_str, + cache_state[CACHE_STATE(m)], + CACHE_TIER(m)); + } return 0; } -- 2.39.2