diff options
Diffstat (limited to 'fs/ocfs2/suballoc.c')
| -rw-r--r-- | fs/ocfs2/suballoc.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index ea47120a85ff..6ad3533940ba 100644 --- a/fs/ocfs2/suballoc.c +++ b/fs/ocfs2/suballoc.c @@ -1199,14 +1199,24 @@ retry:  			inode_unlock((*ac)->ac_inode);  			ret = ocfs2_try_to_free_truncate_log(osb, bits_wanted); -			if (ret == 1) +			if (ret == 1) { +				iput((*ac)->ac_inode); +				(*ac)->ac_inode = NULL;  				goto retry; +			}  			if (ret < 0)  				mlog_errno(ret);  			inode_lock((*ac)->ac_inode); -			ocfs2_inode_lock((*ac)->ac_inode, NULL, 1); +			ret = ocfs2_inode_lock((*ac)->ac_inode, NULL, 1); +			if (ret < 0) { +				mlog_errno(ret); +				inode_unlock((*ac)->ac_inode); +				iput((*ac)->ac_inode); +				(*ac)->ac_inode = NULL; +				goto bail; +			}  		}  		if (status < 0) {  			if (status != -ENOSPC) | 
