]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
bcacheadm: fix status command
authorJacob Malevich <jam@daterainc.com>
Wed, 10 Dec 2014 02:26:13 +0000 (18:26 -0800)
committerRaghu Krishnamurthy <rk@daterainc.com>
Wed, 31 Dec 2014 23:17:11 +0000 (15:17 -0800)
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>
bcache.c
bcache.h
bcacheadm.c

index 4cc6949bb5b86ca1c82ae3044fe34c0a93ffccf5..1373d1aca93720354e2614a99c1bf94a54404c00 100644 (file)
--- 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;
index c0315677edd437a988509740c3c6d9aae7fb1b2f..07e9733c743f1e2c87adc999949f78fe5f2b0e74 100644 (file)
--- 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 *);
index 9788315457371d873a0115844580b39f5410a052..a0c95369e4d1722d3e23132047c8c5099fc86e65 100644 (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);
-
-               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;
 }