From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail137.messagelabs.com (mail137.messagelabs.com [216.82.249.19]) by kanga.kvack.org (Postfix) with ESMTP id F3B356B0012 for ; Thu, 19 May 2011 18:48:57 -0400 (EDT) Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by e38.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id p4JMemHv030281 for ; Thu, 19 May 2011 16:40:48 -0600 Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v9.1) with ESMTP id p4JMmqJM163824 for ; Thu, 19 May 2011 16:48:52 -0600 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p4JGmooL027109 for ; Thu, 19 May 2011 10:48:51 -0600 Subject: [PATCH 1/3] mm: Wait for writeback when grabbing pages to begin a write From: "Darrick J. Wong" Date: Thu, 19 May 2011 15:48:49 -0700 Message-ID: <20110519224849.28755.19733.stgit@elm3c44.beaverton.ibm.com> In-Reply-To: <20110519224841.28755.80650.stgit@elm3c44.beaverton.ibm.com> References: <20110519224841.28755.80650.stgit@elm3c44.beaverton.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Alexander Viro , "Darrick J. Wong" Cc: Jens Axboe , Theodore Tso , "Martin K. Petersen" , Jeff Layton , Dave Chinner , linux-kernel , Dave Hansen , Christoph Hellwig , linux-mm@kvack.org, Chris Mason , Joel Becker , linux-scsi , linux-fsdevel , Jan Kara , linux-ext4@vger.kernel.org, Mingming Cao When grabbing a page for a buffered IO write, the mm should wait for writeback on the page to complete so that the page does not become writable during the IO operation. This change is needed to provide page stability during writes for all filesystems. Signed-off-by: Darrick J. Wong --- mm/filemap.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index c641edf..fd0e7f2 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2288,7 +2288,7 @@ struct page *grab_cache_page_write_begin(struct address_space *mapping, repeat: page = find_lock_page(mapping, index); if (page) - return page; + goto found; page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask); if (!page) @@ -2301,6 +2301,8 @@ repeat: goto repeat; return NULL; } +found: + wait_on_page_writeback(page); return page; } EXPORT_SYMBOL(grab_cache_page_write_begin); -- 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: email@kvack.org