X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libbcachefs.c;h=f669088ff078a46de25e3e3cda44ef7138589d61;hb=5bc48bd428303aabe19c196a47d1d89a605397be;hp=d56b987cbc77d625cad552b16d3e9b638e1e7609;hpb=d13bbb2955f899f10be4ab315ad229d2951fdcda;p=bcachefs-tools-debian diff --git a/libbcachefs.c b/libbcachefs.c index d56b987..f669088 100644 --- a/libbcachefs.c +++ b/libbcachefs.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -656,6 +657,7 @@ void bch2_sb_print(struct bch_sb *sb, bool print_layout, { struct bch_sb_field_members *mi; char user_uuid_str[40], internal_uuid_str[40]; + char features_str[200]; char fields_have_str[200]; char label[BCH_SB_LABEL_SIZE + 1]; char time_str[64]; @@ -701,6 +703,10 @@ void bch2_sb_print(struct bch_sb *sb, bool print_layout, bch2_sb_get_target(sb, promote_str, sizeof(promote_str), BCH_SB_PROMOTE_TARGET(sb)); + bch2_flags_to_text(&PBUF(features_str), + bch2_sb_features, + le64_to_cpu(sb->features[0])); + vstruct_for_each(sb, f) fields_have |= 1 << le32_to_cpu(f->type); bch2_flags_to_text(&PBUF(fields_have_str), @@ -715,6 +721,7 @@ void bch2_sb_print(struct bch_sb *sb, bool print_layout, "Btree node size: %s\n" "Error action: %s\n" "Clean: %llu\n" + "Features: %s\n" "Metadata replicas: %llu\n" "Data replicas: %llu\n" @@ -748,22 +755,23 @@ void bch2_sb_print(struct bch_sb *sb, bool print_layout, : "unknown", BCH_SB_CLEAN(sb), + features_str, BCH_SB_META_REPLICAS_WANT(sb), BCH_SB_DATA_REPLICAS_WANT(sb), BCH_SB_META_CSUM_TYPE(sb) < BCH_CSUM_OPT_NR - ? bch2_csum_types[BCH_SB_META_CSUM_TYPE(sb)] + ? bch2_csum_opts[BCH_SB_META_CSUM_TYPE(sb)] : "unknown", BCH_SB_META_CSUM_TYPE(sb), BCH_SB_DATA_CSUM_TYPE(sb) < BCH_CSUM_OPT_NR - ? bch2_csum_types[BCH_SB_DATA_CSUM_TYPE(sb)] + ? bch2_csum_opts[BCH_SB_DATA_CSUM_TYPE(sb)] : "unknown", BCH_SB_DATA_CSUM_TYPE(sb), BCH_SB_COMPRESSION_TYPE(sb) < BCH_COMPRESSION_OPT_NR - ? bch2_compression_types[BCH_SB_COMPRESSION_TYPE(sb)] + ? bch2_compression_opts[BCH_SB_COMPRESSION_TYPE(sb)] : "unknown", BCH_SB_COMPRESSION_TYPE(sb), @@ -946,6 +954,7 @@ int bchu_data(struct bchfs_handle fs, struct bch_ioctl_data cmd) e.p.pos.offset); } + fflush(stdout); sleep(1); } printf("\nDone\n"); @@ -1101,3 +1110,41 @@ void bch2_opts_usage(unsigned opt_types) } } } + +dev_names bchu_fs_get_devices(struct bchfs_handle fs) +{ + DIR *dir = fdopendir(fs.sysfs_fd); + struct dirent *d; + dev_names devs; + + darray_init(devs); + + while ((errno = 0), (d = readdir(dir))) { + struct dev_name n = { 0, NULL, NULL }; + + if (sscanf(d->d_name, "dev-%u", &n.idx) != 1) + continue; + + char *block_attr = mprintf("dev-%u/block", n.idx); + + char sysfs_block_buf[4096]; + ssize_t r = readlinkat(fs.sysfs_fd, block_attr, + sysfs_block_buf, sizeof(sysfs_block_buf)); + if (r > 0) { + sysfs_block_buf[r] = '\0'; + n.dev = strdup(basename(sysfs_block_buf)); + } + + free(block_attr); + + char *label_attr = mprintf("dev-%u/label", n.idx); + n.label = read_file_str(fs.sysfs_fd, label_attr); + free(label_attr); + + darray_append(devs, n); + } + + closedir(dir); + + return devs; +}