diff options
Diffstat (limited to 'fs/jbd2/commit.c')
| -rw-r--r-- | fs/jbd2/commit.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 6fac74349856..b73e0215baa7 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c | |||
| @@ -97,7 +97,7 @@ static void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh) | |||
| 97 | struct commit_header *h; | 97 | struct commit_header *h; |
| 98 | __u32 csum; | 98 | __u32 csum; |
| 99 | 99 | ||
| 100 | if (!JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V2)) | 100 | if (!jbd2_journal_has_csum_v2or3(j)) |
| 101 | return; | 101 | return; |
| 102 | 102 | ||
| 103 | h = (struct commit_header *)(bh->b_data); | 103 | h = (struct commit_header *)(bh->b_data); |
| @@ -313,11 +313,11 @@ static __u32 jbd2_checksum_data(__u32 crc32_sum, struct buffer_head *bh) | |||
| 313 | return checksum; | 313 | return checksum; |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | static void write_tag_block(int tag_bytes, journal_block_tag_t *tag, | 316 | static void write_tag_block(journal_t *j, journal_block_tag_t *tag, |
| 317 | unsigned long long block) | 317 | unsigned long long block) |
| 318 | { | 318 | { |
| 319 | tag->t_blocknr = cpu_to_be32(block & (u32)~0); | 319 | tag->t_blocknr = cpu_to_be32(block & (u32)~0); |
| 320 | if (tag_bytes > JBD2_TAG_SIZE32) | 320 | if (JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_64BIT)) |
| 321 | tag->t_blocknr_high = cpu_to_be32((block >> 31) >> 1); | 321 | tag->t_blocknr_high = cpu_to_be32((block >> 31) >> 1); |
| 322 | } | 322 | } |
| 323 | 323 | ||
| @@ -327,7 +327,7 @@ static void jbd2_descr_block_csum_set(journal_t *j, | |||
| 327 | struct jbd2_journal_block_tail *tail; | 327 | struct jbd2_journal_block_tail *tail; |
| 328 | __u32 csum; | 328 | __u32 csum; |
| 329 | 329 | ||
| 330 | if (!JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V2)) | 330 | if (!jbd2_journal_has_csum_v2or3(j)) |
| 331 | return; | 331 | return; |
| 332 | 332 | ||
| 333 | tail = (struct jbd2_journal_block_tail *)(bh->b_data + j->j_blocksize - | 333 | tail = (struct jbd2_journal_block_tail *)(bh->b_data + j->j_blocksize - |
| @@ -340,12 +340,13 @@ static void jbd2_descr_block_csum_set(journal_t *j, | |||
| 340 | static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag, | 340 | static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag, |
| 341 | struct buffer_head *bh, __u32 sequence) | 341 | struct buffer_head *bh, __u32 sequence) |
| 342 | { | 342 | { |
| 343 | journal_block_tag3_t *tag3 = (journal_block_tag3_t *)tag; | ||
| 343 | struct page *page = bh->b_page; | 344 | struct page *page = bh->b_page; |
| 344 | __u8 *addr; | 345 | __u8 *addr; |
| 345 | __u32 csum32; | 346 | __u32 csum32; |
| 346 | __be32 seq; | 347 | __be32 seq; |
| 347 | 348 | ||
| 348 | if (!JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V2)) | 349 | if (!jbd2_journal_has_csum_v2or3(j)) |
| 349 | return; | 350 | return; |
| 350 | 351 | ||
| 351 | seq = cpu_to_be32(sequence); | 352 | seq = cpu_to_be32(sequence); |
| @@ -355,8 +356,10 @@ static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag, | |||
| 355 | bh->b_size); | 356 | bh->b_size); |
| 356 | kunmap_atomic(addr); | 357 | kunmap_atomic(addr); |
| 357 | 358 | ||
| 358 | /* We only have space to store the lower 16 bits of the crc32c. */ | 359 | if (JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V3)) |
| 359 | tag->t_checksum = cpu_to_be16(csum32); | 360 | tag3->t_checksum = cpu_to_be32(csum32); |
| 361 | else | ||
| 362 | tag->t_checksum = cpu_to_be16(csum32); | ||
| 360 | } | 363 | } |
| 361 | /* | 364 | /* |
| 362 | * jbd2_journal_commit_transaction | 365 | * jbd2_journal_commit_transaction |
| @@ -396,7 +399,7 @@ void jbd2_journal_commit_transaction(journal_t *journal) | |||
| 396 | LIST_HEAD(io_bufs); | 399 | LIST_HEAD(io_bufs); |
| 397 | LIST_HEAD(log_bufs); | 400 | LIST_HEAD(log_bufs); |
| 398 | 401 | ||
| 399 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V2)) | 402 | if (jbd2_journal_has_csum_v2or3(journal)) |
| 400 | csum_size = sizeof(struct jbd2_journal_block_tail); | 403 | csum_size = sizeof(struct jbd2_journal_block_tail); |
| 401 | 404 | ||
| 402 | /* | 405 | /* |
| @@ -690,7 +693,7 @@ void jbd2_journal_commit_transaction(journal_t *journal) | |||
| 690 | tag_flag |= JBD2_FLAG_SAME_UUID; | 693 | tag_flag |= JBD2_FLAG_SAME_UUID; |
| 691 | 694 | ||
| 692 | tag = (journal_block_tag_t *) tagp; | 695 | tag = (journal_block_tag_t *) tagp; |
| 693 | write_tag_block(tag_bytes, tag, jh2bh(jh)->b_blocknr); | 696 | write_tag_block(journal, tag, jh2bh(jh)->b_blocknr); |
| 694 | tag->t_flags = cpu_to_be16(tag_flag); | 697 | tag->t_flags = cpu_to_be16(tag_flag); |
| 695 | jbd2_block_tag_csum_set(journal, tag, wbuf[bufs], | 698 | jbd2_block_tag_csum_set(journal, tag, wbuf[bufs], |
| 696 | commit_transaction->t_tid); | 699 | commit_transaction->t_tid); |
