All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pasha Tatashin <pasha.tatashin@soleen.com>
To: Pratyush Yadav <pratyush@kernel.org>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>,
	 Mike Rapoport <rppt@kernel.org>, Shuah Khan <shuah@kernel.org>,
	 Andrew Morton <akpm@linux-foundation.org>,
	Usama Arif <usama.arif@linux.dev>,
	linux-kernel@vger.kernel.org,  linux-kselftest@vger.kernel.org,
	linux-mm@kvack.org
Subject: Re: [PATCH v3 0/6] selftests/liveupdate: add memfd tests
Date: Tue, 28 Apr 2026 19:31:04 +0000	[thread overview]
Message-ID: <afEKfQ0GUNVJ76a1@plex> (raw)
In-Reply-To: <20260404102452.4091740-1-pratyush@kernel.org>

On 04-04 10:24, Pratyush Yadav wrote:
> From: "Pratyush Yadav (Google)" <pratyush@kernel.org>
> 
> Hi,
> 
> This series adds some tests for memfd preservation across a live update.
> Currently memfd is only tested indirectly via luo_kexec_simple or
> luo_multi_session. Add a dedicated test suite for it.
> 
> Patches 1 and 2 are preparatory, adding base framework and helpers, and
> the other patches each add a test. Some of the code is taken from the
> libluo patches [0] I sent a while ago.
> 
> [0] https://lore.kernel.org/linux-mm/20250723144649.1696299-33-pasha.tatashin@soleen.com/

Here are few observations that I noticed when I tried to run your tests:

1. The '-h' tells you nothing about --stage argument:

root@liveupdate-vm:~/liveupdate# ./luo_memfd -h
Usage: ./luo_memfd [-h|-l|-d] [-t|-T|-v|-V|-f|-F|-r name]
	-h       print help
	-l       list all tests
	-d       enable debug prints

	-t name  include test
	-T name  exclude test
	-v name  include variant
	-V name  exclude variant
	-f name  include fixture
	-F name  exclude fixture
	-r name  run specified test
	...

2. '-l' does not work after you run stage1, do you keep /dev/liveupdate 
open? That is not needed, we only need to keep session open.

root@liveupdate-vm:~/liveupdate# ./luo_memfd -l
1..0 # SKIP Failed to open /dev/liveupdate (Device or resource busy) device. Is LUO enabled?

3. Stage 1 has proper [STAGE 1] prefix, but no [STAGE 2] prefix for 
stage 2:
# Starting 4 tests from 1 test cases.
#  RUN           global.memfd_data ...
# [STAGE 1] Forking persistent child to hold sessions...
# [STAGE 1] Child PID: 245. Resources are pinned.
# [STAGE 1] You may now perform kexec reboot.
#            OK  global.memfd_data
ok 1 global.memfd_data
#  RUN           global.zero_memfd ...
# [STAGE 1] Forking persistent child to hold sessions...
# [STAGE 1] Child PID: 247. Resources are pinned.
# [STAGE 1] You may now perform kexec reboot.
#            OK  global.zero_memfd
ok 2 global.zero_memfd
#  RUN           global.preserved_ops ...
#            OK  global.preserved_ops
ok 3 global.preserved_ops
#  RUN           global.fallocate_memfd ...
# [STAGE 1] Forking persistent child to hold sessions...
# [STAGE 1] Child PID: 250. Resources are pinned.
# [STAGE 1] You may now perform kexec reboot.
#            OK  global.fallocate_memfd
ok 4 global.fallocate_memfd
# PASSED: 4 / 4 tests passed.
# Totals: pass:4 fail:0 xfail:0 xpass:0 skip:0 error:0

./do_kexec

root@liveupdate-vm:~/liveupdate# ./luo_memfd
TAP version 13
1..4
# Starting 4 tests from 1 test cases.
#  RUN           global.memfd_data ...
#            OK  global.memfd_data
ok 1 global.memfd_data
#  RUN           global.zero_memfd ...
#            OK  global.zero_memfd
ok 2 global.zero_memfd
#  RUN           global.preserved_ops ...
#      SKIP      test only expected to run on stage 1
#            OK  global.preserved_ops
ok 3 global.preserved_ops # SKIP test only expected to run on stage 1
#  RUN           global.fallocate_memfd ...
#            OK  global.fallocate_memfd
ok 4 global.fallocate_memfd
# PASSED: 4 / 4 tests passed.
# 1 skipped test(s) detected. Consider enabling relevant config options to improve coverage.
# Totals: pass:3 fail:0 xfail:0 xpass:0 skip:1 error:0

4. I also do not like that we now have duplicated stage parsing code in  
luo_test(), perhaps we should add our own  test_harness_run() variant 
that depends on stage, and use it in both current tests, and the new 
memfd tests.

Pasha

> 
> Changes in v3:
> - Retry on EINTR instead of giving up in read_size() and write_size().
> - Use O_TRUNC in save_test_data().
> - Return the value of write_size() directly in create_random_memfd(). No
>   need to check errno since write_size() already returns -errno.
> - Save errno before calling close() in create_random_memfd() to avoid
>   overwriting the value.
> - Use memcmp() instead of open-coding the comparison loop.
> - Return value of test_harness_run() from main().
> 
> Changes in v2:
> - Drop LIVEUPDATE_DEV since it isn't used.
> - Split luo_fd and stage declaration on separate lines.
> - Split all 2-stage tests into helper function for each test.
> - Fix wording and argument order when LUO_DEVICE fails to open.
> - Rename verify_fd_content() to verify_fd_content_read().
> - Advance buffer pointer in {read,write}_size().
> - Add a check to make sure current working directory is not on a tmpfs
>   mount. If so, skip the tests since saved data files will be lost.
> - Rename RANDOM_DATA_FILE and RANDOM_DATA_FILE_FALLOCATE to
>   MEMFD_DATA_FS_COPY and FALLOCATE_DATA_FS_COPY respectively. Also
>   update the file names to reflect this naming convention.
> - Collect R-bys.
> 
> Regards,
> Pratyush Yadav
> 
> Pratyush Yadav (Google) (6):
>   selftests/liveupdate: add framework for memfd tests
>   selftests/liveupdate: add helper functions for memfd tests
>   selftests/liveupdate: add test for memfd content preservation
>   selftests/liveupdate: add test for zero-size memfd preservation
>   selftests/liveupdate: add test for operations on a preserved memfd
>   selftests/liveupdate: add fallocate test for memfd
> 
>  tools/testing/selftests/liveupdate/Makefile   |   2 +
>  .../testing/selftests/liveupdate/luo_memfd.c  | 355 ++++++++++++++++++
>  .../selftests/liveupdate/luo_test_utils.c     | 191 +++++++++-
>  .../selftests/liveupdate/luo_test_utils.h     |  10 +
>  4 files changed, 557 insertions(+), 1 deletion(-)
>  create mode 100644 tools/testing/selftests/liveupdate/luo_memfd.c
> 
> 
> base-commit: 98ddd87f9704ef2fc837ec2ca38877c364d8dada
> -- 
> 2.53.0.1213.gd9a14994de-goog
> 

  parent reply	other threads:[~2026-04-28 19:31 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-04 10:24 [PATCH v3 0/6] selftests/liveupdate: add memfd tests Pratyush Yadav
2026-04-04 10:24 ` [PATCH v3 1/6] selftests/liveupdate: add framework for " Pratyush Yadav
2026-04-04 10:24 ` [PATCH v3 2/6] selftests/liveupdate: add helper functions " Pratyush Yadav
2026-04-04 17:53   ` Zhu Yanjun
2026-04-05  7:34     ` Pratyush Yadav
2026-04-05 16:30       ` Zhu Yanjun
2026-04-07 10:30         ` Pratyush Yadav
2026-04-04 10:24 ` [PATCH v3 3/6] selftests/liveupdate: add test for memfd content preservation Pratyush Yadav
2026-04-04 10:24 ` [PATCH v3 4/6] selftests/liveupdate: add test for zero-size memfd preservation Pratyush Yadav
2026-04-04 10:24 ` [PATCH v3 5/6] selftests/liveupdate: add test for operations on a preserved memfd Pratyush Yadav
2026-04-04 10:24 ` [PATCH v3 6/6] selftests/liveupdate: add fallocate test for memfd Pratyush Yadav
2026-04-28 19:31 ` Pasha Tatashin [this message]
2026-04-29 13:20   ` [PATCH v3 0/6] selftests/liveupdate: add memfd tests Pratyush Yadav
2026-05-01 19:08     ` Pasha Tatashin
2026-05-05 16:32       ` 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=afEKfQ0GUNVJ76a1@plex \
    --to=pasha.tatashin@soleen.com \
    --cc=akpm@linux-foundation.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=usama.arif@linux.dev \
    /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.