From: kaih@khms.westfalen.de (Kai Henningsen)
To: linux-kernel@vger.kernel.org
Subject: Re: PROBLEM: pthread-safety bug in write(2) on Linux 2.6.x
Date: 14 Apr 2006 11:14:00 +0200 [thread overview]
Message-ID: <9rqIJOPHw-B@khms.westfalen.de> (raw)
In-Reply-To: <616k2-6Xz-27@gated-at.bofh.it>
bonachead@comcast.net (Dan Bonachea) wrote on 13.04.06 in <616k2-6Xz-27@gated-at.bofh.it>:
> At 09:46 PM 4/12/2006, Andrew Morton wrote:
> >Locking for file.f_pos is generally file->f_dentry->d_inode->i_mutex. We
> >could use that if we were to restructure the code a lot. Or we could add a
> >new lock to `struct file'.
> >
> >Or we could do nothing, because a) the application is going to produce
> >inderterminate output anyway and b) because it only affects silly testcases
> >and not real-world apps.
> >
> >OK, there _might_ be a real-world case: threads appending logging
> >information to a flat file. Trivially workable-around with a userspace
> >lock, or by switching to stdio (same thing).
> >
> >Yes, really we should fix it. But it's not worth adding more overhead to
> >do so. So the fix would involve widespread (but simple) change, to draw
> >that f_pos update inside i_mutex.
>
> Hi Andrew - thanks for the detailed response.
>
> I don't know enough about the kernel implementation to comment on your
> proposed fixes.
>
> However, I should clarify that this problem definitely affects more than
> just "silly testcases", and the fact that a program generates
> non-deterministically ordered output does not necessarily make it erroneous,
> invalid or unuseful.
>
> This problem arose in the parallel runtime system for a scientific language
> compiler (nearly a million lines of code total - definitely a "real-world"
> program) - the example code is merely a pared-down demonstration of the
> problem. In parallel scientific computing, it's very common for many threads
> to be writing to stdout (usually for monitoring purposes) and it's expected
> and normal for output from separate threads to be arbitrarily interleaved,
> but it's *not* ok for output to be lost entirely. This is essentially
> equivalent to the real-world example you gave of many threads logging to a
> file.
>
> We've worked around the problem in Linux 2.6 by adding locking at user-level
> around our writes, as you suggest, although this of course penalizes our
> performance on kernels that already correctly implement the thread-safety
> required by the POSIX spec. In any case it seemed like a problem that we
> should report, to be good open-source citizens - especially given that it
> appears to be a regression with respect to the Linux 2.4 kernel. How you
> choose to handle the report is of course your decision.
So, considering the rest of the thread, shouldn't it be enough to simply
use O_APPEND for that use case - and, for that matter, isn't using
O_APPEND actually completely natural there, and isn't that (modulo the
process-thread difference) exactly what O_APPEND was invented for?
MfG Kai
next parent reply other threads:[~2006-04-14 17:20 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <60Z8f-4QA-25@gated-at.bofh.it>
[not found] ` <611Wl-u5-1@gated-at.bofh.it>
[not found] ` <616k2-6Xz-27@gated-at.bofh.it>
2006-04-14 9:14 ` Kai Henningsen [this message]
2006-04-27 9:06 Samuel Thibault
2006-04-27 15:23 ` Linus Torvalds
-- strict thread matches above, loose matches on Subject: below --
2006-04-13 1:45 Dan Bonachea
2006-04-13 2:10 ` Alistair John Strachan
2006-04-13 4:46 ` Andrew Morton
2006-04-13 5:33 ` Nick Piggin
2006-04-13 15:01 ` Linus Torvalds
2006-04-13 15:28 ` Linus Torvalds
2006-04-14 10:20 ` Nikita Danilov
2006-04-13 21:50 ` Alan Cox
2006-04-13 22:06 ` Dan Bonachea
2006-04-13 23:03 ` Linus Torvalds
2006-04-13 23:11 ` Alan Cox
2006-04-13 23:19 ` Linus Torvalds
2006-04-13 22:40 ` Linus Torvalds
2006-04-13 23:05 ` Alan Cox
2006-04-13 23:06 ` Linus Torvalds
2006-04-13 23:11 ` Linus Torvalds
2006-04-13 9:18 ` Dan Bonachea
2006-04-13 9:56 ` Andrew Morton
2006-04-13 10:28 ` Kyle Moffett
2006-04-13 14:14 ` Jan Engelhardt
2010-12-19 22:45 ` Jens Moser
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=9rqIJOPHw-B@khms.westfalen.de \
--to=kaih@khms.westfalen.de \
--cc=linux-kernel@vger.kernel.org \
/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
all inboxes | Powered by JetHome®