From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sunil Mushran Date: Mon, 06 Oct 2008 10:15:45 -0700 Subject: [Ocfs2-devel] [PATCH] ocfs2/mmap: return 0 in page_mkwrite to let VFS retry. In-Reply-To: <1223283595-4316-1-git-send-email-tao.ma@oracle.com> References: <1223283595-4316-1-git-send-email-tao.ma@oracle.com> Message-ID: <48EA47C1.5090407@oracle.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ocfs2-devel@oss.oracle.com Tao, Please can you attach this to the bugzilla. http://oss.oracle.com/bugzilla/show_bug.cgi?id=1019 Easier to track fixes. Thanks Sunil Tao Ma wrote: > In ocfs2_page_mkwrite, we return -EINVAL when we found the page mapping > isn't updated, and it will cause the user space program get SIGBUS and > exit. The reason is that during race writeable mmap, we will do > unmap_mapping_range in ocfs2_data_downconvert_worker. The good thing is > that if we reuturn 0 in page_mkwrite, VFS will retry fault and then > call page_mkwrite again, so it is safe to return 0 here. > > Signed-off-by: Tao Ma > --- > fs/ocfs2/mmap.c | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletions(-) > > diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c > index 3dc18d6..eea1d24 100644 > --- a/fs/ocfs2/mmap.c > +++ b/fs/ocfs2/mmap.c > @@ -113,7 +113,11 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh, > * ocfs2_write_begin_nolock(). > */ > if (!PageUptodate(page) || page->mapping != inode->i_mapping) { > - ret = -EINVAL; > + /* > + * the page has been umapped in ocfs2_data_downconvert_worker. > + * So return 0 here and let VFS retry. > + */ > + ret = 0; > goto out; > } > >