ocfs2: iput inode alloc when failed locally
In ocfs2_info_handle_freeinode() and ocfs2_test_inode_bit() func, after calls ocfs2_get_system_file_inode() to get inode ref, if calls ocfs2_info_scan_inode_alloc() or ocfs2_inode_lock() failed, we should iput inode alloc to avoid leaking the inode. Signed-off-by: jiangyiwen <jiangyiwen@huawei.com> Reviewed-by: Joseph Qi <joseph.qi@huawei.com> Cc: Mark Fasheh <mfasheh@suse.de> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
da8ded405d
Коммит
7dc3e83901
|
@ -413,11 +413,12 @@ int ocfs2_info_handle_freeinode(struct inode *inode,
|
|||
}
|
||||
|
||||
status = ocfs2_info_scan_inode_alloc(osb, inode_alloc, blkno, oifi, i);
|
||||
if (status < 0)
|
||||
goto bail;
|
||||
|
||||
iput(inode_alloc);
|
||||
inode_alloc = NULL;
|
||||
|
||||
if (status < 0)
|
||||
goto bail;
|
||||
}
|
||||
|
||||
o2info_set_request_filled(&oifi->ifi_req);
|
||||
|
|
|
@ -2894,6 +2894,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
|
|||
status = ocfs2_inode_lock(inode_alloc_inode, &alloc_bh, 0);
|
||||
if (status < 0) {
|
||||
mutex_unlock(&inode_alloc_inode->i_mutex);
|
||||
iput(inode_alloc_inode);
|
||||
mlog(ML_ERROR, "lock on alloc inode on slot %u failed %d\n",
|
||||
(u32)suballoc_slot, status);
|
||||
goto bail;
|
||||
|
|
Загрузка…
Ссылка в новой задаче