Re: [PATCH v6 06/20] liveupdate: luo_file: implement file systems callbacks
From: Mike Rapoport <rppt@kernel.org>
Date: 2025-11-20 17:20:46
Also in:
linux-doc, linux-fsdevel, linux-mm, lkml
On Mon, Nov 17, 2025 at 12:50:56PM -0500, Pasha Tatashin wrote:
quoted
quoted
+struct liveupdate_file_handler; +struct liveupdate_session;Why struct liveupdate_session is a part of public LUO API?It is an obscure version of private "struct luo_session", in order to give subsystem access to: liveupdate_get_file_incoming(s, token, filep) liveupdate_get_token_outgoing(s, file, tokenp) For example, if your FD depends on another FD within a session, you can check if another FD is already preserved via liveupdate_get_token_outgoing(), and during retrieval time you can retrieve the "struct file" for your dependency.
And it's essentially unused right now.
quoted
quoted
+ } + + return 0; + +exit_err: + fput(file); + luo_session_free_files_mem(session);The error handling in this function is a mess. Pasha, please, please, use goto consistently.How is this a mess? There is a single exit_err destination, no exception, no early returns except at the very top of the function where we do early returns before fget() which makes total sense. Do you want to add a separate destination for luo_session_free_files_mem() ? But that is not necessary, in many places it is considered totally reasonable for free(NULL) to work correctly...
You have a mix of releasing resources with goto or inside if (err). And while basic free() primitives like kfree() and vfree() work correctly with NULL as a parameter, luo_session_free_files_mem() is already not a basic primitive and it may grow with a time. It already has two conditions that essentially prevent anything from freeing and this will grow with the time. So yes, I want a separate goto destination for freeing each resource and a goto for err = fh->ops->preserve(&args); if (err) case.
quoted
quoted
+ luo_file = kzalloc(sizeof(*luo_file), GFP_KERNEL); + if (!luo_file) + return -ENOMEM;Shouldn't we free files allocated on the previous iterations?No, for the same reason explained in luo_session.c :-)
A comment here as well please :)
quoted
quoted
+int liveupdate_get_file_incoming(struct liveupdate_session *s, u64 token, + struct file **filep) +{Ditto.These two functions are part of the public API allowing dependency tracking for vfio->iommu->memfd during preservation.
So like with FLB, until we get actual users for them they are dead code. And until it's clear how exactly dependency tracking for vfio->iommu->memfd will work, we won't know if this API is useful at all or we'll need something else in the end. -- Sincerely yours, Mike.