All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: linux-kernel@vger.kernel.org, alan@lxorguk.ukuu.org.uk,
	andi@firstfloor.org, akpm@linux-foundation.org,
	earl_chew@agilent.com, Roland McGrath <roland@redhat.com>
Subject: Re: [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v6)
Date: Thu, 2 Jul 2009 13:36:10 +0200	[thread overview]
Message-ID: <20090702113610.GA3552@redhat.com> (raw)
In-Reply-To: <20090702102936.GA8028@hmsreliant.think-freely.org>

On 07/02, Neil Horman wrote:
>
> On Thu, Jul 02, 2009 at 10:29:14AM +0200, Oleg Nesterov wrote:
> > (add Roland)
> >
> > Neil, I guess we both are tired of this thread, but I still have questions ;)
> >
> > On 07/01, Neil Horman wrote:
> > >
> > > +static void wait_for_dump_helpers(struct file *file)
> > > +{
> > > +	struct pipe_inode_info *pipe;
> > > +
> > > +	pipe = file->f_path.dentry->d_inode->i_pipe;
> > > +
> > > +	pipe_lock(pipe);
> > > +	pipe->readers++;
> > > +	pipe->writers--;
> > > +
> > > +	while (pipe->readers > 1) {
> > > +		wake_up_interruptible_sync(&pipe->wait);
> > > +		kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
> > > +		pipe_wait(pipe);
> > > +	}
> > > +
> > > +	pipe->readers--;
> > > +	pipe->writers++;
> > > +	pipe_unlock(pipe);
> > > +
> > > +}
> >
> > OK, I think this is simple enough and should work.
> >
> > This is not exactly correct wrt signals, if we get TIF_SIGPENDING this
> > becomes a busy-wait loop.
> >
> > I'd suggest to do while (->readers && !signal_pending()), this is not
> > exactly right too because we have other problems with signals, but
> > this is another story.
> >
> > >  void do_coredump(long signr, int exit_code, struct pt_regs *regs)
> > >  {
> > >  	struct core_state core_state;
> > > @@ -1862,6 +1886,8 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
> > >  		current->signal->group_exit_code |= 0x80;
> > >
> > >  close_fail:
> > > +	if (ispipe && core_pipe_limit)
> > > +		wait_for_dump_helpers(file);
> >
> > Oh. I thought I misread the first version, but now I see I got it right.
> > And now I confused again.
> >
> > So, we only wait if core_pipe_limit != 0. Why?
> >
> > The previous version, v4, called wait_for_dump_helpers() unconditionally.
> > And this looks more right to me. Once again, even without wait_for_dump()
> > the coredumping process can't be reaped until core_pattern app reads all
> > data from the pipe.
> >
> > I won't insist. However, anybody else please take a look?
> >
> > core_pipe_limit != 0 limits the number of coredump-via-pipe in flight, OK.
> >
> > But, should wait_for_dump_helpers() depend on core_limit_pipe != 0?
> >
> I messed this up in v4 and am fixing it here.  If you read the documentation I
> added in patch 2, you can see that my intent with the core_pipe_limit sysctl was
> to designate 0 as a special value allowing unlimited parallel core_dumps in
> which we do not wait for any user space process completion

We do wait in any case. If core_dump app doesn't read the data from the pipe
->core_dump() can't complete. OK, unless all data fits into pipe buffers.

> (so that current
> system behavior can be maintained, which I think is desireable for those user
> space helpers who don't need access to a crashing processes meta data via proc.
> If you look above in the second patch where we do an atomic_inc_return, you'll
> see that we only honor the core_pipe_limit value if its non-zero.  This addional
> check restores the behavior I documented in that patch.

If you you look at my message you will see I am not arguing, but I am asking
others to ack this behaviour.

As for implementation, my only complaint is that wait_for_dump_helpers() lacks
signal_pending() check, this wasn't answered.

Oleg.


  reply	other threads:[~2009-07-02 11:39 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-22 17:28 [PATCH] exec: Make do_coredump more robust and safer when using pipes in core_pattern Neil Horman
2009-06-25 23:30 ` Andrew Morton
2009-06-26  1:49   ` Neil Horman
2009-06-26 10:48   ` Neil Horman
2009-06-26 16:20     ` Andrew Morton
2009-06-26 17:30       ` Neil Horman
2009-06-28 19:31       ` Andi Kleen
2009-06-28 20:52         ` Andrew Morton
2009-06-28 21:00           ` Andi Kleen
2009-06-28 21:18             ` Andrew Morton
2009-06-28 21:50               ` Eric W. Biederman
2009-06-28 21:35           ` Eric W. Biederman
2009-06-28 21:48             ` Andi Kleen
2009-06-28 22:06               ` Eric W. Biederman
2009-06-29  9:15                 ` Andi Kleen
2009-06-28 21:52             ` Andrew Morton
2009-06-26 18:00   ` Neil Horman
2009-06-26 18:02   ` [PATCH 1/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern: recursive dump detection Neil Horman
2009-06-26 16:59     ` Oleg Nesterov
2009-06-26 20:24       ` Neil Horman
2009-06-26 19:14         ` [PATCH 0/2] do_coredump: misc cleanups Oleg Nesterov
2009-06-26 19:14           ` [PATCH 1/2] do_coredump: factor out put_cred() calls Oleg Nesterov
2009-06-26 22:40             ` Roland McGrath
2009-06-26 20:33               ` Oleg Nesterov
2009-06-26 19:16           ` [PATCH 2/2] do_coredump: move !ispipe code into "else" branch Oleg Nesterov
2009-06-26 20:18             ` Q: do_coredump() && d_unhashed() Oleg Nesterov
2009-06-26 22:57           ` [PATCH 0/2] do_coredump: misc cleanups Neil Horman
2009-06-26 19:37     ` [PATCH 1/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern: recursive dump detection Andrew Morton
2009-06-26 20:17       ` Neil Horman
2009-06-26 18:03   ` [PATCH 2/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern: wait for core collectors Neil Horman
2009-06-26 16:48     ` Oleg Nesterov
2009-06-26 20:20       ` Neil Horman
2009-06-29  0:33   ` [PATCH 1/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v3) Neil Horman
2009-06-29  0:35   ` [PATCH 2/2] " Neil Horman
2009-06-28 22:24     ` Oleg Nesterov
2009-06-28 23:24       ` Oleg Nesterov
2009-06-29  2:36       ` Neil Horman
2009-06-28 23:32         ` Oleg Nesterov
2009-06-29 10:21           ` Neil Horman
2009-06-30  0:06             ` Oleg Nesterov
2009-06-29  0:32 ` [PATCH 0/2] " Neil Horman
2009-06-30 17:38 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v4) Neil Horman
2009-06-30 17:42   ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v4) Neil Horman
2009-06-30 17:43   ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v4) Neil Horman
2009-06-30 17:46   ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v4) Neil Horman
2009-07-01  5:52     ` Oleg Nesterov
2009-07-01 10:31       ` Neil Horman
2009-07-01 12:25         ` Oleg Nesterov
2009-07-01 14:12           ` Neil Horman
2009-07-01 14:48             ` Oleg Nesterov
2009-07-01 15:26 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v5) Neil Horman
2009-07-01 15:30   ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v5) Neil Horman
2009-07-01 15:34   ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v5) Neil Horman
2009-07-01 15:37   ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v5) Neil Horman
2009-07-01 16:06     ` Oleg Nesterov
2009-07-01 18:19       ` Neil Horman
2009-07-01 18:28 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v6) Neil Horman
2009-07-01 18:31   ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v6) Neil Horman
2009-07-01 18:32   ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v6) Neil Horman
2009-07-01 18:37   ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v6) Neil Horman
2009-07-02  8:29     ` Oleg Nesterov
2009-07-02 10:29       ` Neil Horman
2009-07-02 11:36         ` Oleg Nesterov [this message]
2009-07-02 14:44           ` Neil Horman
2009-07-02 15:37             ` Oleg Nesterov
2009-07-02 17:53               ` Neil Horman
2009-07-03 10:10                 ` Oleg Nesterov
2009-07-02 22:57 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v7) Neil Horman
2009-07-02 22:59   ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v7) Neil Horman
2009-07-02 23:00   ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v7) Neil Horman
2009-07-02 23:01   ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v7) Neil Horman
2009-07-03 10:16     ` Oleg Nesterov
2009-07-03 10:44 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v8) Neil Horman
2009-07-03 10:50   ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v8) Neil Horman
2009-07-07 16:14     ` Neil Horman
2009-07-03 10:51   ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v8) Neil Horman
2009-07-07 16:15     ` Neil Horman
2009-07-03 10:52   ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v8) Neil Horman
2009-07-07 16:19     ` Neil Horman
2009-07-07 16:35       ` Oleg Nesterov
2009-07-07 16:13   ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v8) Neil Horman
2009-07-20 15:49   ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v9) Neil Horman
2009-07-20 16:27     ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v9) Neil Horman
2009-07-20 16:29     ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v9) Neil Horman
2009-08-07 17:08       ` Randy Dunlap
2009-07-20 16:32     ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v9) Neil Horman
2009-07-29 15:13 ` [PATCH] exec: Make do_coredump more robust and safer when using pipes in core_pattern Scott James Remnant
2009-07-29 20:18   ` Neil Horman
2009-07-31 20:20     ` Scott James Remnant
2009-08-01 13:41       ` Neil Horman
2009-08-01 18:28         ` Scott James Remnant
2009-08-02  0:22           ` Neil Horman
2009-08-02 13:49             ` Scott James Remnant
2009-08-02 23:50               ` Neil Horman

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=20090702113610.GA3552@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=andi@firstfloor.org \
    --cc=earl_chew@agilent.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    --cc=roland@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.