mirror of https://github.com/mkerrisk/man-pages
open.2: Describe race of direct read and fork() for unaligned buffers
This is a long standing problem (or a surprising feature) in our implementation of get_user_pages() (used by direct IO). Since several attempts to fix it failed (e.g., http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-04/msg06542.html, or http://lkml.indiana.edu/hypermail/linux/kernel/0903.1/01498.html refused in http://comments.gmane.org/gmane.linux.kernel.mm/31569) and it's not completely clear whether we really want to fix it given the costs. Let's at least document it. Signed-off-by: Jan Kara <jack@suse.cz> Acked-by: Jeff Moyer <jmoyer@redhat.com> Acked-by: Mel Gorman <mgorman@suse.de> Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
9a830e6211
commit
04cd7f643d
11
man2/open.2
11
man2/open.2
|
@ -49,7 +49,7 @@
|
|||
.\" FIXME Linux 2.6.33 has O_DSYNC, and a hidden __O_SYNC.
|
||||
.\" FIXME: Linux 2.6.39 added O_PATH
|
||||
.\"
|
||||
.TH OPEN 2 2012-02-27 "Linux" "Linux Programmer's Manual"
|
||||
.TH OPEN 2 2012-05-01 "Linux" "Linux Programmer's Manual"
|
||||
.SH NAME
|
||||
open, creat \- open and possibly create a file or device
|
||||
.SH SYNOPSIS
|
||||
|
@ -768,8 +768,13 @@ operation in
|
|||
Under Linux 2.4, transfer sizes, and the alignment of the user buffer
|
||||
and the file offset must all be multiples of the logical block size
|
||||
of the file system.
|
||||
Under Linux 2.6, alignment to 512-byte boundaries
|
||||
suffices.
|
||||
Under Linux 2.6, alignment to 512-byte boundaries suffices.
|
||||
However, if the user buffer is not page-aligned and the direct read
|
||||
runs in parallel with a
|
||||
.BR fork (2)
|
||||
of the reader process, it may happen that the read data is split between
|
||||
pages owned by the original process and its child.
|
||||
Thus the read data is effectively corrupted.
|
||||
.LP
|
||||
The
|
||||
.B O_DIRECT
|
||||
|
|
Loading…
Reference in New Issue