diff options
Diffstat (limited to 'e2fsck/revoke.c')
-rw-r--r-- | e2fsck/revoke.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/e2fsck/revoke.c b/e2fsck/revoke.c index b4c3f5f4..05430997 100644 --- a/e2fsck/revoke.c +++ b/e2fsck/revoke.c @@ -583,7 +583,7 @@ static void write_one_revoke_record(journal_t *journal, { int csum_size = 0; struct buffer_head *descriptor; - int offset; + int sz, offset; journal_header_t *header; /* If we are already aborting, this all becomes a noop. We @@ -600,9 +600,14 @@ static void write_one_revoke_record(journal_t *journal, if (journal_has_csum_v2or3(journal)) csum_size = sizeof(struct journal_revoke_tail); + if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) + sz = 8; + else + sz = 4; + /* Make sure we have a descriptor with space left for the record */ if (descriptor) { - if (offset >= journal->j_blocksize - csum_size) { + if (offset + sz > journal->j_blocksize - csum_size) { flush_descriptor(journal, descriptor, offset, write_op); descriptor = NULL; } @@ -625,16 +630,13 @@ static void write_one_revoke_record(journal_t *journal, *descriptorp = descriptor; } - if (JFS_HAS_INCOMPAT_FEATURE(journal, JFS_FEATURE_INCOMPAT_64BIT)) { - * ((__u64 *)(&descriptor->b_data[offset])) = - ext2fs_cpu_to_be64(record->blocknr); - offset += 8; - - } else { - * ((__u32 *)(&descriptor->b_data[offset])) = - ext2fs_cpu_to_be32(record->blocknr); - offset += 4; - } + if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) { + * ((__be64 *)(&descriptor->b_data[offset])) = + cpu_to_be64(record->blocknr); + else + * ((__be32 *)(&descriptor->b_data[offset])) = + cpu_to_be32(record->blocknr); + offset += sz; *offsetp = offset; } |