[PATCH makedumpfile 7/9] Add PG_INCLUDE_HEAD extension return status
Stephen Brennan <[email protected]>
| Newsgroups | org.infradead.lists.kexec |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> --- 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