diff options
Diffstat (limited to 'fs/jbd2/commit.c')
| -rw-r--r-- | fs/jbd2/commit.c | 16 | 
1 files changed, 6 insertions, 10 deletions
| diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 1073259902a6..8d6f934c3d95 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -298,14 +298,12 @@ static int journal_finish_inode_data_buffers(journal_t *journal,  static __u32 jbd2_checksum_data(__u32 crc32_sum, struct buffer_head *bh)  { -	struct page *page = bh->b_page;  	char *addr;  	__u32 checksum; -	addr = kmap_atomic(page); -	checksum = crc32_be(crc32_sum, -		(void *)(addr + offset_in_page(bh->b_data)), bh->b_size); -	kunmap_atomic(addr); +	addr = kmap_local_folio(bh->b_folio, bh_offset(bh)); +	checksum = crc32_be(crc32_sum, addr, bh->b_size); +	kunmap_local(addr);  	return checksum;  } @@ -322,7 +320,6 @@ 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; @@ -331,11 +328,10 @@ static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,  		return;  	seq = cpu_to_be32(sequence); -	addr = kmap_atomic(page); +	addr = kmap_local_folio(bh->b_folio, bh_offset(bh));  	csum32 = jbd2_chksum(j, j->j_csum_seed, (__u8 *)&seq, sizeof(seq)); -	csum32 = jbd2_chksum(j, csum32, addr + offset_in_page(bh->b_data), -			     bh->b_size); -	kunmap_atomic(addr); +	csum32 = jbd2_chksum(j, csum32, addr, bh->b_size); +	kunmap_local(addr);  	if (jbd2_has_feature_csum3(j))  		tag3->t_checksum = cpu_to_be32(csum32); | 
