From: Oleg Nesterov <oleg@redhat.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Vitaly Mayatskikh <v.mayatskih@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Roland McGrath <roland@redhat.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/5] Split wait_noreap_copyout()
Date: Thu, 21 May 2009 16:12:50 +0200 [thread overview]
Message-ID: <20090521141250.GC14149@redhat.com> (raw)
In-Reply-To: <20090520182118.GA10692@elte.hu>
On 05/20, Ingo Molnar wrote:
>
> * Vitaly Mayatskikh <v.mayatskih@gmail.com> wrote:
>
> > 2. Fix copy_wait_opts_to_user to old behaviour by something like:
> >
> > if (!retval && (infop || WNOWAIT)) {
> >
> > What's your opinion?
>
> I'd suggest a variant of 2: keep this large-ish patch an equivalent
> transformation - i.e. an impact: cleanup type of change.
>
> Then queue up a patch that removes this quirk.
Yes, this would be the best option.
The problem is, it is not trivial to keep the current behaviour and
make the patch which looks like a cleanup, not uglification.
copy_wait_opts_to_user() needs the new "called_from_wait_task_continued"
argument, and it should do
if (called_from_wait_task_continued && !wo->wo_info)
return -EFAULT;
Or we should add
if (!infop && WNOWAIT)
return -EFAULT;
to all callers except wait_task_continued().
Roland thinks that "-EFAULT -> success" change is acceptable, and I think
the same. So, to me the best option is just change the changelog of this
patch and that is all.
Or. We can make a trivial patch which adds the behavior change first:
Changelog: always accept the NULL infop, because it is not
possible to understand the current behaviour ;)
User-visible change! needs Acks!
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -1126,24 +1126,26 @@ static int eligible_child(struct wait_op
static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p,
pid_t pid, uid_t uid, int why, int status)
{
- struct siginfo __user *infop;
int retval = wo->wo_rusage
? getrusage(p, RUSAGE_BOTH, wo->wo_rusage) : 0;
-
put_task_struct(p);
- infop = wo->wo_info;
- if (!retval)
- retval = put_user(SIGCHLD, &infop->si_signo);
- if (!retval)
- retval = put_user(0, &infop->si_errno);
- if (!retval)
- retval = put_user((short)why, &infop->si_code);
- if (!retval)
- retval = put_user(pid, &infop->si_pid);
- if (!retval)
- retval = put_user(uid, &infop->si_uid);
- if (!retval)
- retval = put_user(status, &infop->si_status);
+
+ if (wo->wo_info) {
+ struct siginfo __user *infop = wo->wo_info;
+
+ if (!retval)
+ retval = put_user(SIGCHLD, &infop->si_signo);
+ if (!retval)
+ retval = put_user(0, &infop->si_errno);
+ if (!retval)
+ retval = put_user((short)why, &infop->si_code);
+ if (!retval)
+ retval = put_user(pid, &infop->si_pid);
+ if (!retval)
+ retval = put_user(uid, &infop->si_uid);
+ if (!retval)
+ retval = put_user(status, &infop->si_status);
+ }
if (!retval)
retval = pid;
return retval;
And then redo Vitaly's patches on top of this change.
What do you and Vitaly think?
Oleg.
next prev parent reply other threads:[~2009-05-21 14:18 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-11 13:25 [PATCH 0/5] wait_task_* cleanups V2 Vitaly Mayatskikh
2009-05-11 13:25 ` [PATCH 1/5] Split wait_noreap_copyout() Vitaly Mayatskikh
2009-05-11 23:45 ` Andrew Morton
2009-05-20 15:21 ` Vitaly Mayatskikh
2009-05-20 15:57 ` Oleg Nesterov
2009-05-20 20:29 ` Roland McGrath
2009-05-20 18:21 ` Ingo Molnar
2009-05-21 14:12 ` Oleg Nesterov [this message]
2009-05-21 14:35 ` Vitaly Mayatskikh
2009-06-09 15:14 ` Vitaly Mayatskikh
2009-05-11 13:25 ` [PATCH 2/5] Use copy_wait_opts_to_user() in wait_task_stopped() Vitaly Mayatskikh
2009-05-11 13:25 ` [PATCH 3/5] Use copy_wait_opts_to_user() in do_wait() Vitaly Mayatskikh
2009-06-15 16:39 ` Oleg Nesterov
2009-05-11 13:25 ` [PATCH 4/5] Use copy_wait_opts_to_user() in wait_task_zombie() Vitaly Mayatskikh
2009-06-15 16:43 ` Oleg Nesterov
2009-05-11 13:25 ` [PATCH 5/5] Use copy_wait_opts_to_user() in wait_task_continued() Vitaly Mayatskikh
2009-06-15 16:55 ` Oleg Nesterov
2009-06-15 17:13 ` Oleg Nesterov
2009-06-15 17:16 ` Andrew Morton
2009-05-12 3:19 ` [PATCH 0/5] wait_task_* cleanups V2 Roland McGrath
-- strict thread matches above, loose matches on Subject: below --
2009-05-11 10:12 [PATCH 0/5] wait_task_* cleanups Vitaly Mayatskikh
2009-05-11 10:12 ` [PATCH 1/5] Split wait_noreap_copyout() Vitaly Mayatskikh
2009-05-11 10:20 ` Ingo Molnar
2009-05-11 11:20 ` Vitaly Mayatskikh
2009-05-11 12:04 ` Christoph Hellwig
2009-05-11 12:17 ` Ingo Molnar
2009-05-11 20:47 ` Vitaly Mayatskikh
2009-05-11 21:04 ` Ingo Molnar
2009-05-11 12:17 ` Vitaly Mayatskikh
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=20090521141250.GC14149@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=roland@redhat.com \
--cc=v.mayatskih@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox