staging: erofs: fix potential double iput in erofs_read_super()

Some error cases like failing from d_make_root() will
cause double iput because d_make_root() also does iput
in its error path.

Signed-off-by: Chengguang Xu <[email protected]>
Reviewed-by: Chao Yu <[email protected]>
Reviewed-by: Gao Xiang <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
Chengguang Xu authored and Greg Kroah-Hartman committed 2019-01-25 09:52:02 +01:00
1 parent 45a50ab1d6
commit 94832d9399
1 file changed
+3 -6
+3 -6
View File
@@ -421,13 +421,14 @@ static int erofs_read_super(struct super_block *sb,
errln("rootino(nid %llu) is not a directory(i_mode %o)",
ROOT_NID(sbi), inode->i_mode);
err = -EINVAL;
goto err_isdir;
iput(inode);
goto err_iget;
}
sb->s_root = d_make_root(inode);
if (sb->s_root == NULL) {
err = -ENOMEM;
goto err_makeroot;
goto err_iget;
}
/* save the device name to sbi */
@@ -453,10 +454,6 @@ static int erofs_read_super(struct super_block *sb,
*/
err_devname:
dput(sb->s_root);
err_makeroot:
err_isdir:
if (sb->s_root == NULL)
iput(inode);
err_iget:
#ifdef EROFS_FS_HAS_MANAGED_CACHE
iput(sbi->managed_cache);