ext4_journal: fix error handling in jbd_get_fs
authorgkostka <kostka.grzegorz@gmail.com>
Wed, 19 Apr 2017 14:35:14 +0000 (16:35 +0200)
committergkostka <kostka.grzegorz@gmail.com>
Wed, 19 Apr 2017 14:35:14 +0000 (16:35 +0200)
src/ext4_journal.c

index aa3322b2a9295c0d26fb82437fa0639c410d9e92..fbdf23308aa5052134be703949b1aa57ead8b781 100644 (file)
@@ -458,25 +458,26 @@ int jbd_get_fs(struct ext4_fs *fs,
        rc = ext4_fs_get_inode_ref(fs,
                                   journal_ino,
                                   &jbd_fs->inode_ref);
-       if (rc != EOK) {
-               memset(jbd_fs, 0, sizeof(struct jbd_fs));
+       if (rc != EOK)
                return rc;
-       }
+
        rc = jbd_sb_read(jbd_fs, &jbd_fs->sb);
-       if (rc != EOK) {
-               memset(jbd_fs, 0, sizeof(struct jbd_fs));
-               ext4_fs_put_inode_ref(&jbd_fs->inode_ref);
-               return rc;
-       }
+       if (rc != EOK)
+               goto Error;
+
        if (!jbd_verify_sb(&jbd_fs->sb)) {
-               memset(jbd_fs, 0, sizeof(struct jbd_fs));
-               ext4_fs_put_inode_ref(&jbd_fs->inode_ref);
                rc = EIO;
+               goto Error;
        }
 
        if (rc == EOK)
                jbd_fs->bdev = fs->bdev;
 
+       return rc;
+Error:
+       ext4_fs_put_inode_ref(&jbd_fs->inode_ref);
+       memset(jbd_fs, 0, sizeof(struct jbd_fs));
+
        return rc;
 }