diff options
Diffstat (limited to 'fs/jbd2/journal.c')
-rw-r--r-- | fs/jbd2/journal.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 19d74d86d99c..1df94fabe4eb 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c | |||
@@ -1237,7 +1237,7 @@ journal_t * jbd2_journal_init_inode (struct inode *inode) | |||
1237 | goto out_err; | 1237 | goto out_err; |
1238 | } | 1238 | } |
1239 | 1239 | ||
1240 | bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); | 1240 | bh = getblk_unmovable(journal->j_dev, blocknr, journal->j_blocksize); |
1241 | if (!bh) { | 1241 | if (!bh) { |
1242 | printk(KERN_ERR | 1242 | printk(KERN_ERR |
1243 | "%s: Cannot get buffer for journal superblock\n", | 1243 | "%s: Cannot get buffer for journal superblock\n", |
@@ -1522,14 +1522,6 @@ static int journal_get_superblock(journal_t *journal) | |||
1522 | goto out; | 1522 | goto out; |
1523 | } | 1523 | } |
1524 | 1524 | ||
1525 | if (jbd2_journal_has_csum_v2or3(journal) && | ||
1526 | JBD2_HAS_COMPAT_FEATURE(journal, JBD2_FEATURE_COMPAT_CHECKSUM)) { | ||
1527 | /* Can't have checksum v1 and v2 on at the same time! */ | ||
1528 | printk(KERN_ERR "JBD2: Can't enable checksumming v1 and v2 " | ||
1529 | "at the same time!\n"); | ||
1530 | goto out; | ||
1531 | } | ||
1532 | |||
1533 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V2) && | 1525 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V2) && |
1534 | JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V3)) { | 1526 | JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V3)) { |
1535 | /* Can't have checksum v2 and v3 at the same time! */ | 1527 | /* Can't have checksum v2 and v3 at the same time! */ |
@@ -1538,6 +1530,14 @@ static int journal_get_superblock(journal_t *journal) | |||
1538 | goto out; | 1530 | goto out; |
1539 | } | 1531 | } |
1540 | 1532 | ||
1533 | if (jbd2_journal_has_csum_v2or3(journal) && | ||
1534 | JBD2_HAS_COMPAT_FEATURE(journal, JBD2_FEATURE_COMPAT_CHECKSUM)) { | ||
1535 | /* Can't have checksum v1 and v2 on at the same time! */ | ||
1536 | printk(KERN_ERR "JBD2: Can't enable checksumming v1 and v2/3 " | ||
1537 | "at the same time!\n"); | ||
1538 | goto out; | ||
1539 | } | ||
1540 | |||
1541 | if (!jbd2_verify_csum_type(journal, sb)) { | 1541 | if (!jbd2_verify_csum_type(journal, sb)) { |
1542 | printk(KERN_ERR "JBD2: Unknown checksum type\n"); | 1542 | printk(KERN_ERR "JBD2: Unknown checksum type\n"); |
1543 | goto out; | 1543 | goto out; |
@@ -1853,13 +1853,12 @@ int jbd2_journal_set_features (journal_t *journal, unsigned long compat, | |||
1853 | journal->j_chksum_driver = NULL; | 1853 | journal->j_chksum_driver = NULL; |
1854 | return 0; | 1854 | return 0; |
1855 | } | 1855 | } |
1856 | } | ||
1857 | 1856 | ||
1858 | /* Precompute checksum seed for all metadata */ | 1857 | /* Precompute checksum seed for all metadata */ |
1859 | if (jbd2_journal_has_csum_v2or3(journal)) | ||
1860 | journal->j_csum_seed = jbd2_chksum(journal, ~0, | 1858 | journal->j_csum_seed = jbd2_chksum(journal, ~0, |
1861 | sb->s_uuid, | 1859 | sb->s_uuid, |
1862 | sizeof(sb->s_uuid)); | 1860 | sizeof(sb->s_uuid)); |
1861 | } | ||
1863 | } | 1862 | } |
1864 | 1863 | ||
1865 | /* If enabling v1 checksums, downgrade superblock */ | 1864 | /* If enabling v1 checksums, downgrade superblock */ |