If any of the kho_preserve_pages() fails, the notifier block will fail, cause an abort, and eventually all memory will be unpreserved.
This is a wrong behavior. Why should the memory that I preserved be unpreserved if there is finailziation failure or abort? reserve_mem should still keep memory as preserved in case KHO later will be finalized right? I have tested that this patch works with kho self-test: preserve, finalize, abort, finalize again, and the pages are properly preserved.
KHO Test and memblock do not need to ever unpreserve pages, as they preserve them once during boot.
Now that there is no notifier, and thus no abort, the pages must be unpreserved explicitly before returning.
Similarly, for test_kho, kho_test_notifier() calls kho_preserve_folio() and expects the abort to clean things up.
Side note: test_kho also preserves folios from kho_test_save_data() and doesn't clean them up on error, but that is a separate problem that this series doesn't have to solve.
I think patch 3/7 is the one that actually causes this problem since it
I updated that patch with your suggested fix.
Pasha