mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-01-23 00:07:07 +03:00
bcacheadm: list-cachesets --list-devs option
lists the devices in each cacheset Change-Id: Ie3beb38203eefc3ab64b2a3d37652964f7021e54 Signed-off-by: Jacob Malevich <jam@daterainc.com>
This commit is contained in:
parent
7d34cf342e
commit
3fda6adc19
47
bcache.c
47
bcache.c
@ -901,7 +901,43 @@ void print_dev_info(struct cache_sb *sb, bool force_csum)
|
||||
show_super_backingdev(sb, force_csum);
|
||||
}
|
||||
|
||||
int list_cachesets(char *cset_dir)
|
||||
static void list_cacheset_devs(char *cset_dir, char *cset_name) {
|
||||
int i = 0;
|
||||
DIR *cachedir;
|
||||
struct stat cache_stat;
|
||||
char intbuf[4];
|
||||
char entry[256];
|
||||
|
||||
strcpy(entry, cset_dir);
|
||||
strcat(entry, "/");
|
||||
strcat(entry, cset_name);
|
||||
strcat(entry, "/cache0");
|
||||
snprintf(intbuf, 4, "%d", i);
|
||||
|
||||
while(true) {
|
||||
char buf[256];
|
||||
int len;
|
||||
|
||||
if((cachedir = opendir(entry)) == NULL)
|
||||
break;
|
||||
|
||||
if(stat(entry, &cache_stat))
|
||||
break;
|
||||
|
||||
if((len = readlink(entry, buf, sizeof(buf) - 1)) != -1) {
|
||||
buf[len] = '\0';
|
||||
printf("\t%s\n", buf);
|
||||
}
|
||||
|
||||
/* remove i from end and append i++ */
|
||||
entry[strlen(entry)-strlen(intbuf)] = 0;
|
||||
i++;
|
||||
snprintf(intbuf, 4, "%d", i);
|
||||
strcat(entry, intbuf);
|
||||
}
|
||||
}
|
||||
|
||||
int list_cachesets(char *cset_dir, bool list_devs)
|
||||
{
|
||||
struct dirent *ent;
|
||||
DIR *dir = opendir(cset_dir);
|
||||
@ -912,7 +948,8 @@ int list_cachesets(char *cset_dir)
|
||||
|
||||
while ((ent = readdir(dir)) != NULL) {
|
||||
struct stat statbuf;
|
||||
char entry[100];
|
||||
char entry[256];
|
||||
struct dirent *cache_ent;
|
||||
|
||||
if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))
|
||||
continue;
|
||||
@ -920,12 +957,18 @@ int list_cachesets(char *cset_dir)
|
||||
strcpy(entry, cset_dir);
|
||||
strcat(entry, "/");
|
||||
strcat(entry, ent->d_name);
|
||||
|
||||
if(stat(entry, &statbuf) == -1) {
|
||||
fprintf(stderr, "Failed to stat %s\n", entry);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (S_ISDIR(statbuf.st_mode)) {
|
||||
printf("%s\n", ent->d_name);
|
||||
|
||||
if(list_devs) {
|
||||
list_cacheset_devs(cset_dir, ent->d_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
2
bcache.h
2
bcache.h
@ -58,7 +58,7 @@ void show_super_backingdev(struct cache_sb *, bool);
|
||||
void show_super_cache(struct cache_sb *, bool);
|
||||
|
||||
struct cache_sb *query_dev(char *, bool);
|
||||
int list_cachesets(char *);
|
||||
int list_cachesets(char *, bool);
|
||||
char *parse_array_to_list(char *const *);
|
||||
int register_bcache();
|
||||
int probe(char *, int);
|
||||
|
@ -85,6 +85,7 @@ bool udev = false;
|
||||
|
||||
/* list globals */
|
||||
char *cset_dir = "/sys/fs/bcache";
|
||||
bool list_devs = false;
|
||||
|
||||
/* status globals */
|
||||
bool status_all = false;
|
||||
@ -203,6 +204,7 @@ static NihOption query_devs_options[] = {
|
||||
|
||||
static NihOption list_cachesets_options[] = {
|
||||
{'d', "dir", N_("directory"), NULL, NULL, &cset_dir, NULL},
|
||||
{0, "list-devs", N_("list all devices in the cache sets as well"), NULL, NULL, &list_devs, NULL},
|
||||
NIH_OPTION_LAST
|
||||
};
|
||||
|
||||
@ -352,7 +354,7 @@ int bcache_register (NihCommand *command, char *const *args)
|
||||
|
||||
int bcache_list_cachesets (NihCommand *command, char *const *args)
|
||||
{
|
||||
return list_cachesets(cset_dir);
|
||||
return list_cachesets(cset_dir, list_devs);
|
||||
}
|
||||
|
||||
int bcache_query_devs (NihCommand *command, char *const *args)
|
||||
@ -361,7 +363,7 @@ int bcache_query_devs (NihCommand *command, char *const *args)
|
||||
|
||||
|
||||
for (i = 0; args[i] != NULL; i++) {
|
||||
printf("query-devs on :%s\n", args[i]);
|
||||
printf("query-devs on: %s\n", args[i]);
|
||||
struct cache_sb *sb = query_dev(args[i], false);
|
||||
print_dev_info(sb, force_csum);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user