On Fri, Sep 30, 2022 at 09:42:52AM +0800, zhanchengbin wrote: > > > On 2022/9/29 19:28, Lukas Czerner wrote: > > Hi, > > > > indeed we'd like to avoid killing the instance that was not ran because > > of noexecute. Can you try the following patch? > > > > Thanks! > > -Lukas > > Yes, you're right, I think we can fix it in this way. > > diff --git a/misc/fsck.c b/misc/fsck.c > index 1f6ec7d9..91edbf17 100644 > --- a/misc/fsck.c > +++ b/misc/fsck.c > @@ -547,6 +547,8 @@ static int kill_all(int signum) > for (inst = instance_list; inst; inst = inst->next) { > if (inst->flags & FLAG_DONE) > continue; > + if (inst->pid == -1) > + continue; Yeah, that works as well although I find the "if (noexecute)" condition more obvious. We can do both. Also rather than checking for -1 we can check for <= 0 since anything other than real pid at this point is a bug. Feel free to send a proper patch. Thanks! -Lukas > kill(inst->pid, signum); > n++; > } > > > > > > diff --git a/misc/fsck.c b/misc/fsck.c > > index 1f6ec7d9..8fae7730 100644 > > --- a/misc/fsck.c > > +++ b/misc/fsck.c > > @@ -497,9 +497,10 @@ static int execute(const char *type, const char *device, const char *mntpt, > > } > > /* Fork and execute the correct program. */ > > - if (noexecute) > > + if (noexecute) { > > pid = -1; > > - else if ((pid = fork()) < 0) { > > + inst->flags |= FLAG_DONE; > > + } else if ((pid = fork()) < 0) { > > perror("fork"); > > free(inst); > > return errno; > > @@ -544,6 +545,9 @@ static int kill_all(int signum) > > struct fsck_instance *inst; > > int n = 0; > > + if (noexecute) > > + return 0; > > + > > for (inst = instance_list; inst; inst = inst->next) { > > if (inst->flags & FLAG_DONE) > > continue; > regards, > Zhan Chengbin >