Skip to content
Snippets Groups Projects
  • David Sterba's avatar
    56ee254d
    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=214839
    
    
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    56ee254d
    History
    Revert "btrfs: compression: drop kmap/kunmap from zstd"
    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=214839
    
    
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>