public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Cyril Hrubis <chrubis@suse.cz>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v4] listmount04.c: Update case support mnt_id_req.mnt_ns_fd
Date: Thu, 11 Dec 2025 12:51:11 +0100	[thread overview]
Message-ID: <20251211115111.GA63924@pevik> (raw)
In-Reply-To: <aTqN9fjQhDe4WU45@yuki.lan>

...
> > @@ -122,7 +136,17 @@ static void run(unsigned int n)
> >  		req->mnt_id = tc->mnt_id;
> >  		req->param = tc->param;
> >  		req->size = tc->size;
> > -		req->spare = tc->spare;
> > +#ifdef HAVE_STRUCT_MNT_ID_REQ_MNT_NS_FD
> > +		if ((tst_kvercmp(6, 18, 0)) >= 0)
> > +			req->mnt_ns_fd = tc->mnt_ns_fd;
> > +		else
> > +			tst_brk(TCONF, "Skipping test, kernel version should be >= 6.18");
> > +#else
> > +		if ((tst_kvercmp(6, 18, 0)) >= 0)
> > +			tst_brk(TCONF, "Skipping test, kernel version should be < 6.18");
> > +		else
> > +			req->spare = tc->spare;
> > +#endif

> I do not like this solution. Here we disable the test on newer kernel if
> it was compiled on older headers and vice versa.

Thanks for catching this up. I had a feeling something is wrong but was not sure
what.

> There are actually two problems to be solved and they are independent of
> each other and we shouldn't mix these two.

> First problem is that the mnt_ns_fd is not defined on older headers.
> That should be fixed by a fallback defintion in lapi/. The spare in
> lapi/mount.h in struct mnt_id_req should be renamed to mnt_ns_fd. And we
> should use that structure if mnt_id_req is not defined in system
> headers. I guess that we can use typedef for that and do something as:

OK, I did not realize that struct size is actually the same, only struct member
has changed so that we can happily pass that to any kernel version.

> struct mnt_id_req_fallback {
> 	uint32_t size;
> 	...
> };

> #if !defined(HAVE_STRUCT_MNT_ID_REQ) || !HAVE_STRUCT_MNT_ID_REQ_MNT_NS_FD
> typedef struct mnt_id_req_fallback mnt_id_req
> #else
> typedef struct mnd_id_req mnt_id_req
> #endif

> And then use mnt_id_req in test with the guarantee that the mnt_ns_fd is
> always there.

> The second problem is the expected errno. That should be just set once
> based on the kernel version in the test setup().

+1. I was also thinking about moving this to setup to prevent repeated detecting
but was not sure how to do it in elegant way as errno is in the struct. I guess
you mean just to store result of tst_kvercmp(6, 18, 0), but even that is not
enough. The cleanest way looks to me to add another struct member int exp_errno_old:

static bool old_kernel = true;

static struct tcase {
	...
	int exp_errno;
	int exp_errno_old;
}

static void setup()
{
	if ((tst_kvercmp(6, 18, 0)) < 0)
		old_kernel = false;
}

static void run(unsigned int n)
{
	...
	int exp_errno = (tc->exp_errno_old && old_kernel ? tc->exp_errno_old : tc->exp_errno);

	TST_EXP_FAIL(tst_syscall(__NR_listmount, req, tc->mnt_ids,
		tc->nr_mnt_ids, tc->flags), exp_errno,
		"%s", tc->msg);
	}


Also when looking in the code I'd personally factor out tc->req_usage to make it
obvious	it's not called by first tcases member.

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2025-12-11 11:51 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-27 14:39 [LTP] [PATCH v1] listmount04.c: Update case support mnt_id_req.mnt_ns_fd Wei Gao via ltp
2025-11-28  3:26 ` Li Wang via ltp
2025-11-28  7:37   ` Wei Gao via ltp
2025-12-08 11:51     ` Petr Vorel
2025-12-09  0:50       ` Wei Gao via ltp
2025-12-09  0:41 ` [LTP] [PATCH v2] " Wei Gao via ltp
2025-12-09 11:17   ` Petr Vorel
2025-12-09 15:53     ` Cyril Hrubis
2025-12-09 17:49       ` Petr Vorel
2025-12-10  6:19   ` [LTP] [PATCH v3] " Wei Gao via ltp
2025-12-10  8:38     ` Petr Vorel
2025-12-11  1:59     ` [LTP] [PATCH v4] " Wei Gao via ltp
2025-12-11  9:25       ` Cyril Hrubis
2025-12-11 11:51         ` Petr Vorel [this message]
2025-12-12 11:50       ` [LTP] [PATCH v5] " Wei Gao via ltp
2025-12-12 12:28         ` Petr Vorel
2025-12-12 12:56           ` Cyril Hrubis
2025-12-12 14:20             ` Petr Vorel
2025-12-12 15:11               ` Petr Vorel
2025-12-14  1:54                 ` Wei Gao via ltp
2025-12-15 15:22                   ` Petr Vorel
2025-12-14  2:15         ` [LTP] [PATCH v6] " Wei Gao via ltp
2025-12-15 15:20           ` Petr Vorel
2025-12-16  8:08           ` Li Wang via ltp
2025-12-17  9:32           ` Cyril Hrubis
2025-12-17 13:15             ` Petr Vorel

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=20251211115111.GA63924@pevik \
    --to=pvorel@suse.cz \
    --cc=chrubis@suse.cz \
    --cc=ltp@lists.linux.it \
    /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