diff options
Diffstat (limited to 'fs/gfs2/file.c')
| -rw-r--r-- | fs/gfs2/file.c | 18 | 
1 files changed, 6 insertions, 12 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 9aa6af13823..d1d791ef38d 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -373,11 +373,10 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)  	loff_t size;  	int ret; -	/* Wait if fs is frozen. This is racy so we check again later on -	 * and retry if the fs has been frozen after the page lock has -	 * been acquired -	 */ -	vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); +	sb_start_pagefault(inode->i_sb); + +	/* Update file times before taking page lock */ +	file_update_time(vma->vm_file);  	ret = gfs2_rs_alloc(ip);  	if (ret) @@ -462,14 +461,9 @@ out:  	gfs2_holder_uninit(&gh);  	if (ret == 0) {  		set_page_dirty(page); -		/* This check must be post dropping of transaction lock */ -		if (inode->i_sb->s_frozen == SB_UNFROZEN) { -			wait_on_page_writeback(page); -		} else { -			ret = -EAGAIN; -			unlock_page(page); -		} +		wait_on_page_writeback(page);  	} +	sb_end_pagefault(inode->i_sb);  	return block_page_mkwrite_return(ret);  }  |