[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <53188E50.70808@gmail.com>
Date: Thu, 06 Mar 2014 16:03:44 +0100
From: "Michael Kerrisk (man-pages)" <mtk.manpages@...il.com>
To: Linus Torvalds <torvalds@...ux-foundation.org>
CC: mtk.manpages@...il.com, lkml <linux-kernel@...r.kernel.org>,
Miklos Szeredi <miklos@...redi.hu>,
Theodore T'so <tytso@....edu>, Christoph Hellwig <hch@....de>,
Chris Mason <clm@...com>, Dave Chinner <david@...morbit.com>,
Linux-Fsdevel <linux-fsdevel@...r.kernel.org>,
Al Viro <viro@...iv.linux.org.uk>,
"J. Bruce Fields" <bfields@...i.umich.edu>,
Yongzhi Pan <panyongzhi@...il.com>
Subject: Re: Update of file offset on write() etc. is non-atomic with I/O
On 03/03/2014 06:36 PM, Linus Torvalds wrote:
> Ok, sorry for the long delay, I was distracted (and hoping that Al
> would come up with a patch).
>
> Anyway, attached is the patch I think we should do for this issue. It
> is fairly simple:
>
> - it adds a "f_pos_mutex" to the "struct file".
>
> - it adds a new FMODE_ATOMIC_POS flag to the file mode flags to mark
> things that need atomic f_pos updates
>
> - it makes the "struct fd" flags be two flags rather than one: the
> second flag is for "unlock f_pos_mutex when done"
>
> - it introduces "fd[get,put]_pos()" which gets the f_pos_mutex when required
>
> - it makes read/write/lseek use that.
>
> It's pretty damn straightforward, I think, and is minimally serializing.
>
> Al, comments? Yongzhi Pan, this is pretty much untested, but it's
> pretty simple and it does fix your test-case.
The original code (where Yongzhi Pan reported an issue) and
the multi_writer.c test code where both mine actually. Anyway,
I applied the patch to 3.14-rc5, and I (not withstanding the other
points raised by Al about the patch) I confirm that this patch makes
the problem that I'm seeing go away.
Thanks for looking at this, Linus.
Cheers,
Michael
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists