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 | } |