mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>,
	Andrew Morton <akpm@osdl.org>,
	Dan Bonachea <bonachead@comcast.net>,
	linux-kernel@vger.kernel.org
Subject: Re: PROBLEM: pthread-safety bug in write(2) on Linux 2.6.x
Date: Thu, 13 Apr 2006 22:50:22 +0100	[thread overview]
Message-ID: <1144965022.12387.23.camel@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.64.0604130750240.14565@g5.osdl.org>

On Iau, 2006-04-13 at 08:01 -0700, Linus Torvalds wrote:
> That said, I wouldn't be 100% against it, especially under certain 
> circumstances. However, the circumstances when I think it might be 
> acceptable are fairly specific:
> 
>  - when we use f_pos (ie we'd synchronize write against write, but only 
>    per "struct file", not on an inode basis)
>  - only for files that are marked seekable with FMODE_LSEEK (thus avoiding 
>    the stream-like objects like pipes and sockets)
> 
> Under those two circumstances, I'd certainly be ok with it, and I think we 
> could argue that it is a "good thing". It would be a "f_pos" lock (so we 
> migt do it for reads too), not a "data lock".

The only serious case historically has been O_APPEND which does have
pretty precise semantics. Nowdays we also have pread/pwrite which have
pretty clear semantics and deal with threading. The O_APPEND case is
very important to get correct and 2.4 certainly did so.


Looking at the spec it says the following

"If the O_APPEND flag of the file status flags is set, the file offset
shall be set to the end of the file prior to each write and no
intervening file modification operation shall occur between changing the
file offset and the write operation."

This is what 2.4 took great paints to guarantee for file writes. Now in
actual fact no OS I know of implements this to the extreme (mmap) but
does for the other cases.

Outside of O_APPEND the specification says only that
- The write starts at the file position
- The file position is updated before the syscall returns

It makes no other guarantee I can see.


As such I belive that the O_APPEND case must be kept locked properly and
the non O_APPEND cases are already correctly handled by the kernel. That
seems to argue for f_pos serialization on O_APPEND only.

Alan









  parent reply	other threads:[~2006-04-13 21:41 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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
     [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
2006-04-27  9:06 Samuel Thibault
2006-04-27 15:23 ` Linus Torvalds

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=1144965022.12387.23.camel@localhost.localdomain \
    --to=alan@lxorguk.ukuu.org.uk \
    --cc=akpm@osdl.org \
    --cc=bonachead@comcast.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nickpiggin@yahoo.com.au \
    --cc=torvalds@osdl.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®