]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: add helper to log mount messages as emitted by kernel
authorThomas Weißschuh <thomas@t-8ch.de>
Thu, 5 Oct 2023 11:19:14 +0000 (13:19 +0200)
committerThomas Weißschuh <thomas@t-8ch.de>
Thu, 5 Oct 2023 11:19:14 +0000 (13:19 +0200)
The kernel helpfully provides feedback about failed operations via the
filesystem descriptor. Read that information and expose it via libmounts
debug facilities.

Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
libmount/src/hook_mount.c

index 4b2a534f74e280e0dab27acf6cb80bab25634500..2e0b5f0facade4820b1c714b3ba32319f13c19e2 100644 (file)
@@ -64,6 +64,31 @@ static void close_sysapi_fds(struct libmnt_sysapi *api)
        api->fd_tree = api->fd_fs = -1;
 }
 
+static void debug_fs_fd_messages(int fd)
+{
+       uint8_t buf[BUFSIZ];
+       int rc;
+
+       while ((rc = read(fd, buf, sizeof(buf))) != -1) {
+               if (rc > 0 && buf[rc - 1] == '\n')
+                       buf[rc - 1] = '\0';
+               DBG(CXT, ul_debug("message from kernel: %*s", rc, buf));
+       }
+}
+
+static void set_syscall_status_cxt_log(struct libmnt_context *cxt,
+                                      const char *name, int x)
+{
+       struct libmnt_sysapi *api;
+
+       set_syscall_status(cxt, name, x);
+
+       if (!x) {
+               api = get_sysapi(cxt);
+               debug_fs_fd_messages(api->fd_fs);
+       }
+}
+
 /*
  * This hookset uses 'struct libmnt_sysapi' (mountP.h) as hookset data.
  */