mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-02 00:00:03 +03:00
cmd_list improvements
- update helptext - add -l (level) parameter Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
parent
f8c4bc591e
commit
cb84ad03a5
78
cmd_debug.c
78
cmd_debug.c
@ -195,10 +195,12 @@ static void list_keys(struct bch_fs *c, enum btree_id btree_id,
|
||||
bch2_bkey_val_to_text(&PBUF(buf), c, k);
|
||||
puts(buf);
|
||||
}
|
||||
bch2_trans_iter_put(&trans, iter);
|
||||
|
||||
bch2_trans_exit(&trans);
|
||||
}
|
||||
|
||||
static void list_btree_formats(struct bch_fs *c, enum btree_id btree_id,
|
||||
static void list_btree_formats(struct bch_fs *c, enum btree_id btree_id, unsigned level,
|
||||
struct bpos start, struct bpos end)
|
||||
{
|
||||
struct btree_trans trans;
|
||||
@ -208,18 +210,20 @@ static void list_btree_formats(struct bch_fs *c, enum btree_id btree_id,
|
||||
|
||||
bch2_trans_init(&trans, c, 0, 0);
|
||||
|
||||
for_each_btree_node(&trans, iter, btree_id, start, 0, b) {
|
||||
__for_each_btree_node(&trans, iter, btree_id, start, 0, level, 0, b) {
|
||||
if (bkey_cmp(b->key.k.p, end) > 0)
|
||||
break;
|
||||
|
||||
bch2_btree_node_to_text(&PBUF(buf), c, b);
|
||||
puts(buf);
|
||||
}
|
||||
bch2_trans_iter_put(&trans, iter);
|
||||
|
||||
bch2_trans_exit(&trans);
|
||||
}
|
||||
|
||||
static void list_nodes(struct bch_fs *c, enum btree_id btree_id,
|
||||
struct bpos start, struct bpos end)
|
||||
static void list_nodes(struct bch_fs *c, enum btree_id btree_id, unsigned level,
|
||||
struct bpos start, struct bpos end)
|
||||
{
|
||||
struct btree_trans trans;
|
||||
struct btree_iter *iter;
|
||||
@ -228,7 +232,7 @@ static void list_nodes(struct bch_fs *c, enum btree_id btree_id,
|
||||
|
||||
bch2_trans_init(&trans, c, 0, 0);
|
||||
|
||||
for_each_btree_node(&trans, iter, btree_id, start, 0, b) {
|
||||
__for_each_btree_node(&trans, iter, btree_id, start, 0, level, 0, b) {
|
||||
if (bkey_cmp(b->key.k.p, end) > 0)
|
||||
break;
|
||||
|
||||
@ -236,6 +240,8 @@ static void list_nodes(struct bch_fs *c, enum btree_id btree_id,
|
||||
fputs(buf, stdout);
|
||||
putchar('\n');
|
||||
}
|
||||
bch2_trans_iter_put(&trans, iter);
|
||||
|
||||
bch2_trans_exit(&trans);
|
||||
}
|
||||
|
||||
@ -335,7 +341,7 @@ static void print_node_ondisk(struct bch_fs *c, struct btree *b)
|
||||
free(n_ondisk);
|
||||
}
|
||||
|
||||
static void list_nodes_ondisk(struct bch_fs *c, enum btree_id btree_id,
|
||||
static void list_nodes_ondisk(struct bch_fs *c, enum btree_id btree_id, unsigned level,
|
||||
struct bpos start, struct bpos end)
|
||||
{
|
||||
struct btree_trans trans;
|
||||
@ -345,7 +351,7 @@ static void list_nodes_ondisk(struct bch_fs *c, enum btree_id btree_id,
|
||||
|
||||
bch2_trans_init(&trans, c, 0, 0);
|
||||
|
||||
for_each_btree_node(&trans, iter, btree_id, start, 0, b) {
|
||||
__for_each_btree_node(&trans, iter, btree_id, start, 0, level, 0, b) {
|
||||
if (bkey_cmp(b->key.k.p, end) > 0)
|
||||
break;
|
||||
|
||||
@ -355,10 +361,12 @@ static void list_nodes_ondisk(struct bch_fs *c, enum btree_id btree_id,
|
||||
|
||||
print_node_ondisk(c, b);
|
||||
}
|
||||
bch2_trans_iter_put(&trans, iter);
|
||||
|
||||
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, unsigned level,
|
||||
struct bpos start, struct bpos end)
|
||||
{
|
||||
struct btree_trans trans;
|
||||
@ -371,7 +379,7 @@ static void list_nodes_keys(struct bch_fs *c, enum btree_id btree_id,
|
||||
|
||||
bch2_trans_init(&trans, c, 0, 0);
|
||||
|
||||
for_each_btree_node(&trans, iter, btree_id, start, 0, b) {
|
||||
__for_each_btree_node(&trans, iter, btree_id, start, 0, level, 0, b) {
|
||||
if (bkey_cmp(b->key.k.p, end) > 0)
|
||||
break;
|
||||
|
||||
@ -384,6 +392,8 @@ static void list_nodes_keys(struct bch_fs *c, enum btree_id btree_id,
|
||||
puts(buf);
|
||||
}
|
||||
}
|
||||
bch2_trans_iter_put(&trans, iter);
|
||||
|
||||
bch2_trans_exit(&trans);
|
||||
}
|
||||
|
||||
@ -394,22 +404,35 @@ static void list_keys_usage(void)
|
||||
"\n"
|
||||
"Options:\n"
|
||||
" -b (extents|inodes|dirents|xattrs) Btree to list from\n"
|
||||
" -l level Btree depth to descend to (0 == leaves)\n"
|
||||
" -s inode:offset Start position to list from\n"
|
||||
" -e inode:offset End position\n"
|
||||
" -i inode List keys for a given inode number\n"
|
||||
" -m (keys|formats) List mode\n"
|
||||
" -m (keys|formats|nodes|nodes_ondisk|nodes_keys)\n"
|
||||
" List mode\n"
|
||||
" -f Check (fsck) the filesystem first\n"
|
||||
" -v Verbose mode\n"
|
||||
" -h Display this help and exit\n"
|
||||
"Report bugs to <linux-bcache@vger.kernel.org>");
|
||||
}
|
||||
|
||||
#define LIST_MODES() \
|
||||
x(keys) \
|
||||
x(formats) \
|
||||
x(nodes) \
|
||||
x(nodes_ondisk) \
|
||||
x(nodes_keys)
|
||||
|
||||
enum list_modes {
|
||||
#define x(n) LIST_MODE_##n,
|
||||
LIST_MODES()
|
||||
#undef x
|
||||
};
|
||||
|
||||
static const char * const list_modes[] = {
|
||||
"keys",
|
||||
"formats",
|
||||
"nodes",
|
||||
"nodes_ondisk",
|
||||
"nodes_keys",
|
||||
#define x(n) #n,
|
||||
LIST_MODES()
|
||||
#undef x
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -419,6 +442,7 @@ int cmd_list(int argc, char *argv[])
|
||||
enum btree_id btree_id_start = 0;
|
||||
enum btree_id btree_id_end = BTREE_ID_NR;
|
||||
enum btree_id btree_id;
|
||||
unsigned level;
|
||||
struct bpos start = POS_MIN, end = POS_MAX;
|
||||
u64 inum;
|
||||
int mode = 0, opt;
|
||||
@ -428,13 +452,17 @@ int cmd_list(int argc, char *argv[])
|
||||
opt_set(opts, degraded, true);
|
||||
opt_set(opts, errors, BCH_ON_ERROR_continue);
|
||||
|
||||
while ((opt = getopt(argc, argv, "b:s:e:i:m:fvh")) != -1)
|
||||
while ((opt = getopt(argc, argv, "b:l:s:e:i:m:fvh")) != -1)
|
||||
switch (opt) {
|
||||
case 'b':
|
||||
btree_id_start = read_string_list_or_die(optarg,
|
||||
bch2_btree_ids, "btree id");
|
||||
btree_id_end = btree_id_start + 1;
|
||||
break;
|
||||
case 'l':
|
||||
if (kstrtouint(optarg, 10, &level) || level >= BTREE_MAX_DEPTH)
|
||||
die("invalid level");
|
||||
break;
|
||||
case 's':
|
||||
start = bpos_parse(optarg);
|
||||
break;
|
||||
@ -476,20 +504,20 @@ int cmd_list(int argc, char *argv[])
|
||||
btree_id < btree_id_end;
|
||||
btree_id++) {
|
||||
switch (mode) {
|
||||
case 0:
|
||||
case LIST_MODE_keys:
|
||||
list_keys(c, btree_id, start, end);
|
||||
break;
|
||||
case 1:
|
||||
list_btree_formats(c, btree_id, start, end);
|
||||
case LIST_MODE_formats:
|
||||
list_btree_formats(c, btree_id, level, start, end);
|
||||
break;
|
||||
case 2:
|
||||
list_nodes(c, btree_id, start, end);
|
||||
case LIST_MODE_nodes:
|
||||
list_nodes(c, btree_id, level, start, end);
|
||||
break;
|
||||
case 3:
|
||||
list_nodes_ondisk(c, btree_id, start, end);
|
||||
case LIST_MODE_nodes_ondisk:
|
||||
list_nodes_ondisk(c, btree_id, level, start, end);
|
||||
break;
|
||||
case 4:
|
||||
list_nodes_keys(c, btree_id, start, end);
|
||||
case LIST_MODE_nodes_keys:
|
||||
list_nodes_keys(c, btree_id, level, start, end);
|
||||
break;
|
||||
default:
|
||||
die("Invalid mode");
|
||||
|
Loading…
Reference in New Issue
Block a user