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)  	struct commit_header *h;  	__u32 csum; -	if (!JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V2)) +	if (!jbd2_journal_has_csum_v2or3(j))  		return;  	h = (struct commit_header *)(bh->b_data); @@ -313,11 +313,11 @@ static __u32 jbd2_checksum_data(__u32 crc32_sum, struct buffer_head *bh)  	return checksum;  } -static void write_tag_block(int tag_bytes, journal_block_tag_t *tag, +static void write_tag_block(journal_t *j, journal_block_tag_t *tag,  				   unsigned long long block)  {  	tag->t_blocknr = cpu_to_be32(block & (u32)~0); -	if (tag_bytes > JBD2_TAG_SIZE32) +	if (JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_64BIT))  		tag->t_blocknr_high = cpu_to_be32((block >> 31) >> 1);  } @@ -327,7 +327,7 @@ static void jbd2_descr_block_csum_set(journal_t *j,  	struct jbd2_journal_block_tail *tail;  	__u32 csum; -	if (!JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V2)) +	if (!jbd2_journal_has_csum_v2or3(j))  		return;  	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,  static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,  				    struct buffer_head *bh, __u32 sequence)  { +	journal_block_tag3_t *tag3 = (journal_block_tag3_t *)tag;  	struct page *page = bh->b_page;  	__u8 *addr;  	__u32 csum32;  	__be32 seq; -	if (!JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V2)) +	if (!jbd2_journal_has_csum_v2or3(j))  		return;  	seq = cpu_to_be32(sequence); @@ -355,8 +356,10 @@ static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,  			     bh->b_size);  	kunmap_atomic(addr); -	/* We only have space to store the lower 16 bits of the crc32c. */ -	tag->t_checksum = cpu_to_be16(csum32); +	if (JBD2_HAS_INCOMPAT_FEATURE(j, JBD2_FEATURE_INCOMPAT_CSUM_V3)) +		tag3->t_checksum = cpu_to_be32(csum32); +	else +		tag->t_checksum = cpu_to_be16(csum32);  }  /*   * jbd2_journal_commit_transaction @@ -396,7 +399,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)  	LIST_HEAD(io_bufs);  	LIST_HEAD(log_bufs); -	if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V2)) +	if (jbd2_journal_has_csum_v2or3(journal))  		csum_size = sizeof(struct jbd2_journal_block_tail);  	/* @@ -690,7 +693,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)  			tag_flag |= JBD2_FLAG_SAME_UUID;  		tag = (journal_block_tag_t *) tagp; -		write_tag_block(tag_bytes, tag, jh2bh(jh)->b_blocknr); +		write_tag_block(journal, tag, jh2bh(jh)->b_blocknr);  		tag->t_flags = cpu_to_be16(tag_flag);  		jbd2_block_tag_csum_set(journal, tag, wbuf[bufs],  					commit_transaction->t_tid);  |