|
@@ -577,7 +577,7 @@ static void write_one_revoke_record(journal_t *journal,
|
|
{
|
|
{
|
|
int csum_size = 0;
|
|
int csum_size = 0;
|
|
struct buffer_head *descriptor;
|
|
struct buffer_head *descriptor;
|
|
- int offset;
|
|
|
|
|
|
+ int sz, offset;
|
|
journal_header_t *header;
|
|
journal_header_t *header;
|
|
|
|
|
|
/* If we are already aborting, this all becomes a noop. We
|
|
/* If we are already aborting, this all becomes a noop. We
|
|
@@ -594,9 +594,14 @@ static void write_one_revoke_record(journal_t *journal,
|
|
if (jbd2_journal_has_csum_v2or3(journal))
|
|
if (jbd2_journal_has_csum_v2or3(journal))
|
|
csum_size = sizeof(struct jbd2_journal_revoke_tail);
|
|
csum_size = sizeof(struct jbd2_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 */
|
|
/* Make sure we have a descriptor with space left for the record */
|
|
if (descriptor) {
|
|
if (descriptor) {
|
|
- if (offset >= journal->j_blocksize - csum_size) {
|
|
|
|
|
|
+ if (offset + sz > journal->j_blocksize - csum_size) {
|
|
flush_descriptor(journal, descriptor, offset, write_op);
|
|
flush_descriptor(journal, descriptor, offset, write_op);
|
|
descriptor = NULL;
|
|
descriptor = NULL;
|
|
}
|
|
}
|
|
@@ -619,16 +624,13 @@ static void write_one_revoke_record(journal_t *journal,
|
|
*descriptorp = descriptor;
|
|
*descriptorp = descriptor;
|
|
}
|
|
}
|
|
|
|
|
|
- if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) {
|
|
|
|
|
|
+ if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
|
|
* ((__be64 *)(&descriptor->b_data[offset])) =
|
|
* ((__be64 *)(&descriptor->b_data[offset])) =
|
|
cpu_to_be64(record->blocknr);
|
|
cpu_to_be64(record->blocknr);
|
|
- offset += 8;
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
|
|
+ else
|
|
* ((__be32 *)(&descriptor->b_data[offset])) =
|
|
* ((__be32 *)(&descriptor->b_data[offset])) =
|
|
cpu_to_be32(record->blocknr);
|
|
cpu_to_be32(record->blocknr);
|
|
- offset += 4;
|
|
|
|
- }
|
|
|
|
|
|
+ offset += sz;
|
|
|
|
|
|
*offsetp = offset;
|
|
*offsetp = offset;
|
|
}
|
|
}
|