|
@@ -1125,10 +1125,8 @@ static journal_t *journal_init_common(struct block_device *bdev,
|
|
|
|
|
|
/* Set up a default-sized revoke table for the new mount. */
|
|
/* Set up a default-sized revoke table for the new mount. */
|
|
err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
|
|
err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
|
|
- if (err) {
|
|
|
|
- kfree(journal);
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
|
|
+ if (err)
|
|
|
|
+ goto err_cleanup;
|
|
|
|
|
|
spin_lock_init(&journal->j_history_lock);
|
|
spin_lock_init(&journal->j_history_lock);
|
|
|
|
|
|
@@ -1145,23 +1143,25 @@ static journal_t *journal_init_common(struct block_device *bdev,
|
|
journal->j_wbufsize = n;
|
|
journal->j_wbufsize = n;
|
|
journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *),
|
|
journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *),
|
|
GFP_KERNEL);
|
|
GFP_KERNEL);
|
|
- if (!journal->j_wbuf) {
|
|
|
|
- kfree(journal);
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
|
|
+ if (!journal->j_wbuf)
|
|
|
|
+ goto err_cleanup;
|
|
|
|
|
|
bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize);
|
|
bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize);
|
|
if (!bh) {
|
|
if (!bh) {
|
|
pr_err("%s: Cannot get buffer for journal superblock\n",
|
|
pr_err("%s: Cannot get buffer for journal superblock\n",
|
|
__func__);
|
|
__func__);
|
|
- kfree(journal->j_wbuf);
|
|
|
|
- kfree(journal);
|
|
|
|
- return NULL;
|
|
|
|
|
|
+ goto err_cleanup;
|
|
}
|
|
}
|
|
journal->j_sb_buffer = bh;
|
|
journal->j_sb_buffer = bh;
|
|
journal->j_superblock = (journal_superblock_t *)bh->b_data;
|
|
journal->j_superblock = (journal_superblock_t *)bh->b_data;
|
|
|
|
|
|
return journal;
|
|
return journal;
|
|
|
|
+
|
|
|
|
+err_cleanup:
|
|
|
|
+ kfree(journal->j_wbuf);
|
|
|
|
+ jbd2_journal_destroy_revoke(journal);
|
|
|
|
+ kfree(journal);
|
|
|
|
+ return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
/* jbd2_journal_init_dev and jbd2_journal_init_inode:
|
|
/* jbd2_journal_init_dev and jbd2_journal_init_inode:
|