On Fri, Jun 13 2025, Pasha Tatashin wrote: > On Fri, Jun 13, 2025 at 11:18 AM Pratyush Yadav <pratyush@xxxxxxxxxx> wrote: >> >> On Sun, Jun 08 2025, Pasha Tatashin wrote: >> >> > On Thu, Jun 5, 2025 at 12:04 PM Pratyush Yadav <pratyush@xxxxxxxxxx> wrote: >> >> >> >> On Thu, May 15 2025, Pasha Tatashin wrote: >> >> >> >> > Implements the core logic within luo_files.c to invoke the prepare, >> >> > reboot, finish, and cancel callbacks for preserved file instances, >> >> > replacing the previous stub implementations. It also handles >> >> > the persistence and retrieval of the u64 data payload associated with >> >> > each file via the LUO FDT. >> >> > >> >> > This completes the core mechanism enabling registered filesystem >> >> > handlers to actively manage file state across the live update >> >> > transition using the LUO framework. >> >> > >> >> > Signed-off-by: Pasha Tatashin <pasha.tatashin@xxxxxxxxxx> >> >> > --- >> >> > drivers/misc/liveupdate/luo_files.c | 105 +++++++++++++++++++++++++++- >> >> > 1 file changed, 103 insertions(+), 2 deletions(-) >> >> > >> >> [...] >> >> > @@ -305,7 +369,29 @@ int luo_do_files_prepare_calls(void) >> >> > */ >> >> > int luo_do_files_freeze_calls(void) >> >> > { >> >> > - return 0; >> >> > + unsigned long token; >> >> > + struct luo_file *h; >> >> > + int ret; >> >> > + >> >> > + xa_for_each(&luo_files_xa_out, token, h) { >> >> >> >> Should we also ensure at this point that there are no open handles to >> >> this file? How else would a file system ensure the file is in quiescent >> >> state to do its final serialization? >> > >> > Do you mean check refcnt here? If so, this is a good idea, but first >> > we need to implement the lifecycle of liveupdate agent correctectly, >> > where owner of FD must survive through entering into reboot() with >> > /dev/liveupdate still open. >> >> Yes, by this point we should ensure refcnt == 1. IIUC you plan to >> implement the lifecycle change in the next revision, so this can be >> added there as well I suppose. > > Yes, I am working on that. Current, WIP patch looks like this: > https://github.com/soleen/linux/commit/fecf912d8b70acd23d24185a8c0504764e43a279 > > However, I am not sure about refcnt == 1 at freeze() time. We can have > programs, that never terminated while we were still in userspace (i.e. > kexec -e -> reboot() -> freeze()), in that case refcnt can be anything > at the time of freeze, no? Do you mean the agent that controls the liveupdate session? Then in that case the agent can keep running with the /dev/liveupdate FD open, but it must close all of the FDs preserved via LUO before doing kexec -e. -- Regards, Pratyush Yadav