Page MenuHomeFreeBSD

D34067.diff
No OneTemporary

D34067.diff

diff --git a/share/man/man9/EVENTHANDLER.9 b/share/man/man9/EVENTHANDLER.9
--- a/share/man/man9/EVENTHANDLER.9
+++ b/share/man/man9/EVENTHANDLER.9
@@ -318,8 +318,14 @@
Callbacks invoked before a linker file is about to be unloaded.
These callbacks may be used to return an error and prevent the unload from
proceeding.
+.It Vt livedumper_start
+Callback invoked before beginning a kernel dump of the live system.
+.It Vt livedumper_dump
+Callback invoked for each dumped block of data during a live kernel dump.
+.It Vt livedumper_finish
+Callback invoked once a live kernel dump has completed.
.It Vt lle_event
-Callback invoked when an link layer event has happened.
+Callback invoked when a link layer event has happened.
.It Vt nmbclusters_change
Callback invoked when the number of mbuf clusters has changed.
.It Vt nmbufs_change
diff --git a/sys/kern/kern_vnodedumper.c b/sys/kern/kern_vnodedumper.c
--- a/sys/kern/kern_vnodedumper.c
+++ b/sys/kern/kern_vnodedumper.c
@@ -31,6 +31,7 @@
#include <sys/conf.h>
#include <sys/caprights.h>
#include <sys/disk.h>
+#include <sys/eventhandler.h>
#include <sys/fcntl.h>
#include <sys/file.h>
#include <sys/kerneldump.h>
@@ -111,9 +112,15 @@
rl_cookie = vn_rangelock_wlock(vp, 0, OFF_MAX);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ EVENTHANDLER_INVOKE(livedumper_start, &error);
+ if (error != 0)
+ goto out;
+
dump_savectx();
error = minidumpsys(livedi, true);
+ EVENTHANDLER_INVOKE(livedumper_finish);
+out:
VOP_UNLOCK(vp);
vn_rangelock_unlock(vp, rl_cookie);
sx_xunlock(&livedump_sx);
@@ -162,6 +169,10 @@
MPASS(vp != NULL);
ASSERT_VOP_LOCKED(vp, __func__);
+ EVENTHANDLER_INVOKE(livedumper_dump, virtual, offset, length, &error);
+ if (error != 0)
+ return (error);
+
/* Done? */
if (virtual == NULL)
return (0);
diff --git a/sys/sys/kerneldump.h b/sys/sys/kerneldump.h
--- a/sys/sys/kerneldump.h
+++ b/sys/sys/kerneldump.h
@@ -164,6 +164,15 @@
int livedump_start(int, int, uint8_t);
+/* Live minidump events */
+typedef void (*livedump_start_fn)(void *arg, int *errorp);
+typedef void (*livedump_dump_fn)(void *arg, void *virtual, off_t offset,
+ size_t len, int *errorp);
+typedef void (*livedump_finish_fn)(void *arg);
+EVENTHANDLER_DECLARE(livedumper_start, livedump_start_fn);
+EVENTHANDLER_DECLARE(livedumper_dump, livedump_dump_fn);
+EVENTHANDLER_DECLARE(livedumper_finish, livedump_finish_fn);
+
#endif
#endif /* _SYS_KERNELDUMP_H */

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 1, 8:24 AM (21 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13240118
Default Alt Text
D34067.diff (2 KB)

Event Timeline