git: b76961e3a21a - main - kdump: Print splice structures

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Tue, 10 Sep 2024 16:55:25 UTC
The branch main has been updated by markj:

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

commit b76961e3a21a820f15ebff9d115ff67feb910cec
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-09-10 16:51:26 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-09-10 16:52:01 +0000

    kdump: Print splice structures
    
    MFC after:      3 months
    Sponsored by:   Klara, Inc.
    Sponsored by:   Stormshield
---
 lib/libsysdecode/ktrace.out | Bin 0 -> 23596 bytes
 usr.bin/kdump/kdump.c       |  16 ++++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/lib/libsysdecode/ktrace.out b/lib/libsysdecode/ktrace.out
new file mode 100644
index 000000000000..29d35f0de3ce
Binary files /dev/null and b/lib/libsysdecode/ktrace.out differ
diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
index f7ac82c757fa..41d3eb594149 100644
--- a/usr.bin/kdump/kdump.c
+++ b/usr.bin/kdump/kdump.c
@@ -105,6 +105,7 @@ void ktruser(int, void *);
 void ktrcaprights(cap_rights_t *);
 void ktritimerval(struct itimerval *it);
 void ktrsockaddr(struct sockaddr *);
+void ktrsplice(struct splice *);
 void ktrstat(struct stat *);
 void ktrstruct(char *, size_t);
 void ktrcapfail(struct ktr_cap_fail *);
@@ -1923,6 +1924,14 @@ ktrsockaddr(struct sockaddr *sa)
 	printf(" }\n");
 }
 
+void
+ktrsplice(struct splice *sp)
+{
+	printf("struct splice { fd=%d, max=%#jx, idle=%jd.%06jd }\n",
+	    sp->sp_fd, (uintmax_t)sp->sp_max, (intmax_t)sp->sp_idle.tv_sec,
+	    (intmax_t)sp->sp_idle.tv_usec);
+}
+
 void
 ktrstat(struct stat *statp)
 {
@@ -2111,6 +2120,13 @@ ktrstruct(char *buf, size_t buflen)
 		memcpy(set, data, datalen);
 		ktrbitset(name, set, datalen);
 		free(set);
+	} else if (strcmp(name, "splice") == 0) {
+		struct splice sp;
+
+		if (datalen != sizeof(sp))
+			goto invalid;
+		memcpy(&sp, data, datalen);
+		ktrsplice(&sp);
 	} else {
 #ifdef SYSDECODE_HAVE_LINUX
 		if (ktrstruct_linux(name, data, datalen) == false)