ext2: Always brelse bh on failure in ext2_iget()

All but one bail out paths in ext2_iget() is releasing bh. Move the
releasing of bh into a common error handling code.

Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
Jan Kara 2019-06-19 18:29:45 +02:00
Родитель edb895d3bf
Коммит 936bbf3aea
1 изменённых файлов: 2 добавлений и 4 удалений

Просмотреть файл

@ -1400,7 +1400,7 @@ void ext2_set_file_ops(struct inode *inode)
struct inode *ext2_iget (struct super_block *sb, unsigned long ino) struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
{ {
struct ext2_inode_info *ei; struct ext2_inode_info *ei;
struct buffer_head * bh; struct buffer_head * bh = NULL;
struct ext2_inode *raw_inode; struct ext2_inode *raw_inode;
struct inode *inode; struct inode *inode;
long ret = -EIO; long ret = -EIO;
@ -1446,7 +1446,6 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
*/ */
if (inode->i_nlink == 0 && (inode->i_mode == 0 || ei->i_dtime)) { if (inode->i_nlink == 0 && (inode->i_mode == 0 || ei->i_dtime)) {
/* this inode is deleted */ /* this inode is deleted */
brelse (bh);
ret = -ESTALE; ret = -ESTALE;
goto bad_inode; goto bad_inode;
} }
@ -1463,7 +1462,6 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
!ext2_data_block_valid(EXT2_SB(sb), ei->i_file_acl, 1)) { !ext2_data_block_valid(EXT2_SB(sb), ei->i_file_acl, 1)) {
ext2_error(sb, "ext2_iget", "bad extended attribute block %u", ext2_error(sb, "ext2_iget", "bad extended attribute block %u",
ei->i_file_acl); ei->i_file_acl);
brelse(bh);
ret = -EFSCORRUPTED; ret = -EFSCORRUPTED;
goto bad_inode; goto bad_inode;
} }
@ -1473,7 +1471,6 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
else else
ei->i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl); ei->i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
if (i_size_read(inode) < 0) { if (i_size_read(inode) < 0) {
brelse(bh);
ret = -EFSCORRUPTED; ret = -EFSCORRUPTED;
goto bad_inode; goto bad_inode;
} }
@ -1527,6 +1524,7 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
return inode; return inode;
bad_inode: bad_inode:
brelse(bh);
iget_failed(inode); iget_failed(inode);
return ERR_PTR(ret); return ERR_PTR(ret);
} }