From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: zlang@redhat.com, fstests@vger.kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 15/34] check: run tests in a private pid/mount namespace
Date: Wed, 5 Feb 2025 10:19:59 -0800 [thread overview]
Message-ID: <20250205181959.GL21799@frogsfrogsfrogs> (raw)
In-Reply-To: <20250205180048.GH21799@frogsfrogsfrogs>
On Wed, Feb 05, 2025 at 10:00:48AM -0800, Darrick J. Wong wrote:
> On Wed, Feb 05, 2025 at 11:37:00AM +1100, Dave Chinner wrote:
> > On Tue, Feb 04, 2025 at 01:26:13PM -0800, Darrick J. Wong wrote:
> > > From: Darrick J. Wong <djwong@kernel.org>
> > >
> > > As mentioned in the previous patch, trying to isolate processes from
> > > separate test instances through the use of distinct Unix process
> > > sessions is annoying due to the many complications with signal handling.
> > >
> > > Instead, we could just use nsexec to run the test program with a private
> > > pid namespace so that each test instance can only see its own processes;
> > > and private mount namespace so that tests writing to /tmp cannot clobber
> > > other tests or the stuff running on the main system.
> > >
> > > However, it's not guaranteed that a particular kernel has pid and mount
> > > namespaces enabled. Mount (2.4.19) and pid (2.6.24) namespaces have
> > > been around for a long time, but there's no hard requirement for the
> > > latter to be enabled in the kernel. Therefore, this bugfix slips
> > > namespace support in alongside the session id thing.
> > >
> > > Declaring CONFIG_PID_NS=n a deprecated configuration and removing
> > > support should be a separate conversation, not something that I have to
> > > do in a bug fix to get mainline QA back up.
> > >
> > > Cc: <fstests@vger.kernel.org> # v2024.12.08
> > > Fixes: 8973af00ec212f ("fstests: cleanup fsstress process management")
> > > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > > ---
> > > check | 34 +++++++++++++++++++++++-----------
> > > common/rc | 12 ++++++++++--
> > > src/nsexec.c | 18 +++++++++++++++---
> > > tests/generic/504 | 15 +++++++++++++--
> > > tools/run_seq_pidns | 28 ++++++++++++++++++++++++++++
> > > 5 files changed, 89 insertions(+), 18 deletions(-)
> > > create mode 100755 tools/run_seq_pidns
> >
> > Same question as for session ids - is this all really necessary (or
> > desired) if check-parallel executes check in it's own private PID
> > namespace?
Forgot to respond to this question --
Because check-parallel runs (will run?) each child ./check instance in a
private namepsace, each of those instances will be isolated from the
others. So no, it's probably not absolutely necessary.
However, there are a couple of reasons to let it happen: (a) the private
ns that ./check creates in _run_seq() isolates the actual test code from
its parent ./check process; and (b) the process started by nsexec is
considered to be the "init" process for that namespace, so when it dies,
the kernel will kill -9 all other processes in that namespace, so we
won't have any stray fsstress processes that bleed into the next test.
--D
> > If so, then the code is fine apart from the same nit about
> > tools/run_seq_pidns - call it run_pidns because this helper will
> > also be used by check-parallel to run check in it's own private
> > mount and PID namespaces...
>
> I prefer to name it tools/run_privatens since it creates more than just
> a pid namespace. At some point we might even decide to privatize more
> namespaces (e.g. do we want a private network namespace for nfs?) and I
> don't want this to become lsfmmbpfbbq'd, as it were.
>
> > > diff --git a/tests/generic/504 b/tests/generic/504
> > > index 271c040e7b842a..96f18a0bbc7ba2 100755
> > > --- a/tests/generic/504
> > > +++ b/tests/generic/504
> > > @@ -18,7 +18,7 @@ _cleanup()
> > > {
> > > exec {test_fd}<&-
> > > cd /
> > > - rm -f $tmp.*
> > > + rm -r -f $tmp.*
> > > }
> > >
> > > # Import common functions.
> > > @@ -35,13 +35,24 @@ echo inode $tf_inode >> $seqres.full
> > >
> > > # Create new fd by exec
> > > exec {test_fd}> $testfile
> > > -# flock locks the fd then exits, we should see the lock info even the owner is dead
> > > +# flock locks the fd then exits, we should see the lock info even the owner is
> > > +# dead. If we're using pid namespace isolation we have to move /proc so that
> > > +# we can access the /proc/locks from the init_pid_ns.
> > > +if [ "$FSTESTS_ISOL" = "privatens" ]; then
> > > + move_proc="$tmp.procdir"
> > > + mkdir -p "$move_proc"
> > > + mount --move /proc "$move_proc"
> > > +fi
> > > flock -x $test_fd
> > > cat /proc/locks >> $seqres.full
> > >
> > > # Checking
> > > grep -q ":$tf_inode " /proc/locks || echo "lock info not found"
> > >
> > > +if [ -n "$move_proc" ]; then
> > > + mount --move "$move_proc" /proc
> > > +fi
> > > +
> > > # success, all done
> > > status=0
> > > echo "Silence is golden"
> >
> > Urk. That explains the failure I've noticed but not had time to
> > debug from check-parallel when using a private pidns. Do you know
> > why /proc/locks in the overlaid mount does not show the locks taken
> > from within that namespace? Is that a bug in the namespace/lock
> > code?
>
> I /think/ this happens because the code in fs/locks.c records the pid of
> "flock -x $test_fd" as the owner of the lock. But then flock exits, so
> that pid is no longer recorded in the pid_namespace and this code in
> locks_translate_pid:
>
> pid = find_pid_ns(fl->flc_pid, &init_pid_ns);
> vnr = pid_nr_ns(pid, ns);
>
> returns with vnr == 0, which causes locks_show to skip the lock.
> However, the underlying /proc is associated with init_pid_ns, so
> locks_translate_pid always returns a nonzero pid. Unfortunately, that
> means we can't have tools/run_privatens unmount the /proc it inherits
> before mounting the pidns-specific /proc.
>
> I'll note this in the commit message.
>
> > Regardless, the code looks ok so with the helper renamed:
> >
> > Reviewed-by: Dave Chinner <dchinner@redhat.com>
>
> Thanks!
>
> --D
>
> > --
> > Dave Chinner
> > david@fromorbit.com
> >
>
next prev parent reply other threads:[~2025-02-05 18:19 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-04 21:22 [PATCHSET v2] fstests: random fixes for v2025.02.02 Darrick J. Wong
2025-02-04 21:22 ` [PATCH 01/34] generic/476: fix fsstress process management Darrick J. Wong
2025-02-04 21:22 ` [PATCH 02/34] metadump: make non-local function variables more obvious Darrick J. Wong
2025-02-04 21:23 ` [PATCH 03/34] metadump: fix cleanup for v1 metadump testing Darrick J. Wong
2025-02-04 21:23 ` [PATCH 04/34] generic/019: don't fail if fio crashes while shutting down Darrick J. Wong
2025-02-04 21:23 ` [PATCH 05/34] fuzzy: do not set _FSSTRESS_PID when exercising fsx Darrick J. Wong
2025-02-04 21:23 ` [PATCH 06/34] common/rc: revert recursive unmount in _clear_mount_stack Darrick J. Wong
2025-02-05 0:07 ` Dave Chinner
2025-02-04 21:24 ` [PATCH 07/34] common/dump: don't replace pids arbitrarily Darrick J. Wong
2025-02-05 0:09 ` Dave Chinner
2025-02-04 21:24 ` [PATCH 08/34] common/populate: correct the parent pointer name creation formulae Darrick J. Wong
2025-02-04 21:24 ` [PATCH 09/34] generic/759,760: fix MADV_COLLAPSE detection and inclusion Darrick J. Wong
2025-02-04 21:24 ` [PATCH 10/34] generic/759,760: skip test if we can't set up a hugepage for IO Darrick J. Wong
2025-02-05 18:06 ` Darrick J. Wong
2025-02-04 21:25 ` [PATCH 11/34] common/rc: create a wrapper for the su command Darrick J. Wong
2025-02-05 0:14 ` Dave Chinner
2025-02-04 21:25 ` [PATCH 12/34] fuzzy: kill subprocesses with SIGPIPE, not SIGINT Darrick J. Wong
2025-02-05 0:16 ` Dave Chinner
2025-02-05 17:38 ` Darrick J. Wong
2025-02-04 21:25 ` [PATCH 13/34] common/rc: hoist pkill to a helper function Darrick J. Wong
2025-02-05 0:17 ` Dave Chinner
2025-02-04 21:25 ` [PATCH 14/34] common: fix pkill by running test program in a separate session Darrick J. Wong
2025-02-05 0:23 ` Dave Chinner
2025-02-05 17:43 ` Darrick J. Wong
2025-02-04 21:26 ` [PATCH 15/34] check: run tests in a private pid/mount namespace Darrick J. Wong
2025-02-05 0:37 ` Dave Chinner
2025-02-05 18:00 ` Darrick J. Wong
2025-02-05 18:19 ` Darrick J. Wong [this message]
2025-02-05 21:15 ` Dave Chinner
2025-02-05 21:25 ` Darrick J. Wong
2025-02-05 21:13 ` Dave Chinner
2025-02-04 21:26 ` [PATCH 16/34] check: deprecate using process sessions to isolate test instances Darrick J. Wong
2025-02-05 0:38 ` Dave Chinner
2025-02-04 21:26 ` [PATCH 17/34] common/rc: don't copy fsstress to $TEST_DIR Darrick J. Wong
2025-02-04 21:27 ` [PATCH 18/34] unmount: resume logging of stdout and stderr for filtering Darrick J. Wong
2025-02-04 21:27 ` [PATCH 19/34] mkfs: don't hardcode log size Darrick J. Wong
2025-02-05 0:40 ` Dave Chinner
2025-02-04 21:27 ` [PATCH 20/34] common/rc: return mount_ret in _try_scratch_mount Darrick J. Wong
2025-02-05 0:42 ` Dave Chinner
2025-02-05 18:03 ` Darrick J. Wong
2025-02-04 21:27 ` [PATCH 21/34] preamble: fix missing _kill_fsstress Darrick J. Wong
2025-02-04 21:28 ` [PATCH 22/34] generic/650: revert SOAK DURATION changes Darrick J. Wong
2025-02-05 0:43 ` Dave Chinner
2025-02-04 21:28 ` [PATCH 23/34] generic/032: fix pinned mount failure Darrick J. Wong
2025-02-04 21:28 ` [PATCH 24/34] fuzzy: stop __stress_scrub_fsx_loop if fsx fails Darrick J. Wong
2025-02-05 0:44 ` Dave Chinner
2025-02-04 21:28 ` [PATCH 25/34] fuzzy: don't use readarray for xfsfind output Darrick J. Wong
2025-02-04 21:29 ` [PATCH 26/34] fuzzy: always stop the scrub fsstress loop on error Darrick J. Wong
2025-02-05 0:45 ` Dave Chinner
2025-02-04 21:29 ` [PATCH 27/34] fuzzy: port fsx and fsstress loop to use --duration Darrick J. Wong
2025-02-05 0:50 ` Dave Chinner
2025-02-05 18:08 ` Darrick J. Wong
2025-02-04 21:29 ` [PATCH 28/34] fix _require_scratch_duperemove ordering Darrick J. Wong
2025-02-05 0:51 ` Dave Chinner
2025-02-04 21:29 ` [PATCH 29/34] fsstress: fix a memory leak Darrick J. Wong
2025-02-05 0:54 ` Dave Chinner
2025-02-04 21:30 ` [PATCH 30/34] fsx: fix leaked log file pointer Darrick J. Wong
2025-02-05 0:57 ` Dave Chinner
2025-02-04 21:30 ` [PATCH 31/34] misc: don't put nr_cpus into the fsstress -n argument Darrick J. Wong
2025-02-05 1:00 ` Dave Chinner
2025-02-04 21:30 ` [PATCH 32/34] common/config: add $here to FSSTRESS_PROG Darrick J. Wong
2025-02-05 1:00 ` Dave Chinner
2025-02-04 21:30 ` [PATCH 33/34] config: add FSX_PROG variable Darrick J. Wong
2025-02-05 1:04 ` Dave Chinner
2025-02-04 21:31 ` [PATCH 34/34] build: initialize stack variables to zero by default Darrick J. Wong
2025-02-05 1:05 ` Dave Chinner
2025-02-05 12:46 ` [PATCHSET v2] fstests: random fixes for v2025.02.02 Amir Goldstein
-- strict thread matches above, loose matches on Subject: below --
2025-02-12 3:30 [PATCHSET v3] " Darrick J. Wong
2025-02-12 3:34 ` [PATCH 15/34] check: run tests in a private pid/mount namespace Darrick J. Wong
2025-02-14 17:36 ` Zorro Lang
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=20250205181959.GL21799@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=fstests@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=zlang@redhat.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.