Page MenuHomeFreeBSD

D34067.id102013.diff
No OneTemporary

D34067.id102013.diff

Index: share/man/man9/EVENTHANDLER.9
===================================================================
--- share/man/man9/EVENTHANDLER.9
+++ share/man/man9/EVENTHANDLER.9
@@ -318,6 +318,12 @@
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 minidump of the live system.
+.It Vt livedumper_dump
+Callback invoked for each dumped block of data during a live minidump.
+.It Vt livedumper_finish
+Callback invoked once a live minidump has completed.
.It Vt lle_event
Callback invoked when an link layer event has happened.
.It Vt nmbclusters_change
Index: sys/kern/kern_vnodedumper.c
===================================================================
--- sys/kern/kern_vnodedumper.c
+++ 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>
@@ -51,6 +52,14 @@
static struct sx livedump_sx;
SX_SYSINIT(livedump, &livedump_sx, "Livedump sx");
+typedef void (*livedump_fn)(void *arg, int *errorp);
+typedef void (*livedump_dump_fn)(void *arg, void *virtual, off_t offset,
+ size_t len, int *errorp);
+
+EVENTHANDLER_DECLARE(livedumper_start, livedump_fn);
+EVENTHANDLER_DECLARE(livedumper_dump, livedump_dump_fn);
+EVENTHANDLER_DECLARE(livedumper_finish, livedump_fn);
+
/*
* Invoke a live minidump on the system.
*/
@@ -94,9 +103,15 @@
/* Only allow one livedump to proceed at a time. */
sx_xlock(&livedump_sx);
+ EVENTHANDLER_INVOKE(livedumper_start, &error);
+ if (error != 0)
+ goto out;
+
dump_savectx();
error = minidumpsys(&di, true);
-
+ /* XXX: may clobber error. */
+ EVENTHANDLER_INVOKE(livedumper_finish, &error);
+out:
sx_xunlock(&livedump_sx);
vn_rangelock_unlock(vp, rl_cookie);
VOP_UNLOCK(vp);
@@ -149,6 +164,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);

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 1, 12:26 AM (15 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13215427
Default Alt Text
D34067.id102013.diff (2 KB)

Event Timeline