[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <174786679041.1385778.13234110843946598675.stgit@frogsfrogsfrogs>
Date: Wed, 21 May 2025 15:48:15 -0700
From: "Darrick J. Wong" <djwong@...nel.org>
To: tytso@....edu
Cc: linux-ext4@...r.kernel.org
Subject: [PATCH 2/4] fuse2fs: hook library error message printing
From: Darrick J. Wong <djwong@...nel.org>
Hook the com_err library so that error messages coming from libext2fs
such as:
Illegal block number passed to ext2fs_test_block_bitmap #9462 for block bitmap for /dev/sda
are actually printed with the standard "FUSE2FS (sda):" prefix.
Libraries shouldn't be printing that kind of stuff, but it is what it
is, and what it is is against the normal conventions.
Signed-off-by: "Darrick J. Wong" <djwong@...nel.org>
---
misc/fuse2fs.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c
index cbe9afd4ba1290..d78ab5558b6182 100644
--- a/misc/fuse2fs.c
+++ b/misc/fuse2fs.c
@@ -127,6 +127,8 @@
errcode_t ext2fs_run_ext3_journal(ext2_filsys *fs);
+const char *err_shortdev;
+
#ifdef CONFIG_JBD_DEBUG /* Enabled by configure --enable-jbd-debug */
int journal_enable_debug = -1;
#endif
@@ -4736,6 +4738,18 @@ static unsigned long long default_cache_size(void)
return ret;
}
+static void fuse2fs_com_err_proc(const char *whoami, errcode_t code,
+ const char *fmt, va_list args)
+{
+ fprintf(stderr, "FUSE2FS (%s): ", err_shortdev ? err_shortdev : "?");
+ if (whoami)
+ fprintf(stderr, "%s: ", whoami);
+ fprintf(stderr, "%s ", error_message(code));
+ vfprintf(stderr, fmt, args);
+ fprintf(stderr, "\n");
+ fflush(stderr);
+}
+
int main(int argc, char *argv[])
{
struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
@@ -4765,6 +4779,10 @@ int main(int argc, char *argv[])
else
fctx.shortdev = fctx.device;
+ /* capture library error messages */
+ err_shortdev = fctx.shortdev;
+ set_com_err_hook(fuse2fs_com_err_proc);
+
#ifdef ENABLE_NLS
setlocale(LC_MESSAGES, "");
setlocale(LC_CTYPE, "");
@@ -4956,6 +4974,8 @@ int main(int argc, char *argv[])
fflush(orig_stderr);
}
close_fs(&fctx);
+ reset_com_err_hook();
+ err_shortdev = NULL;
if (fctx.device)
free(fctx.device);
fuse_opt_free_args(&args);
Powered by blists - more mailing lists