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; 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) char *read_stat_dir(DIR *dir, char *stats_dir, char *stat_name, bool print_val)
{ {
struct stat statbuf; struct stat statbuf;

View File

@ -69,7 +69,6 @@ char *parse_array_to_list(char *const *);
char *register_bcache(char *const *); char *register_bcache(char *const *);
char *unregister_bcache(char *const *); char *unregister_bcache(char *const *);
char *probe(char *, int); char *probe(char *, int);
void sb_state(struct cache_sb *, char *);
char *read_stat_dir(DIR *, char *, char *, bool); char *read_stat_dir(DIR *, char *, char *, bool);
char *find_matching_uuid(char *, char *, const char*); char *find_matching_uuid(char *, char *, const char*);
char *add_devices(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 bcache_status(NihCommand *command, char *const *args)
{ {
int i; int i, seq, nr_in_set = 0;
struct cache_sb *sb_tier0 = NULL, *sb_tier1 = NULL; struct cache_sb *seq_sb = NULL;
char *dev0 = NULL, *dev1 = NULL;
for (i = 0; args[i] != NULL; i++) { for (i = 0; args[i] != NULL; i++) {
struct cache_sb *sb = query_dev(args[i], false, false, false, NULL); struct cache_sb *sb = query_dev(args[i], false, false,
struct cache_member *m = ((struct cache_member *) sb->d) + false, NULL);
sb->nr_this_dev;
long long unsigned cache_tier = CACHE_TIER(m);
if (!cache_tier) { if(!sb) {
if (!sb_tier0 || sb->seq > sb_tier0->seq) { printf("Unable to open superblock, bad path\n");
sb_tier0 = sb; return -1;
dev0 = args[i]; }
}
} else if (cache_tier == 1) { if(!seq_sb || sb->seq > seq) {
if (!sb_tier1 || sb->seq > sb_tier1->seq) { seq = sb->seq;
sb_tier1 = sb; seq_sb = sb;
dev1 = args[i]; nr_in_set = sb->nr_in_set;
}
} }
} }
if (sb_tier0) sb_state(sb_tier0, dev0); if(!seq_sb)
if (sb_tier1) sb_state(sb_tier1, dev1); 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; return 0;
} }