diff options
Diffstat (limited to 'fs/jbd2/revoke.c')
| -rw-r--r-- | fs/jbd2/revoke.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/jbd2/revoke.c b/fs/jbd2/revoke.c index c6cbaef2bda1..14214da80eb8 100644 --- a/fs/jbd2/revoke.c +++ b/fs/jbd2/revoke.c | |||
| @@ -577,7 +577,7 @@ static void write_one_revoke_record(journal_t *journal, | |||
| 577 | { | 577 | { |
| 578 | int csum_size = 0; | 578 | int csum_size = 0; |
| 579 | struct buffer_head *descriptor; | 579 | struct buffer_head *descriptor; |
| 580 | int offset; | 580 | int sz, offset; |
| 581 | journal_header_t *header; | 581 | journal_header_t *header; |
| 582 | 582 | ||
| 583 | /* If we are already aborting, this all becomes a noop. We | 583 | /* If we are already aborting, this all becomes a noop. We |
| @@ -594,9 +594,14 @@ static void write_one_revoke_record(journal_t *journal, | |||
| 594 | if (jbd2_journal_has_csum_v2or3(journal)) | 594 | if (jbd2_journal_has_csum_v2or3(journal)) |
| 595 | csum_size = sizeof(struct jbd2_journal_revoke_tail); | 595 | csum_size = sizeof(struct jbd2_journal_revoke_tail); |
| 596 | 596 | ||
| 597 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) | ||
| 598 | sz = 8; | ||
| 599 | else | ||
| 600 | sz = 4; | ||
| 601 | |||
| 597 | /* Make sure we have a descriptor with space left for the record */ | 602 | /* Make sure we have a descriptor with space left for the record */ |
| 598 | if (descriptor) { | 603 | if (descriptor) { |
| 599 | if (offset >= journal->j_blocksize - csum_size) { | 604 | if (offset + sz > journal->j_blocksize - csum_size) { |
| 600 | flush_descriptor(journal, descriptor, offset, write_op); | 605 | flush_descriptor(journal, descriptor, offset, write_op); |
| 601 | descriptor = NULL; | 606 | descriptor = NULL; |
| 602 | } | 607 | } |
| @@ -619,16 +624,13 @@ static void write_one_revoke_record(journal_t *journal, | |||
| 619 | *descriptorp = descriptor; | 624 | *descriptorp = descriptor; |
| 620 | } | 625 | } |
| 621 | 626 | ||
| 622 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) { | 627 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) |
| 623 | * ((__be64 *)(&descriptor->b_data[offset])) = | 628 | * ((__be64 *)(&descriptor->b_data[offset])) = |
| 624 | cpu_to_be64(record->blocknr); | 629 | cpu_to_be64(record->blocknr); |
| 625 | offset += 8; | 630 | else |
| 626 | |||
| 627 | } else { | ||
| 628 | * ((__be32 *)(&descriptor->b_data[offset])) = | 631 | * ((__be32 *)(&descriptor->b_data[offset])) = |
| 629 | cpu_to_be32(record->blocknr); | 632 | cpu_to_be32(record->blocknr); |
| 630 | offset += 4; | 633 | offset += sz; |
| 631 | } | ||
| 632 | 634 | ||
| 633 | *offsetp = offset; | 635 | *offsetp = offset; |
| 634 | } | 636 | } |
