The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e02d4fab54539a5d127c12e9e9f8b0ddd2a1cafa

commit e02d4fab54539a5d127c12e9e9f8b0ddd2a1cafa
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2025-07-03 19:53:30 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2025-07-04 14:42:33 +0000

    kdump: Add support for decoding inotify events
    
    These are emitted when reading from an inotify descriptor.
    
    MFC after:      3 months
    Sponsored by:   Klara, Inc.
---
 usr.bin/kdump/kdump.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
index 9cc22d382de5..17ed43b55c5a 100644
--- a/usr.bin/kdump/kdump.c
+++ b/usr.bin/kdump/kdump.c
@@ -46,6 +46,7 @@
 #include <sys/ktrace.h>
 #include <sys/mman.h>
 #include <sys/ioctl.h>
+#include <sys/inotify.h>
 #include <sys/poll.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
@@ -105,6 +106,7 @@ static void ktrcsw(struct ktr_csw *);
 static void ktrcsw_old(struct ktr_csw_old *);
 static void ktruser(int, void *);
 static void ktrcaprights(cap_rights_t *);
+static void ktrinotify(struct inotify_event *);
 static void ktritimerval(struct itimerval *it);
 static void ktrsockaddr(struct sockaddr *);
 static void ktrsplice(struct splice *);
@@ -1860,6 +1862,14 @@ ktrtimeval(struct timeval *tv)
        printf("{%ld, %ld}", (long)tv->tv_sec, tv->tv_usec);
 }
 
+static void
+ktrinotify(struct inotify_event *ev)
+{
+       printf(
+    "inotify { .wd = %d, .mask = %#x, .cookie = %u, .len = %u, .name = %s }\n",
+           ev->wd, ev->mask, ev->cookie, ev->len, ev->name);
+}
+
 static void
 ktritimerval(struct itimerval *it)
 {
@@ -2128,6 +2138,17 @@ ktrstruct(char *buf, size_t buflen)
                        goto invalid;
                memcpy(&rights, data, datalen);
                ktrcaprights(&rights);
+       } else if (strcmp(name, "inotify") == 0) {
+               struct inotify_event *ev;
+
+               if (datalen < sizeof(struct inotify_event) ||
+                   datalen > sizeof(struct inotify_event) + NAME_MAX + 1)
+                       goto invalid;
+               ev = malloc(datalen);
+               if (ev == NULL)
+                       err(1, "malloc");
+               memcpy(ev, data, datalen);
+               ktrinotify(ev);
        } else if (strcmp(name, "itimerval") == 0) {
                if (datalen != sizeof(struct itimerval))
                        goto invalid;

Reply via email to