From: Andrew Morton <akpm@linux-foundation.org>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: linux-kselftest@vger.kernel.org, rppt@kernel.org,
shuah@kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, dmatlack@google.com,
pratyush@kernel.org, skhawaja@google.com
Subject: Re: [PATCH v3 0/2] liveupdate: prevent double preservation
Date: Wed, 25 Mar 2026 16:14:05 -0700 [thread overview]
Message-ID: <20260325161405.0840dea1549b13c5a1653462@linux-foundation.org> (raw)
In-Reply-To: <20260325182026.467307-1-pasha.tatashin@soleen.com>
On Wed, 25 Mar 2026 18:20:24 +0000 Pasha Tatashin <pasha.tatashin@soleen.com> wrote:
> Currently, LUO does not prevent the same file from being preserved twice
> across different active sessions.
>
> Because LUO preserves files of absolutely different types: memfd, and
> upcoming vfiofd [1], iommufd [2], guestmefd (and possible kvmfd/cpufd).
> There is no common private data or guarantee on how to prevent that the
> same file is not preserved twice beside using inode or some slower and
> expensive method like hashtables.
>
I updated mm.git's mm-new branch to this version.
> Changelog:
> v3:
> - Renamed luo_preserved_files_xa to luo_preserved_files (Mike)
> - Added xa inserts during restoration, so a file that is not yet finished is
> not preserved at the same time. (Sashiko)
Below is how v3 altered mm.git.
It appears that some significant changes are in the works. Please lmk
if there's actually value in keeping v3 under test, or should I just
drop it?
kernel/liveupdate/luo_file.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
--- a/kernel/liveupdate/luo_file.c~b
+++ a/kernel/liveupdate/luo_file.c
@@ -117,7 +117,7 @@ static DECLARE_RWSEM(luo_file_handler_lo
static LIST_HEAD(luo_file_handler_list);
/* Keep track of files being preserved by LUO */
-static DEFINE_XARRAY(luo_preserved_files_xa);
+static DEFINE_XARRAY(luo_preserved_files);
/* 2 4K pages, give space for 128 files per file_set */
#define LUO_FILE_PGCNT 2ul
@@ -282,7 +282,7 @@ int luo_preserve_file(struct luo_file_se
if (err)
goto err_fput;
- err = xa_insert(&luo_preserved_files_xa, (unsigned long)file,
+ err = xa_insert(&luo_preserved_files, (unsigned long)file,
file, GFP_KERNEL);
if (err)
goto err_free_files_mem;
@@ -334,7 +334,7 @@ err_kfree:
err_flb_unpreserve:
luo_flb_file_unpreserve(fh);
err_erase_xa:
- xa_erase(&luo_preserved_files_xa, (unsigned long)file);
+ xa_erase(&luo_preserved_files, (unsigned long)file);
err_free_files_mem:
luo_free_files_mem(file_set);
err_fput:
@@ -378,7 +378,7 @@ void luo_file_unpreserve_files(struct lu
luo_file->fh->ops->unpreserve(&args);
luo_flb_file_unpreserve(luo_file->fh);
- xa_erase(&luo_preserved_files_xa, (unsigned long)luo_file->file);
+ xa_erase(&luo_preserved_files, (unsigned long)luo_file->file);
list_del(&luo_file->list);
file_set->count--;
@@ -622,6 +622,10 @@ int luo_retrieve_file(struct luo_file_se
luo_file->file = args.file;
/* Get reference so we can keep this file in LUO until finish */
get_file(luo_file->file);
+
+ WARN_ON(xa_insert(&luo_preserved_files, (unsigned long)luo_file->file,
+ luo_file->file, GFP_KERNEL));
+
*filep = luo_file->file;
luo_file->retrieve_status = 1;
@@ -717,8 +721,11 @@ int luo_file_finish(struct luo_file_set
luo_file_finish_one(file_set, luo_file);
- if (luo_file->file)
+ if (luo_file->file) {
+ xa_erase(&luo_preserved_files,
+ (unsigned long)luo_file->file);
fput(luo_file->file);
+ }
list_del(&luo_file->list);
file_set->count--;
mutex_destroy(&luo_file->mutex);
_
prev parent reply other threads:[~2026-03-25 23:14 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-25 18:20 [PATCH v3 0/2] liveupdate: prevent double preservation Pasha Tatashin
2026-03-25 18:20 ` [PATCH v3 1/2] liveupdate: prevent double management of files Pasha Tatashin
2026-03-25 18:56 ` Mike Rapoport
2026-03-25 20:20 ` Pratyush Yadav
2026-03-25 20:33 ` David Matlack
2026-03-25 21:08 ` Pasha Tatashin
2026-03-25 21:35 ` Pasha Tatashin
2026-03-26 9:04 ` Mike Rapoport
2026-03-25 18:20 ` [PATCH v3 2/2] selftests: liveupdate: add test for double preservation Pasha Tatashin
2026-03-25 23:14 ` Andrew Morton [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260325161405.0840dea1549b13c5a1653462@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=dmatlack@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pasha.tatashin@soleen.com \
--cc=pratyush@kernel.org \
--cc=rppt@kernel.org \
--cc=shuah@kernel.org \
--cc=skhawaja@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox