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 <jam@daterainc.com>
This commit is contained in:
Jacob Malevich 2014-12-09 18:26:13 -08:00 committed by Raghu Krishnamurthy
parent c43d8cf683
commit e977913cc8
3 changed files with 28 additions and 32 deletions

View File

@ -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;

View File

@ -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 *);

View File

@ -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);
struct cache_sb *sb = query_dev(args[i], false, false,
false, NULL);
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];
}
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;
}