ocfs2: fix inode leak
We weren't cleaning up our inode reference on error in ocfs2_reserve_local_alloc_bits(). Add a check for error return and iput() if need be. Move the code to set the alloc context inode info to the end of the function so we don't have any possibility of passing back a bad pointer. Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
parent
5c3c6bb770
commit
8fccfc829a
1 changed files with 4 additions and 3 deletions
|
@ -471,9 +471,6 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
|
|||
|
||||
mutex_lock(&local_alloc_inode->i_mutex);
|
||||
|
||||
ac->ac_inode = local_alloc_inode;
|
||||
ac->ac_which = OCFS2_AC_USE_LOCAL;
|
||||
|
||||
if (osb->local_alloc_state != OCFS2_LA_ENABLED) {
|
||||
status = -ENOSPC;
|
||||
goto bail;
|
||||
|
@ -511,10 +508,14 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
|
|||
}
|
||||
}
|
||||
|
||||
ac->ac_inode = local_alloc_inode;
|
||||
ac->ac_which = OCFS2_AC_USE_LOCAL;
|
||||
get_bh(osb->local_alloc_bh);
|
||||
ac->ac_bh = osb->local_alloc_bh;
|
||||
status = 0;
|
||||
bail:
|
||||
if (status < 0 && local_alloc_inode)
|
||||
iput(local_alloc_inode);
|
||||
|
||||
mlog_exit(status);
|
||||
return status;
|
||||
|
|
Loading…
Reference in a new issue