[Ocfs2-devel] [PATCH] ocfs2/mmap: return 0 in page_mkwrite to let VFS retry.

Sunil Mushran sunil.mushran at oracle.com
Mon Oct 6 10:15:45 PDT 2008


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 <tao.ma at oracle.com>
> ---
>  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;
>  	}
>  
>   




More information about the Ocfs2-devel mailing list