]> git.proxmox.com Git - mirror_zfs.git/commitdiff
zdb/ztest: send dbgmsg output to stderr
authorRob Norris <rob.norris@klarasystems.com>
Fri, 10 May 2024 03:58:26 +0000 (13:58 +1000)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 14 May 2024 16:49:00 +0000 (09:49 -0700)
And, make the output fd an arg to zfs_dbgmsg_print(). This is a change
in behaviour, but keeps it consistent with where crash traces go, and
it's easy to argue this is what we want anyway; this is information
about the task, not the actual output of the task.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #16181

cmd/zdb/zdb.c
cmd/ztest.c
include/sys/zfs_debug.h
module/os/freebsd/zfs/zfs_debug.c
module/os/linux/zfs/zfs_debug.c

index 7c2819d3cf014fac05810a399e1047cb4eb69b3d..704fcf4422d43e44a68ca8dc47a45473bcc03417 100644 (file)
@@ -837,8 +837,8 @@ dump_debug_buffer(void)
         * We use write() instead of printf() so that this function
         * is safe to call from a signal handler.
         */
-       ret = write(STDOUT_FILENO, "\n", 1);
-       zfs_dbgmsg_print("zdb");
+       ret = write(STDERR_FILENO, "\n", 1);
+       zfs_dbgmsg_print(STDERR_FILENO, "zdb");
 }
 
 static void sig_handler(int signo)
index b4d63b02dda64f22ba6c4696a1bd2e7e96045a2d..f77a37c2154589352641d9442eedfb135ec10322 100644 (file)
@@ -615,8 +615,8 @@ dump_debug_buffer(void)
         * We use write() instead of printf() so that this function
         * is safe to call from a signal handler.
         */
-       ret = write(STDOUT_FILENO, "\n", 1);
-       zfs_dbgmsg_print("ztest");
+       ret = write(STDERR_FILENO, "\n", 1);
+       zfs_dbgmsg_print(STDERR_FILENO, "ztest");
 }
 
 static void sig_handler(int signo)
index 8d94557a58829cb3cef98c48cdae8ecea974d272..e509c8b7c638134493ac38642588fe818d253869 100644 (file)
@@ -104,7 +104,7 @@ extern void zfs_dbgmsg_fini(void);
 
 #ifndef _KERNEL
 extern int dprintf_find_string(const char *string);
-extern void zfs_dbgmsg_print(const char *tag);
+extern void zfs_dbgmsg_print(int fd, const char *tag);
 #endif
 
 #ifdef __cplusplus
index 3e832a9104f282140b1522e4c20f802cb1af4778..c4cebe102075d40502c233fa528c67dd5ef6a49e 100644 (file)
@@ -232,30 +232,29 @@ __dprintf(boolean_t dprint, const char *file, const char *func,
 #else
 
 void
-zfs_dbgmsg_print(const char *tag)
+zfs_dbgmsg_print(int fd, const char *tag)
 {
        ssize_t ret __attribute__((unused));
 
-       mutex_enter(&zfs_dbgmsgs_lock);
-
        /*
         * We use write() in this function instead of printf()
         * so it is safe to call from a signal handler.
         */
-       ret = write(STDOUT_FILENO, "ZFS_DBGMSG(", 11);
-       ret = write(STDOUT_FILENO, tag, strlen(tag));
-       ret = write(STDOUT_FILENO, ") START:\n", 9);
+       ret = write(fd, "ZFS_DBGMSG(", 11);
+       ret = write(fd, tag, strlen(tag));
+       ret = write(fd, ") START:\n", 9);
+
+       mutex_enter(&zfs_dbgmsgs_lock);
 
-       for (zfs_dbgmsg_t zdm = list_head(&zfs_dbgmsgs); zdm != NULL;
+       for (zfs_dbgmsg_t *zdm = list_head(&zfs_dbgmsgs); zdm != NULL;
            zdm = list_next(&zfs_dbgmsgs, zdm))
-               ret = write(STDOUT_FILENO, zdm->zdm_msg,
-                   strlen(zdm->zdm_msg));
-               ret = write(STDOUT_FILENO, "\n", 1);
+               ret = write(fd, zdm->zdm_msg, strlen(zdm->zdm_msg));
+               ret = write(fd, "\n", 1);
        }
 
-       ret = write(STDOUT_FILENO, "ZFS_DBGMSG(", 11);
-       ret = write(STDOUT_FILENO, tag, strlen(tag));
-       ret = write(STDOUT_FILENO, ") END\n", 6);
+       ret = write(fd, "ZFS_DBGMSG(", 11);
+       ret = write(fd, tag, strlen(tag));
+       ret = write(fd, ") END\n", 6);
 
        mutex_exit(&zfs_dbgmsgs_lock);
 }
index bc5c028dca09ac27409795ca5d4e489532078efa..9ee40771fc194793192c3a5dae3f1d648e467392 100644 (file)
@@ -221,7 +221,7 @@ __dprintf(boolean_t dprint, const char *file, const char *func,
 #else
 
 void
-zfs_dbgmsg_print(const char *tag)
+zfs_dbgmsg_print(int fd, const char *tag)
 {
        ssize_t ret __attribute__((unused));
 
@@ -231,20 +231,19 @@ zfs_dbgmsg_print(const char *tag)
         * We use write() in this function instead of printf()
         * so it is safe to call from a signal handler.
         */
-       ret = write(STDOUT_FILENO, "ZFS_DBGMSG(", 11);
-       ret = write(STDOUT_FILENO, tag, strlen(tag));
-       ret = write(STDOUT_FILENO, ") START:\n", 9);
+       ret = write(fd, "ZFS_DBGMSG(", 11);
+       ret = write(fd, tag, strlen(tag));
+       ret = write(fd, ") START:\n", 9);
 
        for (zfs_dbgmsg_t *zdm = list_head(&zfs_dbgmsgs.pl_list); zdm != NULL;
            zdm = list_next(&zfs_dbgmsgs.pl_list, zdm)) {
-               ret = write(STDOUT_FILENO, zdm->zdm_msg,
-                   strlen(zdm->zdm_msg));
-               ret = write(STDOUT_FILENO, "\n", 1);
+               ret = write(fd, zdm->zdm_msg, strlen(zdm->zdm_msg));
+               ret = write(fd, "\n", 1);
        }
 
-       ret = write(STDOUT_FILENO, "ZFS_DBGMSG(", 11);
-       ret = write(STDOUT_FILENO, tag, strlen(tag));
-       ret = write(STDOUT_FILENO, ") END\n", 6);
+       ret = write(fd, "ZFS_DBGMSG(", 11);
+       ret = write(fd, tag, strlen(tag));
+       ret = write(fd, ") END\n", 6);
 
        mutex_exit(&zfs_dbgmsgs.pl_lock);
 }