• David Sterba's avatar
    Revert "btrfs: compression: drop kmap/kunmap from zstd" · 56ee254d
    David Sterba authored
    This reverts commit bbaf9715.
    
    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.
    
    Example stacktrace with ZSTD on a 32bit ARM machine:
    
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      pgd = c4159ed3
      [00000000] *pgd=00000000
      Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      Modules linked in:
      CPU: 0 PID: 210 Comm: kworker/u2:3 Not tainted 5.14.0-rc79+ #12
      Hardware name: Allwinner sun4i/sun5i Families
      Workqueue: btrfs-delalloc btrfs_work_helper
      PC is at mmiocpy+0x48/0x330
      LR is at ZSTD_compressStream_generic+0x15c/0x28c
    
      (mmiocpy) from [<c0629648>] (ZSTD_compressStream_generic+0x15c/0x28c)
      (ZSTD_compressStream_generic) from [<c06297dc>] (ZSTD_compressStream+0x64/0xa0)
      (ZSTD_compressStream) from [<c049444c>] (zstd_compress_pages+0x170/0x488)
      (zstd_compress_pages) from [<c0496798>] (btrfs_compress_pages+0x124/0x12c)
      (btrfs_compress_pages) from [<c043c068>] (compress_file_range+0x3c0/0x834)
      (compress_file_range) from [<c043c4ec>] (async_cow_start+0x10/0x28)
      (async_cow_start) from [<c0475c3c>] (btrfs_work_helper+0x100/0x230)
      (btrfs_work_helper) from [<c014ef68>] (process_one_work+0x1b4/0x418)
      (process_one_work) from [<c014f210>] (worker_thread+0x44/0x524)
      (worker_thread) from [<c0156aa4>] (kthread+0x180/0x1b0)
      (kthread) from [<c0100150>]
    
    Link: https://lore.kernel.org/all/CAJCQCtT+OuemovPO7GZk8Y8=qtOObr0XTDp8jh4OHD6y84AFxw@mail.gmail.com/
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=214839Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    56ee254d
zstd.c 18.3 KB