[PATCH makedumpfile 7/9] Add PG_INCLUDE_HEAD extension return status
Stephen Brennan
stephen.s.brennan at oracle.com
Mon Jul 13 17:45:40 PDT 2026
This allows an extension to request that only the head page of a
compound page be included in the dump.
Signed-off-by: Stephen Brennan <stephen.s.brennan at oracle.com>
---
extension.c | 2 +-
extension.h | 7 ++++---
makedumpfile.c | 9 +++++++++
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/extension.c b/extension.c
index 9b29f0c..a7360d0 100644
--- a/extension.c
+++ b/extension.c
@@ -314,7 +314,7 @@ int run_extension_callback(unsigned long pfn, const void *pcache, const struct p
for (int i = 0; i < handle_cbs_len; i++) {
if (handle_cbs[i]->cb) {
result = handle_cbs[i]->cb(pfn, pcache, inf);
- if (result == PG_INCLUDE) {
+ if (result == PG_INCLUDE || result == PG_INCLUDE_HEAD) {
ret = result;
goto out;
} else if (result == PG_EXCLUDE) {
diff --git a/extension.h b/extension.h
index 22af9a6..3edfbeb 100644
--- a/extension.h
+++ b/extension.h
@@ -4,9 +4,10 @@
struct pginfo;
enum {
- PG_INCLUDE, // Exntesion will keep the page
- PG_EXCLUDE, // Exntesion will discard the page
- PG_UNDECID, // Exntesion makes no decision
+ PG_INCLUDE, // Extension will keep the full page
+ PG_INCLUDE_HEAD, // Extension will keep just the head page
+ PG_EXCLUDE, // Extension will discard the full page
+ PG_UNDECID, // Extension makes no decision
};
int run_extension_callback(unsigned long pfn, const void *pcache, const struct pginfo *i);
void init_extensions(void);
diff --git a/makedumpfile.c b/makedumpfile.c
index f277360..69abb17 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -6667,6 +6667,15 @@ check_order:
* retained by an extension. */
num_extension_retained += nr_pages;
continue;
+ } else if (filter_pg == PG_INCLUDE_HEAD) {
+ num_extension_retained += 1;
+ if (nr_pages == 1)
+ continue;
+
+ /* FALL THROUGH and exclude tail pages */
+ pfn++;
+ mem_map += SIZE(page);
+ nr_pages--;
}
/*
--
2.47.3
More information about the kexec
mailing list