]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
list_journal: Add -n for number of entries to print
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 12 Apr 2022 20:38:10 +0000 (16:38 -0400)
committerKent Overstreet <kent.overstreet@gmail.com>
Tue, 12 Apr 2022 20:38:10 +0000 (16:38 -0400)
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 <kent.overstreet@gmail.com>
cmd_debug.c

index 37232481bc4f4a0edf11f48def37ebdd7bc21136..e29ceff6826978d65dfd28227208e795eca84e89 100644 (file)
@@ -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 <linux-bcache@vger.kernel.org>");
 }
@@ -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);