[PATCH V2] kho: Convert error handling to immediate return pattern
LongWei27 <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,org.infradead.lists.kexec,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
From: Long Wei <[email protected]> Replace the chained error accumulation (err |= func()) with immediate per-step error checking and early return in kho_out_fdt_setup(). Two problems with the current approach: 1. It continues executing FDT operations even after a failure, which is pointless and potentially unsafe on an invalid FDT context. 2. Bitwise OR of multiple negative error codes produces a result that may not represent any actual error, making debugging misleading. Early return fails fast and preserves the original error code for accurate diagnosis. No functional change intended. Signed-off-by: Long Wei <[email protected]> --- kernel/liveupdate/kexec_handover.c | 32 +++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c index 175c08a6e..93443ad84 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1438,20 +1438,34 @@ static __init int kho_out_fdt_setup(void) int err; err = fdt_create(root, PAGE_SIZE); - err |= fdt_finish_reservemap(root); - err |= fdt_begin_node(root, ""); - err |= fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); + if (err) + return err; + err = fdt_finish_reservemap(root); + if (err) + return err; + err = fdt_begin_node(root, ""); + if (err) + return err; + err = fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); + if (err) + return err; preserved_mem_tree_pa = virt_to_phys(tree->root); - err |= fdt_property(root, KHO_FDT_MEMORY_MAP_PROP_NAME, - &preserved_mem_tree_pa, - sizeof(preserved_mem_tree_pa)); + err = fdt_property(root, KHO_FDT_MEMORY_MAP_PROP_NAME, + &preserved_mem_tree_pa, + sizeof(preserved_mem_tree_pa)); + if (err) + return err; - err |= fdt_end_node(root); - err |= fdt_finish(root); + err = fdt_end_node(root); + if (err) + return err; + err = fdt_finish(root); + if (err) + return err; - return err; + return 0; } static void __init kho_in_kexec_metadata(void) -- 2.43.0