From c25cc1b53165fc9234d28025f6eb79e65c561198 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 12 Apr 2022 16:38:10 -0400 Subject: [PATCH] list_journal: Add -n for number of entries to print The entire journal can be too big to fit in memory in textual form, making grep difficult: this adds an option to print a specific number of journal entries. Signed-off-by: Kent Overstreet --- cmd_debug.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cmd_debug.c b/cmd_debug.c index 37232481..e29ceff6 100644 --- a/cmd_debug.c +++ b/cmd_debug.c @@ -578,6 +578,7 @@ static void list_journal_usage(void) "\n" "Options:\n" " -a Read entire journal, not just dirty entries\n" + " -n Number of journal entries to print, starting from the most recent\n" " -h Display this help and exit\n" "Report bugs to "); } @@ -596,6 +597,7 @@ static void star_start_of_lines(char *buf) int cmd_list_journal(int argc, char *argv[]) { struct bch_opts opts = bch2_opts_empty(); + u32 nr_entries = U32_MAX; int opt; opt_set(opts, nochanges, true); @@ -606,11 +608,15 @@ int cmd_list_journal(int argc, char *argv[]) opt_set(opts, keep_journal, true); opt_set(opts, read_journal_only,true); - while ((opt = getopt(argc, argv, "ah")) != -1) + while ((opt = getopt(argc, argv, "an:h")) != -1) switch (opt) { case 'a': opt_set(opts, read_entire_journal, true); break; + case 'n': + nr_entries = kstrtouint(optarg, 10, &nr_entries); + opt_set(opts, read_entire_journal, true); + break; case 'h': list_journal_usage(); exit(EXIT_SUCCESS); @@ -634,6 +640,9 @@ int cmd_list_journal(int argc, char *argv[]) if (!p) continue; + if (le64_to_cpu(p->j.seq) + nr_entries < atomic64_read(&c->journal.seq)) + continue; + bool blacklisted = bch2_journal_seq_is_blacklisted(c, le64_to_cpu(p->j.seq), false);