From: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
To: Jan Kara <jack@suse.cz>
Cc: LKML <linux-kernel@vger.kernel.org>,
linux-man@vger.kernel.org, linux-mm@kvack.org, mgorman@suse.de,
Jeff Moyer <jmoyer@redhat.com>
Subject: Re: [PATCH] Describe race of direct read and fork for unaligned buffers
Date: Tue, 1 May 2012 17:50:44 +1200 [thread overview]
Message-ID: <CAKgNAkixtqfppFdJAC9mnD5xCEFK1JZEHno1GhwmMHfoz6mGOQ@mail.gmail.com> (raw)
In-Reply-To: <1335778207-6511-1-git-send-email-jack@suse.cz>
Jan,
On Mon, Apr 30, 2012 at 9:30 PM, Jan Kara <jack@suse.cz> wrote:
> 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.
>
> CC: mgorman@suse.de
> CC: Jeff Moyer <jmoyer@redhat.com>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
>
> --- a/man2/open.2 2012-04-27 00:07:51.736883092 +0200
> +++ b/man2/open.2 2012-04-27 00:29:59.489892980 +0200
> @@ -769,7 +769,12 @@
> 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.
> +suffices. However, if the user buffer is not page aligned and 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 effectively read
> +data is corrupted.
> .LP
> The
> .B O_DIRECT
Thanks. I tweaked the patch slightly, and applied as below.
Cheers,
Michael
--- a/man2/open.2
+++ b/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
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Author of "The Linux Programming Interface"; http://man7.org/tlpi/
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2012-05-01 5:51 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-30 9:30 Jan Kara
2012-04-30 13:41 ` Jeff Moyer
2012-04-30 14:30 ` Mel Gorman
2012-05-01 5:50 ` Michael Kerrisk (man-pages) [this message]
2012-05-01 6:49 ` Nick Piggin
2012-05-01 14:31 ` KOSAKI Motohiro
2012-05-01 14:37 ` KOSAKI Motohiro
2012-05-01 15:11 ` Jeff Moyer
2012-05-01 15:34 ` KOSAKI Motohiro
2012-05-01 15:38 ` Jeff Moyer
2012-05-01 15:50 ` Nick Piggin
2012-05-01 23:51 ` Andrea Arcangeli
2012-05-02 8:17 ` Jan Kara
2012-05-02 9:09 ` Nick Piggin
2012-05-02 9:18 ` Jan Kara
2012-05-02 19:14 ` KOSAKI Motohiro
2012-05-02 19:23 ` Jan Kara
2012-05-02 19:25 ` KOSAKI Motohiro
2012-05-05 11:28 ` Michael Kerrisk (man-pages)
2012-05-05 15:29 ` KOSAKI Motohiro
2012-05-08 23:10 ` Nick Piggin
2012-05-09 5:35 ` Michael Kerrisk (man-pages)
2012-05-09 7:01 ` Nick Piggin
2012-05-09 7:18 ` Michael Kerrisk (man-pages)
2012-05-10 15:00 ` Jan Kara
2012-05-01 16:15 ` KOSAKI Motohiro
2012-05-01 17:56 ` Michael Kerrisk (man-pages)
2012-05-02 0:34 ` Nick Piggin
2012-05-02 3:04 ` Hugh Dickins
2012-05-02 3:10 ` Nick Piggin
2012-05-02 9:20 ` Jan Kara
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=CAKgNAkixtqfppFdJAC9mnD5xCEFK1JZEHno1GhwmMHfoz6mGOQ@mail.gmail.com \
--to=mtk.manpages@gmail.com \
--cc=jack@suse.cz \
--cc=jmoyer@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-man@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
/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