• Joe Thornber's avatar
    dm cache: free background tracker's queued work in btracker_destroy · 95ab80a8
    Joe Thornber authored
    Otherwise the kernel can BUG with:
    
    [ 2245.426978] =============================================================================
    [ 2245.435155] BUG bt_work (Tainted: G    B   W         ): Objects remaining in bt_work on __kmem_cache_shutdown()
    [ 2245.445233] -----------------------------------------------------------------------------
    [ 2245.445233]
    [ 2245.454879] Slab 0x00000000b0ce2b30 objects=64 used=2 fp=0x000000000a3c6a4e flags=0x17ffffc0000200(slab|node=0|zone=2|lastcpupid=0x1fffff)
    [ 2245.467300] CPU: 7 PID: 10805 Comm: lvm Kdump: loaded Tainted: G    B   W          6.0.0-rc2 #19
    [ 2245.476078] Hardware name: Dell Inc. PowerEdge R7525/0590KW, BIOS 2.5.6 10/06/2021
    [ 2245.483646] Call Trace:
    [ 2245.486100]  <TASK>
    [ 2245.488206]  dump_stack_lvl+0x34/0x48
    [ 2245.491878]  slab_err+0x95/0xcd
    [ 2245.495028]  __kmem_cache_shutdown.cold+0x31/0x136
    [ 2245.499821]  kmem_cache_destroy+0x49/0x130
    [ 2245.503928]  btracker_destroy+0x12/0x20 [dm_cache]
    [ 2245.508728]  smq_destroy+0x15/0x60 [dm_cache_smq]
    [ 2245.513435]  dm_cache_policy_destroy+0x12/0x20 [dm_cache]
    [ 2245.518834]  destroy+0xc0/0x110 [dm_cache]
    [ 2245.522933]  dm_table_destroy+0x5c/0x120 [dm_mod]
    [ 2245.527649]  __dm_destroy+0x10e/0x1c0 [dm_mod]
    [ 2245.532102]  dev_remove+0x117/0x190 [dm_mod]
    [ 2245.536384]  ctl_ioctl+0x1a2/0x290 [dm_mod]
    [ 2245.540579]  dm_ctl_ioctl+0xa/0x20 [dm_mod]
    [ 2245.544773]  __x64_sys_ioctl+0x8a/0xc0
    [ 2245.548524]  do_syscall_64+0x5c/0x90
    [ 2245.552104]  ? syscall_exit_to_user_mode+0x12/0x30
    [ 2245.556897]  ? do_syscall_64+0x69/0x90
    [ 2245.560648]  ? do_syscall_64+0x69/0x90
    [ 2245.564394]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
    [ 2245.569447] RIP: 0033:0x7fe52583ec6b
    ...
    [ 2245.646771] ------------[ cut here ]------------
    [ 2245.651395] kmem_cache_destroy bt_work: Slab cache still has objects when called from btracker_destroy+0x12/0x20 [dm_cache]
    [ 2245.651408] WARNING: CPU: 7 PID: 10805 at mm/slab_common.c:478 kmem_cache_destroy+0x128/0x130
    
    Found using: lvm2-testsuite --only "cache-single-split.sh"
    
    Ben bisected and found that commit 0495e337 ("mm/slab_common:
    Deleting kobject in kmem_cache_destroy() without holding
    slab_mutex/cpu_hotplug_lock") first exposed dm-cache's incomplete
    cleanup of its background tracker work objects.
    Reported-by: default avatarBenjamin Marzinski <bmarzins@redhat.com>
    Tested-by: default avatarBenjamin Marzinski <bmarzins@redhat.com>
    Cc: stable@vger.kernel.org # 6.0+
    Signed-off-by: default avatarJoe Thornber <ejt@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    95ab80a8
dm-cache-background-tracker.c 5.22 KB