Revert "btrfs: compression: drop kmap/kunmap from generic helpers"
authorDavid Sterba <dsterba@suse.com>
Wed, 27 Oct 2021 08:39:03 +0000 (10:39 +0200)
committerDavid Sterba <dsterba@suse.com>
Wed, 27 Oct 2021 08:39:03 +0000 (10:39 +0200)
This reverts commit 4c2bf276b56d8d27ddbafcdf056ef3fc60ae50b0.

The kmaps in compression code are still needed and cause crashes on
32bit machines (ARM, x86). Reproducible eg. by running fstest btrfs/004
with enabled LZO or ZSTD compression.

Link: https://lore.kernel.org/all/CAJCQCtT+OuemovPO7GZk8Y8=qtOObr0XTDp8jh4OHD6y84AFxw@mail.gmail.com/
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=214839
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/compression.c
fs/btrfs/inode.c

index 7869ad1..0913ee5 100644 (file)
@@ -172,9 +172,10 @@ static int check_compressed_csum(struct btrfs_inode *inode, struct bio *bio,
                /* Hash through the page sector by sector */
                for (pg_offset = 0; pg_offset < bytes_left;
                     pg_offset += sectorsize) {
-                       kaddr = page_address(page);
+                       kaddr = kmap_atomic(page);
                        crypto_shash_digest(shash, kaddr + pg_offset,
                                            sectorsize, csum);
+                       kunmap_atomic(kaddr);
 
                        if (memcmp(&csum, cb_sum, csum_size) != 0) {
                                btrfs_print_data_csum_error(inode, disk_start,
index 2aa9646..e6772f5 100644 (file)
@@ -287,8 +287,9 @@ static int insert_inline_extent(struct btrfs_trans_handle *trans,
                        cur_size = min_t(unsigned long, compressed_size,
                                       PAGE_SIZE);
 
-                       kaddr = page_address(cpage);
+                       kaddr = kmap_atomic(cpage);
                        write_extent_buffer(leaf, kaddr, ptr, cur_size);
+                       kunmap_atomic(kaddr);
 
                        i++;
                        ptr += cur_size;