From: Jamie Lokier <jamie@shareable.org>
To: Bryan Henderson <hbryan@us.ibm.com>
Cc: Lennart Sorensen <lsorense@csclub.uwaterloo.ca>,
Bodo Eggert <7eggert@gmx.de>, Diego Calleja <diegocg@gmail.com>,
Jan Kara <jack@suse.cz>, Jiri Kosina <jkosina@suse.cz>,
linux-fsdevel@vger.kernel.org,
Linux Kernel list <linux-kernel@vger.kernel.org>,
Michal Hocko <mhocko@suse.cz>, Meelis Roos <mroos@linux.ee>,
Pavel Machek <pavel@ucw.cz>
Subject: Re: file offset corruption on 32-bit machines?
Date: Wed, 16 Apr 2008 10:40:57 +0100 [thread overview]
Message-ID: <20080416094057.GB27898@shareable.org> (raw)
In-Reply-To: <OFCA827B78.F987C4A1-ON8825742C.00781E5A-8825742C.0079F2C9@us.ibm.com>
Bryan Henderson wrote:
> The easiest way to imagine a program not doing locking and being useful
> anyway (as long as the kernel is thread-safe) is to use the same arguments
> you use for the kernel doing it: there's a higher level user responsible
> for locking. The code in question doesn't guarantee that user writes all
> its stuff to the right place, but at least it guarantees that that user's
> lack of locking doesn't screw some other user of the file. It does that
> by ensuring it never seeks to a place the user doesn't own and that no two
> separate users ever access the file at the same time.
>
> I'd even like to accomodate the poor user trying to debug the broken
> locking in his application. He sees the file getting corrupted and
> immediately thinks, "what if my thread serialization isn't working right?"
> But he notices that the corruption isn't consistent with that hypothesis.
> He knows he was working with only the beginning and the end of the file
> and the corruption happened in the middle. So he wastes a week
> considering other hypotheses, including a kernel bug, until someone points
> out a paragraph in the lseek() man page that says contrary to all Unix
> convention, that particular function and system call is not thread-safe,
> and it doesn't necessarily seek to the place mentioned in its argument.
I think that argument is the strongest yet. Wasted debugging time due
to totally surprising and hardly justifiable kernel behaviour. Strace
/ GDB on the application shows a trace which doesn't relate at all to
the unexpected file changes.
There is also POSIX specification:
http://www.opengroup.org/onlinepubs/000095399/functions/xsh_chap02_09.html
"All functions defined by this volume of IEEE Std 1003.1-2001 shall
be thread-safe, except that the following functions need not be
thread-safe."
[List which does not include lseek(), therefore lseek() shall be
thread-safe. Same for read() and write().]
Docs for HP-UX and AIX say the same as POSIX about thread-safety.
-- Jamie
next prev parent reply other threads:[~2008-04-16 9:41 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <agh4d-6yc-35@gated-at.bofh.it>
[not found] ` <ah5tY-3lR-7@gated-at.bofh.it>
[not found] ` <ah5DA-3X9-9@gated-at.bofh.it>
[not found] ` <ah5X5-4tl-13@gated-at.bofh.it>
[not found] ` <ah66A-4Nk-7@gated-at.bofh.it>
[not found] ` <ah7vN-7Wz-9@gated-at.bofh.it>
2008-04-11 12:24 ` file offset corruption on 32-bit machines? Bodo Eggert
2008-04-11 12:24 ` Bodo Eggert
2008-04-11 13:55 ` Lennart Sorensen
2008-04-11 16:59 ` Bryan Henderson
2008-04-11 17:15 ` Lennart Sorensen
2008-04-11 21:29 ` Bryan Henderson
2008-04-12 8:48 ` Pavel Machek
2008-04-14 16:20 ` Jan Kara
2008-04-14 16:22 ` Lennart Sorensen
2008-04-14 16:53 ` Jan Kara
2008-04-14 16:54 ` Alan Cox
2008-04-14 18:34 ` Alexey Dobriyan
2008-04-14 17:06 ` Lennart Sorensen
2008-04-14 19:03 ` Jan Kara
2008-04-14 19:29 ` Lennart Sorensen
2008-04-14 19:42 ` Jan Kara
2008-04-14 19:45 ` Lennart Sorensen
2008-04-15 8:57 ` Pavel Machek
2008-04-15 15:32 ` Lennart Sorensen
2008-04-15 17:34 ` Pavel Machek
2008-04-15 18:24 ` Lennart Sorensen
2008-04-15 19:12 ` Pavel Machek
2008-04-15 19:49 ` Lennart Sorensen
2008-04-15 20:06 ` Pavel Machek
2008-04-15 20:28 ` Peter Zijlstra
2008-04-16 8:15 ` Pavel Machek
2008-04-16 8:20 ` Peter Zijlstra
2008-04-16 10:54 ` Alan Cox
2008-04-16 13:57 ` Lennart Sorensen
2008-04-15 20:29 ` Lennart Sorensen
2008-04-15 22:11 ` Bryan Henderson
2008-04-16 9:40 ` Jamie Lokier [this message]
2008-04-08 8:05 Meelis Roos
2008-04-10 13:55 ` Michal Hocko
2008-04-10 14:01 ` Jiri Kosina
2008-04-10 14:27 ` Jan Kara
2008-04-10 14:31 ` Jiri Kosina
2008-04-10 14:48 ` Matthew Wilcox
2008-04-10 15:22 ` Jan Kara
2008-04-10 15:30 ` Matthew Wilcox
2008-04-10 15:19 ` Jan Kara
2008-04-10 15:37 ` Michal Hocko
2008-04-10 15:56 ` Jan Kara
2008-04-10 16:03 ` Diego Calleja
2008-04-10 16:03 ` Diego Calleja
2008-04-10 16:15 ` Jan Kara
2008-04-11 19:26 ` Pavel Machek
2008-04-14 16:25 ` Jan Kara
2008-04-10 14:31 ` Michal Hocko
2008-04-10 14:35 ` Jiri Kosina
2008-04-10 14:11 ` Martin Mares
2008-04-10 15:12 ` Jan Kara
2008-04-10 15:14 ` Jamie Lokier
2008-04-10 15:21 ` Matthew Wilcox
2008-04-10 15:28 ` Jan Kara
2008-04-10 15:33 ` Andi Kleen
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=20080416094057.GB27898@shareable.org \
--to=jamie@shareable.org \
--cc=7eggert@gmx.de \
--cc=diegocg@gmail.com \
--cc=hbryan@us.ibm.com \
--cc=jack@suse.cz \
--cc=jkosina@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lsorense@csclub.uwaterloo.ca \
--cc=mhocko@suse.cz \
--cc=mroos@linux.ee \
--cc=pavel@ucw.cz \
/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.