mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-12-11 00:00:12 +03:00
Improved functionality for cmd_list
This commit is contained in:
parent
bae7a9ae8d
commit
90d54b3886
61
cmd_debug.c
61
cmd_debug.c
@ -216,6 +216,27 @@ static void list_btree_formats(struct bch_fs *c, enum btree_id btree_id,
|
|||||||
bch2_trans_exit(&trans);
|
bch2_trans_exit(&trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void list_nodes(struct bch_fs *c, enum btree_id btree_id,
|
||||||
|
struct bpos start, struct bpos end)
|
||||||
|
{
|
||||||
|
struct btree_trans trans;
|
||||||
|
struct btree_iter *iter;
|
||||||
|
struct btree *b;
|
||||||
|
char buf[4096];
|
||||||
|
|
||||||
|
bch2_trans_init(&trans, c, 0, 0);
|
||||||
|
|
||||||
|
for_each_btree_node(&trans, iter, btree_id, start, 0, b) {
|
||||||
|
if (bkey_cmp(b->key.k.p, end) > 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
bch2_bkey_val_to_text(&PBUF(buf), c, bkey_i_to_s_c(&b->key));
|
||||||
|
fputs(buf, stdout);
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
|
bch2_trans_exit(&trans);
|
||||||
|
}
|
||||||
|
|
||||||
static void list_nodes_keys(struct bch_fs *c, enum btree_id btree_id,
|
static void list_nodes_keys(struct bch_fs *c, enum btree_id btree_id,
|
||||||
struct bpos start, struct bpos end)
|
struct bpos start, struct bpos end)
|
||||||
{
|
{
|
||||||
@ -285,13 +306,16 @@ static const char * const list_modes[] = {
|
|||||||
"keys",
|
"keys",
|
||||||
"formats",
|
"formats",
|
||||||
"nodes",
|
"nodes",
|
||||||
|
"nodes_keys",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
int cmd_list(int argc, char *argv[])
|
int cmd_list(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct bch_opts opts = bch2_opts_empty();
|
struct bch_opts opts = bch2_opts_empty();
|
||||||
enum btree_id btree_id = BTREE_ID_EXTENTS;
|
enum btree_id btree_id_start = 0;
|
||||||
|
enum btree_id btree_id_end = BTREE_ID_NR;
|
||||||
|
enum btree_id btree_id;
|
||||||
struct bpos start = POS_MIN, end = POS_MAX;
|
struct bpos start = POS_MIN, end = POS_MAX;
|
||||||
u64 inum;
|
u64 inum;
|
||||||
int mode = 0, opt;
|
int mode = 0, opt;
|
||||||
@ -304,8 +328,9 @@ int cmd_list(int argc, char *argv[])
|
|||||||
while ((opt = getopt(argc, argv, "b:s:e:i:m:fvh")) != -1)
|
while ((opt = getopt(argc, argv, "b:s:e:i:m:fvh")) != -1)
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'b':
|
case 'b':
|
||||||
btree_id = read_string_list_or_die(optarg,
|
btree_id_start = read_string_list_or_die(optarg,
|
||||||
bch2_btree_ids, "btree id");
|
bch2_btree_ids, "btree id");
|
||||||
|
btree_id_end = btree_id_start + 1;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
start = parse_pos(optarg);
|
start = parse_pos(optarg);
|
||||||
@ -343,18 +368,26 @@ int cmd_list(int argc, char *argv[])
|
|||||||
if (IS_ERR(c))
|
if (IS_ERR(c))
|
||||||
die("error opening %s: %s", argv[0], strerror(-PTR_ERR(c)));
|
die("error opening %s: %s", argv[0], strerror(-PTR_ERR(c)));
|
||||||
|
|
||||||
switch (mode) {
|
|
||||||
case 0:
|
for (btree_id = btree_id_start;
|
||||||
list_keys(c, btree_id, start, end);
|
btree_id < btree_id_end;
|
||||||
break;
|
btree_id++) {
|
||||||
case 1:
|
switch (mode) {
|
||||||
list_btree_formats(c, btree_id, start, end);
|
case 0:
|
||||||
break;
|
list_keys(c, btree_id, start, end);
|
||||||
case 2:
|
break;
|
||||||
list_nodes_keys(c, btree_id, start, end);
|
case 1:
|
||||||
break;
|
list_btree_formats(c, btree_id, start, end);
|
||||||
default:
|
break;
|
||||||
die("Invalid mode");
|
case 2:
|
||||||
|
list_nodes(c, btree_id, start, end);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
list_nodes_keys(c, btree_id, start, end);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
die("Invalid mode");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bch2_fs_stop(c);
|
bch2_fs_stop(c);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user