diff options
Diffstat (limited to 'fs/gfs2/glops.c')
| -rw-r--r-- | fs/gfs2/glops.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index db908f69713..f88dcd92501 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c @@ -192,8 +192,11 @@ static void inode_go_sync(struct gfs2_glock *gl)  	if (ip && !S_ISREG(ip->i_inode.i_mode))  		ip = NULL; -	if (ip && test_and_clear_bit(GIF_SW_PAGED, &ip->i_flags)) -		unmap_shared_mapping_range(ip->i_inode.i_mapping, 0, 0); +	if (ip) { +		if (test_and_clear_bit(GIF_SW_PAGED, &ip->i_flags)) +			unmap_shared_mapping_range(ip->i_inode.i_mapping, 0, 0); +		inode_dio_wait(&ip->i_inode); +	}  	if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags))  		return; @@ -410,6 +413,9 @@ static int inode_go_lock(struct gfs2_holder *gh)  			return error;  	} +	if (gh->gh_state != LM_ST_DEFERRED) +		inode_dio_wait(&ip->i_inode); +  	if ((ip->i_diskflags & GFS2_DIF_TRUNC_IN_PROG) &&  	    (gl->gl_state == LM_ST_EXCLUSIVE) &&  	    (gh->gh_state == LM_ST_EXCLUSIVE)) {  | 
