diff options
| -rw-r--r-- | fs/ocfs2/aops.c | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 98d36548153d..bbb4b3e5b4ff 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c @@ -1842,6 +1842,16 @@ out_commit:  	ocfs2_commit_trans(osb, handle);  out: +	/* +	 * The mmapped page won't be unlocked in ocfs2_free_write_ctxt(), +	 * even in case of error here like ENOSPC and ENOMEM. So, we need +	 * to unlock the target page manually to prevent deadlocks when +	 * retrying again on ENOSPC, or when returning non-VM_FAULT_LOCKED +	 * to VM code. +	 */ +	if (wc->w_target_locked) +		unlock_page(mmap_page); +  	ocfs2_free_write_ctxt(inode, wc);  	if (data_ac) { | 
