From: Pasha Tatashin <pasha.tatashin@soleen.com>
To: Pratyush Yadav <pratyush@kernel.org>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>,
linux-kselftest@vger.kernel.org, rppt@kernel.org,
shuah@kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org,
skhan@linuxfoundation.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, corbet@lwn.net,
dmatlack@google.com, kexec@lists.infradead.org,
skhawaja@google.com, graf@amazon.com
Subject: Re: [PATCH v4 09/13] liveupdate: Remove limit on the number of sessions
Date: Mon, 1 Jun 2026 10:44:14 -0400 [thread overview]
Message-ID: <ah2ardT1UjymdMqd@google.com> (raw)
In-Reply-To: <2vxzfr36fjcj.fsf@kernel.org>
On 06-01 16:03, Pratyush Yadav wrote:
> On Sat, May 30 2026, Pasha Tatashin wrote:
>
> > Currently, the number of LUO sessions is limited by a fixed number of
> > pre-allocated pages for serialization (16 pages, allowing for ~819
> > sessions).
> >
> > This limitation is problematic if LUO is used to support things such as
> > systemd file descriptor store, and would be used not just as VM memory
> > but to save other states on the machine.
> >
> > Remove this limit by transitioning to a linked-block approach for
> > session metadata serialization. Instead of a single contiguous block,
> > session metadata is now stored in a chain of 16-page blocks. Each block
> > starts with a header containing the physical address of the next block
> > and the number of session entries in the current block.
> >
> > Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> > Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
> > ---
> [...]
> > @@ -63,13 +58,15 @@
> > #define _LINUX_KHO_ABI_LUO_H
> >
> > #include <linux/align.h>
> > +#include <linux/kho/abi/block.h>
> > #include <uapi/linux/liveupdate.h>
> >
> > /*
> > * The LUO state is registered under this KHO entry name.
> > */
> > #define LUO_KHO_ENTRY_NAME "LUO"
> > -#define LUO_ABI_COMPATIBLE "luo-v3"
> > +#define LUO_COMPAT_BASE "luo-v3"
> > +#define LUO_ABI_COMPATIBLE LUO_COMPAT_BASE "-" KHO_BLOCK_ABI_COMPATIBLE
>
> That's clever :-)
>
> [...]
> > int luo_session_serialize(void)
> > {
> > struct luo_session_header *sh = &luo_session_global.outgoing;
> > struct luo_session *session;
> > - int i = 0;
> > + struct kho_block_it it;
> > int err;
> >
> > down_write(&luo_session_serialize_rwsem);
> > down_write(&sh->rwsem);
> > *sh->sessions_pa = 0;
> >
> > + kho_block_it_init(&it, &sh->block_set);
> > +
> > list_for_each_entry(session, &sh->list, list) {
> > - err = luo_session_freeze_one(session, &sh->ser[i]);
> > - if (err)
> > + struct luo_session_ser *ser = kho_block_it_next(&it);
> > +
> > + if (!ser) {
> > + err = -ENOSPC;
> > goto err_undo;
> > + }
> >
> > - strscpy(sh->ser[i].name, session->name,
> > - sizeof(sh->ser[i].name));
> > - i++;
> > - }
> > + err = luo_session_freeze_one(session, ser);
> > + if (err) {
> > + kho_block_it_prev(&it);
> > + goto err_undo;
> > + }
> >
> > - if (sh->header_ser && sh->count > 0) {
> > - sh->header_ser->count = sh->count;
> > - *sh->sessions_pa = virt_to_phys(sh->header_ser);
> > + strscpy(ser->name, session->name, sizeof(ser->name));
> > }
> > +
> > + kho_block_it_finalize(&it);
> > +
> > + if (sh->sessions_pa && sh->count > 0)
>
> Nit: Why check for sh->sessions_pa? It can never be NULL.
Good point, I will remove it.
>
> Other than this,
>
> Reviewed-by: Pratyush Yadav (Google) <pratyush@kernel.org>
>
> > + *sh->sessions_pa = sh->block_set.head_pa;
> > up_write(&sh->rwsem);
> >
> > return 0;
> >
> > err_undo:
> > list_for_each_entry_continue_reverse(session, &sh->list, list) {
> > - i--;
> > - luo_session_unfreeze_one(session, &sh->ser[i]);
> > - memset(sh->ser[i].name, 0, sizeof(sh->ser[i].name));
> > + struct luo_session_ser *ser = kho_block_it_prev(&it);
> > +
> > + luo_session_unfreeze_one(session, ser);
> > + memset(ser->name, 0, sizeof(ser->name));
> > }
> > up_write(&sh->rwsem);
> > up_write(&luo_session_serialize_rwsem);
>
> --
> Regards,
> Pratyush Yadav
next prev parent reply other threads:[~2026-06-01 14:44 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-30 22:19 [PATCH v4 00/13] liveupdate: Remove limits on sessions and files Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 01/13] liveupdate: change file_set->count type to u64 for type safety Pasha Tatashin
2026-05-31 13:35 ` Pasha Tatashin
2026-06-01 12:08 ` Pratyush Yadav
2026-06-02 8:13 ` Mike Rapoport
2026-05-30 22:19 ` [PATCH v4 02/13] liveupdate: avoid mixing cleanup guards with goto in luo_session_retrieve_fd Pasha Tatashin
2026-05-31 12:52 ` Pasha Tatashin
2026-06-01 12:15 ` Pratyush Yadav
2026-06-02 8:13 ` Mike Rapoport
2026-06-03 3:10 ` Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 03/13] liveupdate: centralize state management into struct luo_ser Pasha Tatashin
2026-06-01 12:19 ` Pratyush Yadav
2026-06-02 8:13 ` Mike Rapoport
2026-06-03 2:57 ` Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 04/13] liveupdate: register luo_ser as KHO subtree Pasha Tatashin
2026-05-31 13:44 ` Pasha Tatashin
2026-06-01 12:39 ` Pratyush Yadav
2026-06-01 13:50 ` Pasha Tatashin
2026-06-01 14:27 ` Pratyush Yadav
2026-05-30 22:19 ` [PATCH v4 05/13] liveupdate: Extract luo_file_deserialize_one helper Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 06/13] liveupdate: Extract luo_session_deserialize_one helper Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 07/13] kho: add support for linked-block serialization Pasha Tatashin
2026-06-01 13:38 ` Pratyush Yadav
2026-06-01 14:37 ` Pasha Tatashin
2026-06-02 16:43 ` Pratyush Yadav
2026-06-03 2:44 ` Pasha Tatashin
2026-06-02 8:13 ` Mike Rapoport
2026-06-02 9:04 ` Mike Rapoport
2026-06-03 2:21 ` Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 08/13] liveupdate: defer session block allocation and PA setting Pasha Tatashin
2026-06-01 13:47 ` Pratyush Yadav
2026-06-02 8:13 ` Mike Rapoport
2026-06-03 2:50 ` Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 09/13] liveupdate: Remove limit on the number of sessions Pasha Tatashin
2026-06-01 14:03 ` Pratyush Yadav
2026-06-01 14:44 ` Pasha Tatashin [this message]
2026-05-30 22:19 ` [PATCH v4 10/13] liveupdate: Remove limit on the number of files per session Pasha Tatashin
2026-06-01 14:16 ` Pratyush Yadav
2026-06-01 14:40 ` Pasha Tatashin
2026-05-30 22:19 ` [PATCH v4 11/13] selftests/liveupdate: Test session and file limit removal Pasha Tatashin
2026-06-01 14:17 ` Pratyush Yadav
2026-05-30 22:19 ` [PATCH v4 12/13] selftests/liveupdate: Add stress-sessions kexec test Pasha Tatashin
2026-06-01 14:19 ` Pratyush Yadav
2026-05-30 22:19 ` [PATCH v4 13/13] selftests/liveupdate: Add stress-files " Pasha Tatashin
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=ah2ardT1UjymdMqd@google.com \
--to=pasha.tatashin@soleen.com \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=dmatlack@google.com \
--cc=graf@amazon.com \
--cc=kexec@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pratyush@kernel.org \
--cc=rppt@kernel.org \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.