diff options
Diffstat (limited to 'c_src')
-rw-r--r-- | c_src/libbcachefs.c | 6 | ||||
-rw-r--r-- | c_src/libbcachefs.h | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/c_src/libbcachefs.c b/c_src/libbcachefs.c index 2b5ca211..017c331f 100644 --- a/c_src/libbcachefs.c +++ b/c_src/libbcachefs.c @@ -910,6 +910,8 @@ dev_names bchu_fs_get_devices(struct bchfs_handle fs) struct dirent *d; dev_names devs; + struct bch_sb *sb = bchu_read_super(fs, -1); + darray_init(&devs); while ((errno = 0), (d = readdir(dir))) { @@ -940,9 +942,13 @@ dev_names bchu_fs_get_devices(struct bchfs_handle fs) n.durability = read_file_u64(fs.sysfs_fd, durability_attr); free(durability_attr); + struct bch_member m = bch2_sb_member_get(sb, n.idx); + n.state = BCH_MEMBER_STATE(&m); + darray_push(&devs, n); } + free(sb); closedir(dir); return devs; diff --git a/c_src/libbcachefs.h b/c_src/libbcachefs.h index 7a7a9e2c..e562d138 100644 --- a/c_src/libbcachefs.h +++ b/c_src/libbcachefs.h @@ -313,11 +313,12 @@ static inline void bchu_disk_resize_journal(struct bchfs_handle fs, int bchu_data(struct bchfs_handle, struct bch_ioctl_data); struct dev_name { - unsigned idx; - char *dev; - char *label; - uuid_t uuid; - unsigned durability; + unsigned idx; + char *dev; + char *label; + uuid_t uuid; + unsigned durability; + enum bch_member_state state; }; typedef DARRAY(struct dev_name) dev_names; |