[LTP] [PATCH v5 1/3] lib: Add support option for .needs_cmds
Petr Vorel
pvorel@suse.cz
Wed Jan 7 09:05:45 CET 2026
> On Fri, Dec 12, 2025 at 12:16:18PM +0100, Petr Vorel wrote:
> > > Hi!
> > > > diff --git a/lib/tst_test.c b/lib/tst_test.c
> > > > index da5314c50..67553f65d 100644
> > > > --- a/lib/tst_test.c
> > > > +++ b/lib/tst_test.c
> > > > @@ -1365,6 +1365,19 @@ static const char *default_fs_type(void)
> > > > return tst_dev_fs_type();
> > > > }
> > > > +bool tst_cmd_present(const char *cmd)
> > > > +{
> > > > + struct tst_cmd *pcmd = tst_test->needs_cmds;
> > > > +
> > > > + while (pcmd->cmd) {
> > > > + if (!strcmp(pcmd->cmd, cmd))
> > > > + return pcmd->present;
> > > > +
> > > > + pcmd++;
> > > > + }
> > > > + return false;
> > > Once again, we should tst_brk(TBROK, "Unexpected command '%s'", cmd) here since we asked for
> > > something that we haven't checked for!
> > Good point. I'm sorry to overlook this in my review.
> > Also, strictly speaking tst_cmd_present() is only defined, not used. The commit
> > is about changing .needs_cmds from char array (string) to struct tst_cmd.
> > Therefore it could be in a separate commit. We don't have to be too strict, but
> > given how many tests needed to be adapted adding tst_cmd_present() is somehow
> > buried with other changes.
> Thanks all for detail feedback. Let's me give some explaination why skip
> tst_brk in above function:
> tst_cmd_present will be used in latest ioctl_loop01.c and it should not
> use tst_brk otherwise we will brk out of test in setup() too early.
> The new support needs_cmds.optional in current patch is used for support
> tst_cmd_present scenario in ioctl_loop01.c.
> Correct me if any mistake.
> ioctl_loop01.c code:
> static void setup(void)
> {
> parted_sup = tst_cmd_present("parted"); <=====
> .....
> if (parted_sup)
> SAFE_CMD(cmd_parted, NULL, NULL); <===
> sprintf(partscan_path, "/sys/block/loop%d/loop/partscan", dev_num);
> }
And also:
static struct tst_test test = {
...
.needs_cmds = (struct tst_cmd[]) {
{.cmd = "parted", .optional = 1},
{}
Therefore IMHO you are wrong.
+ while (pcmd->cmd) {
+ if (!strcmp(pcmd->cmd, cmd))
We always match this for programs which we checked via .needs_cmds (regardless
true or false return).
+ return pcmd->present;
+
+ pcmd++;
+ }
If we get here that means that we ask in tst_cmd_present("...") for program we
did not add .needs_cmds. That's why Cyril asked for tst_brk().
+ return false;
Kind regards,
Petr
> > Kind regards,
> > Petr
More information about the ltp
mailing list