git: 60bc9617e79e - main - kerneldump: add livedump_start_vnode(9)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 18 Mar 2024 21:13:54 UTC
The branch main has been updated by khng:
URL: https://cgit.FreeBSD.org/src/commit/?id=60bc9617e79e99bdf670304923f3baed4b749ad3
commit 60bc9617e79e99bdf670304923f3baed4b749ad3
Author: Vijeyalakshumi Koteeswaran <kvinupriya@gmail.com>
AuthorDate: 2024-03-18 19:26:29 +0000
Commit: Ka Ho Ng <khng@FreeBSD.org>
CommitDate: 2024-03-18 21:12:18 +0000
kerneldump: add livedump_start_vnode(9)
livedump_start_vnode(9) is introduced such that the live minidump on the
system could take a vnode. This interface could be used to extend support
for the existing framework in downstream.
Bump __FreeBSD_version for introducing livedump_start_vnode(9).
Sponsored by: Juniper Networks, Inc.
Reviewed by: khng
Differential Revision: https://reviews.freebsd.org/D43471
---
sys/kern/kern_vnodedumper.c | 32 +++++++++++++++++++++++---------
sys/sys/kerneldump.h | 1 +
sys/sys/param.h | 2 +-
3 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/sys/kern/kern_vnodedumper.c b/sys/kern/kern_vnodedumper.c
index 0104369b9d67..5a2c255390cc 100644
--- a/sys/kern/kern_vnodedumper.c
+++ b/sys/kern/kern_vnodedumper.c
@@ -61,11 +61,8 @@ int
livedump_start(int fd, int flags, uint8_t compression)
{
#if MINIDUMP_PAGE_TRACKING == 1
- struct dumperinfo di, *livedi;
- struct diocskerneldump_arg kda;
- struct vnode *vp;
struct file *fp;
- void *rl_cookie;
+ struct vnode *vp;
int error;
error = priv_check(curthread, PRIV_KMEM_READ);
@@ -84,8 +81,27 @@ livedump_start(int fd, int flags, uint8_t compression)
error = EBADF;
goto drop;
}
+ error = livedump_start_vnode(vp, flags, compression);
+ if (error != 0)
+ goto drop;
+drop:
+ fdrop(fp, curthread);
+ return (error);
+#else
+ return (EOPNOTSUPP);
+#endif /* MINIDUMP_PAGE_TRACKING == 1 */
+}
- /* Set up a new dumper. */
+int
+livedump_start_vnode(struct vnode *vp, int flags, uint8_t compression)
+{
+#if MINIDUMP_PAGE_TRACKING == 1
+ struct dumperinfo di, *livedi;
+ struct diocskerneldump_arg kda;
+ void *rl_cookie;
+ int error;
+
+ /* Set up a new dumper. */
bzero(&di, sizeof(di));
di.dumper_start = vnode_dumper_start;
di.dumper = vnode_dump;
@@ -97,13 +113,13 @@ livedump_start(int fd, int flags, uint8_t compression)
kda.kda_compression = compression;
error = dumper_create(&di, "livedump", &kda, &livedi);
if (error != 0)
- goto drop;
+ return (error);
/* Only allow one livedump to proceed at a time. */
if (sx_try_xlock(&livedump_sx) == 0) {
dumper_destroy(livedi);
error = EBUSY;
- goto drop;
+ return (error);
}
/* To be used by the callback functions. */
@@ -126,8 +142,6 @@ out:
vn_rangelock_unlock(vp, rl_cookie);
sx_xunlock(&livedump_sx);
dumper_destroy(livedi);
-drop:
- fdrop(fp, curthread);
return (error);
#else
return (EOPNOTSUPP);
diff --git a/sys/sys/kerneldump.h b/sys/sys/kerneldump.h
index 46f05b3c130d..1f03c4b9c2d5 100644
--- a/sys/sys/kerneldump.h
+++ b/sys/sys/kerneldump.h
@@ -161,6 +161,7 @@ void dumpsys_pb_progress(size_t);
extern int do_minidump;
int livedump_start(int, int, uint8_t);
+int livedump_start_vnode(struct vnode *, int, uint8_t);
/* Live minidump events */
typedef void (*livedump_start_fn)(void *arg, int *errorp);
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 4369aba9bb46..d56255431ba2 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -73,7 +73,7 @@
* cannot include sys/param.h and should only be updated here.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1500015
+#define __FreeBSD_version 1500016
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,