debugfs: teach logdump the num_trans options
teach logdump the num_trans options Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
This commit is contained in:
parent
93ad3dadfc
commit
dbdbb14fcf
174
0045-debugfs-teach-logdump-the-n-num_trans-option.patch
Normal file
174
0045-debugfs-teach-logdump-the-n-num_trans-option.patch
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
From 6cb297790b8c8e881278342a290d10fc1df1813a Mon Sep 17 00:00:00 2001
|
||||||
|
From: "lihaoxiang (F)" <lihaoxiang9@huawei.com>
|
||||||
|
Date: Thu, 14 Jul 2022 09:32:48 +0800
|
||||||
|
Subject: [PATCH] debugfs: teach logdump the -n <num_trans> option
|
||||||
|
|
||||||
|
The current version's debugfs possessed the function
|
||||||
|
logdump. Executing with option -O could output the log history. But
|
||||||
|
when it occurred the block which had no magic number in it's header,
|
||||||
|
the program would exit.
|
||||||
|
|
||||||
|
Sometimes we were locating problems, needed for more transactions that
|
||||||
|
had replayed instead of the latest batch of transactions and we
|
||||||
|
weren't hope to display all the history in the meanwhile. So we
|
||||||
|
introduced the option -n used for controlling the print of history
|
||||||
|
transactions. Specially, this parameter was depending on the option
|
||||||
|
-O otherwise it couldn't work.
|
||||||
|
|
||||||
|
So in this modification, we used logdump with -O -n <num_trans>. The
|
||||||
|
-n options causes logdump to continue past a block with a missing
|
||||||
|
magic nuber. Instead, it will terminate only when the entire log has
|
||||||
|
been printed or after <num_trans> transactions.
|
||||||
|
|
||||||
|
conflict: context adaptation
|
||||||
|
|
||||||
|
Link: https://lore.kernel.org/r/608df030-593f-8c69-cb65-632a34729d23@huawei.com
|
||||||
|
Signed-off-by: lihaoxiang <lihaoxiang9@huawei.com>
|
||||||
|
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||||
|
---
|
||||||
|
debugfs/debugfs.8.in | 13 +++++++++++--
|
||||||
|
debugfs/logdump.c | 33 +++++++++++++++++++++++++++++----
|
||||||
|
2 files changed, 40 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/debugfs/debugfs.8.in b/debugfs/debugfs.8.in
|
||||||
|
index 393c000..c4be831 100644
|
||||||
|
--- a/debugfs/debugfs.8.in
|
||||||
|
+++ b/debugfs/debugfs.8.in
|
||||||
|
@@ -505,7 +505,7 @@ which is a hard link to
|
||||||
|
.IR filespec .
|
||||||
|
Note this does not adjust the inode reference counts.
|
||||||
|
.TP
|
||||||
|
-.BI logdump " [-acsOS] [-b block] [-i filespec] [-f journal_file] [output_file]"
|
||||||
|
+.BI logdump " [-acsOS] [-b block] [-n num_trans ] [-i filespec] [-f journal_file] [output_file]"
|
||||||
|
Dump the contents of the ext3 journal. By default, dump the journal inode as
|
||||||
|
specified in the superblock. However, this can be overridden with the
|
||||||
|
.I \-i
|
||||||
|
@@ -528,7 +528,7 @@ The
|
||||||
|
.I \-a
|
||||||
|
option causes the
|
||||||
|
.B logdump
|
||||||
|
-program to print the contents of all of the descriptor blocks.
|
||||||
|
+to print the contents of all of the descriptor blocks.
|
||||||
|
The
|
||||||
|
.I \-b
|
||||||
|
option causes
|
||||||
|
@@ -548,6 +548,15 @@ The
|
||||||
|
option causes logdump to display old (checkpointed) journal entries.
|
||||||
|
This can be used to try to track down journal problems even after the
|
||||||
|
journal has been replayed.
|
||||||
|
+.IP
|
||||||
|
+The
|
||||||
|
+.I \-n
|
||||||
|
+option causes
|
||||||
|
+.B logdump
|
||||||
|
+to continue past a journal block which is missing a magic number.
|
||||||
|
+Instead, it will stop only when the entire log is printed or after
|
||||||
|
+.I num_trans
|
||||||
|
+transactions.
|
||||||
|
.TP
|
||||||
|
.BI ls " [-l] [-c] [-d] [-p] [-r] filespec"
|
||||||
|
Print a listing of the files in the directory
|
||||||
|
diff --git a/debugfs/logdump.c b/debugfs/logdump.c
|
||||||
|
index cdd47a3..cf36e19 100644
|
||||||
|
--- a/debugfs/logdump.c
|
||||||
|
+++ b/debugfs/logdump.c
|
||||||
|
@@ -34,12 +34,14 @@ extern char *optarg;
|
||||||
|
#include "blkid/blkid.h"
|
||||||
|
#include "jfs_user.h"
|
||||||
|
#include <uuid/uuid.h>
|
||||||
|
+#include <stdbool.h>
|
||||||
|
|
||||||
|
enum journal_location {JOURNAL_IS_INTERNAL, JOURNAL_IS_EXTERNAL};
|
||||||
|
|
||||||
|
#define ANY_BLOCK ((blk64_t) -1)
|
||||||
|
|
||||||
|
static int dump_all, dump_super, dump_old, dump_contents, dump_descriptors;
|
||||||
|
+static int64_t dump_counts;
|
||||||
|
static blk64_t block_to_dump, bitmap_to_dump, inode_block_to_dump;
|
||||||
|
static unsigned int group_to_dump, inode_offset_to_dump;
|
||||||
|
static ext2_ino_t inode_to_dump;
|
||||||
|
@@ -103,9 +105,10 @@ void do_logdump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
|
||||||
|
bitmap_to_dump = -1;
|
||||||
|
inode_block_to_dump = ANY_BLOCK;
|
||||||
|
inode_to_dump = -1;
|
||||||
|
+ dump_counts = -1;
|
||||||
|
|
||||||
|
reset_getopt();
|
||||||
|
- while ((c = getopt (argc, argv, "ab:ci:f:OsS")) != EOF) {
|
||||||
|
+ while ((c = getopt (argc, argv, "ab:ci:f:OsSn:")) != EOF) {
|
||||||
|
switch (c) {
|
||||||
|
case 'a':
|
||||||
|
dump_all++;
|
||||||
|
@@ -138,6 +141,14 @@ void do_logdump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
|
||||||
|
case 'S':
|
||||||
|
dump_super++;
|
||||||
|
break;
|
||||||
|
+ case 'n':
|
||||||
|
+ dump_counts = strtol(optarg, &tmp, 10);
|
||||||
|
+ if (*tmp) {
|
||||||
|
+ com_err(argv[0], 0,
|
||||||
|
+ "Bad log counts number - %s", optarg);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
goto print_usage;
|
||||||
|
}
|
||||||
|
@@ -276,7 +287,7 @@ errout:
|
||||||
|
return;
|
||||||
|
|
||||||
|
print_usage:
|
||||||
|
- fprintf(stderr, "%s: Usage: logdump [-acsOS] [-b<block>] [-i<filespec>]\n\t"
|
||||||
|
+ fprintf(stderr, "%s: Usage: logdump [-acsOS] [-n<num_trans>] [-b<block>] [-i<filespec>]\n\t"
|
||||||
|
"[-f<journal_file>] [output_file]\n", argv[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -353,6 +364,8 @@ static void dump_journal(char *cmdname, FILE *out_file,
|
||||||
|
journal_header_t *header;
|
||||||
|
tid_t transaction;
|
||||||
|
unsigned int blocknr = 0;
|
||||||
|
+ int64_t cur_counts = 0;
|
||||||
|
+ bool exist_no_magic = false;
|
||||||
|
|
||||||
|
/* First, check to see if there's an ext2 superblock header */
|
||||||
|
retval = read_journal_block(cmdname, source, 0, buf, 2048);
|
||||||
|
@@ -416,6 +429,9 @@ static void dump_journal(char *cmdname, FILE *out_file,
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
+ if (dump_old && (dump_counts != -1) && (cur_counts >= dump_counts))
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
retval = read_journal_block(cmdname, source,
|
||||||
|
((ext2_loff_t) blocknr) * blocksize,
|
||||||
|
buf, blocksize);
|
||||||
|
@@ -429,8 +445,16 @@ static void dump_journal(char *cmdname, FILE *out_file,
|
||||||
|
blocktype = be32_to_cpu(header->h_blocktype);
|
||||||
|
|
||||||
|
if (magic != JFS_MAGIC_NUMBER) {
|
||||||
|
- fprintf (out_file, "No magic number at block %u: "
|
||||||
|
- "end of journal.\n", blocknr);
|
||||||
|
+ if (exist_no_magic == false) {
|
||||||
|
+ exist_no_magic = true;
|
||||||
|
+ fprintf(out_file, "No magic number at block %u: "
|
||||||
|
+ "end of journal.\n", blocknr);
|
||||||
|
+ }
|
||||||
|
+ if (dump_old && (dump_counts != -1)) {
|
||||||
|
+ blocknr++;
|
||||||
|
+ WRAP(jsb, blocknr);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -457,6 +481,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case JFS_COMMIT_BLOCK:
|
||||||
|
+ cur_counts++;
|
||||||
|
transaction++;
|
||||||
|
blocknr++;
|
||||||
|
WRAP(jsb, blocknr);
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: e2fsprogs
|
Name: e2fsprogs
|
||||||
Version: 1.45.6
|
Version: 1.45.6
|
||||||
Release: 12
|
Release: 13
|
||||||
Summary: Second extended file system management tools
|
Summary: Second extended file system management tools
|
||||||
License: GPLv2 and LGPLv2 and GPLv2+
|
License: GPLv2 and LGPLv2 and GPLv2+
|
||||||
URL: http://e2fsprogs.sourceforge.net/
|
URL: http://e2fsprogs.sourceforge.net/
|
||||||
@ -51,6 +51,7 @@ Patch41: 0041-e2fsck-do-not-clean-up-file-acl-if-the-inode-is-trun.patch
|
|||||||
Patch42: 0042-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch
|
Patch42: 0042-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch
|
||||||
Patch43: 0043-libext2fs-add-sanity-check-to-extent-manipulation.patch
|
Patch43: 0043-libext2fs-add-sanity-check-to-extent-manipulation.patch
|
||||||
Patch44: 0044-tune2fs-do-not-change-j_tail_sequence-in-journal-sup.patch
|
Patch44: 0044-tune2fs-do-not-change-j_tail_sequence-in-journal-sup.patch
|
||||||
|
Patch45: 0045-debugfs-teach-logdump-the-n-num_trans-option.patch
|
||||||
|
|
||||||
BuildRequires: gcc pkgconfig texinfo
|
BuildRequires: gcc pkgconfig texinfo
|
||||||
BuildRequires: fuse-devel libblkid-devel libuuid-devel
|
BuildRequires: fuse-devel libblkid-devel libuuid-devel
|
||||||
@ -172,6 +173,9 @@ exit 0
|
|||||||
%{_mandir}/man8/*
|
%{_mandir}/man8/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Aug 27 2022 yanxiaodan <yanxiaodan@huawei.com> - 1.45.6-13
|
||||||
|
- debugfs: teach logdump the -n <num_trans> option
|
||||||
|
|
||||||
* Mon Aug 15 2022 yanxiaodan <yanxiaodan@huawei.com> - 1.45.6-12
|
* Mon Aug 15 2022 yanxiaodan <yanxiaodan@huawei.com> - 1.45.6-12
|
||||||
- tune2fs: do not change j_tail_sequence in journal superblock
|
- tune2fs: do not change j_tail_sequence in journal superblock
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user