diff options
| -rw-r--r-- | fs/ocfs2/namei.c | 16 | 
1 files changed, 11 insertions, 5 deletions
| diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index b66e48855825..8ff035eabfd8 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c @@ -445,11 +445,6 @@ leave:  	ocfs2_free_dir_lookup_result(&lookup); -	if ((status < 0) && inode) { -		clear_nlink(inode); -		iput(inode); -	} -  	if (inode_ac)  		ocfs2_free_alloc_context(inode_ac); @@ -459,6 +454,17 @@ leave:  	if (meta_ac)  		ocfs2_free_alloc_context(meta_ac); +	/* +	 * We should call iput after the i_mutex of the bitmap been +	 * unlocked in ocfs2_free_alloc_context, or the +	 * ocfs2_delete_inode will mutex_lock again. +	 */ +	if ((status < 0) && inode) { +		OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_ORPHAN_DIR; +		clear_nlink(inode); +		iput(inode); +	} +  	mlog_exit(status);  	return status; | 
