[bug report] possible circular locking dependency detected with blktests block/002

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello
I found this circular locking with blktests block/002 on the latest
linux-block/for-next, please help check it, thanks.

# ./check block/002
block/002 (remove a device while running blktrace)           [failed]
    runtime  7.680s  ...  6.431s
    something found in dmesg:
    [  428.095052] run blktests block/002 at 2024-11-06 03:17:20
    [  429.087377] sd 15:0:0:0: [sdb] Synchronizing SCSI cache
    [  430.585186] scsi_debug:sdebug_driver_probe: scsi_debug: trim
poll_queues to 0. poll_q/nr_hw = (0/1)
    [  430.594304] scsi host15: scsi_debug: version 0191 [20210520]
                     dev_size_mb=8, opts=0x0, submit_queues=1, statistics=0
    [  430.606534] scsi 15:0:0:0: Direct-Access     Linux
scsi_debug       0191 PQ: 0 ANSI: 7
    [  430.614964] scsi 15:0:0:0: Power-on or device reset occurred
    [  430.630053] sd 15:0:0:0: Attached scsi generic sg1 type 0
    [  430.637952] sd 15:0:0:0: [sdb] 16384 512-byte logical blocks:
(8.39 MB/8.00 MiB)
    [  430.639447] sd 15:0:0:0: [sdb] Write Protect is off
    ...
    (See '/root/blktests/results/nodev/block/002.dmesg' for the entire message)

dmesg:
[  428.095052] run blktests block/002 at 2024-11-06 03:17:20
[  429.087377] sd 15:0:0:0: [sdb] Synchronizing SCSI cache
[  430.585186] scsi_debug:sdebug_driver_probe: scsi_debug: trim
poll_queues to 0. poll_q/nr_hw = (0/1)
[  430.594304] scsi host15: scsi_debug: version 0191 [20210520]
                 dev_size_mb=8, opts=0x0, submit_queues=1, statistics=0
[  430.606534] scsi 15:0:0:0: Direct-Access     Linux    scsi_debug
   0191 PQ: 0 ANSI: 7
[  430.614964] scsi 15:0:0:0: Power-on or device reset occurred
[  430.630053] sd 15:0:0:0: Attached scsi generic sg1 type 0
[  430.637952] sd 15:0:0:0: [sdb] 16384 512-byte logical blocks: (8.39
MB/8.00 MiB)
[  430.639447] sd 15:0:0:0: [sdb] Write Protect is off
[  430.639541] sd 15:0:0:0: [sdb] Mode Sense: 73 00 10 08
[  430.642819] sd 15:0:0:0: [sdb] Write cache: enabled, read cache:
enabled, supports DPO and FUA
[  430.653489] sd 15:0:0:0: [sdb] permanent stream count = 5
[  430.658069] sd 15:0:0:0: [sdb] Preferred minimum I/O size 512 bytes
[  430.658176] sd 15:0:0:0: [sdb] Optimal transfer size 524288 bytes
[  430.745022] sd 15:0:0:0: [sdb] Attached SCSI disk

[  431.969279] ======================================================
[  431.975456] WARNING: possible circular locking dependency detected
[  431.981639] 6.12.0-rc5+ #3 Not tainted
[  431.985387] ------------------------------------------------------
[  431.991566] blktrace/2277 is trying to acquire lock:
[  431.996534] ffff88ae46450bb0 (&mm->mmap_lock){++++}-{3:3}, at:
__might_fault+0xbf/0x170
[  432.004548]
               but task is already holding lock:
[  432.010380] ffff88ada6814858 (&q->debugfs_mutex){+.+.}-{3:3}, at:
blk_trace_ioctl+0x8d/0x240
[  432.018822]
               which lock already depends on the new lock.

[  432.026995]
               the existing dependency chain (in reverse order) is:
[  432.034474]
               -> #3 (&q->debugfs_mutex){+.+.}-{3:3}:
[  432.040746]        __lock_acquire+0xc53/0x1bf0
[  432.045199]        lock_acquire+0x177/0x3e0
[  432.049386]        __mutex_lock+0x154/0x14a0
[  432.053668]        blk_mq_init_sched+0x3b3/0x5f0
[  432.058296]        elevator_init_mq+0x214/0x330
[  432.062837]        add_disk_fwnode+0xfa/0x1200
[  432.067281]        sd_probe+0x826/0xdb0 [sd_mod]
[  432.071908]        really_probe+0x1e0/0x920
[  432.076094]        __driver_probe_device+0x18a/0x3d0
[  432.081060]        driver_probe_device+0x49/0x120
[  432.085768]        __driver_attach_async_helper+0x102/0x260
[  432.091339]        async_run_entry_fn+0x93/0x4f0
[  432.095967]        process_one_work+0xe61/0x16a0
[  432.100586]        worker_thread+0x588/0xce0
[  432.104856]        kthread+0x2f3/0x3e0
[  432.108609]        ret_from_fork+0x2d/0x70
[  432.112707]        ret_from_fork_asm+0x1a/0x30
[  432.117155]
               -> #2 (&q->q_usage_counter(io)){++++}-{0:0}:
[  432.123949]        __lock_acquire+0xc53/0x1bf0
[  432.128393]        lock_acquire+0x177/0x3e0
[  432.132578]        bio_queue_enter+0x228/0x360
[  432.137025]        blk_mq_submit_bio+0x44f/0x1a10
[  432.141731]        __submit_bio+0x154/0x420
[  432.145916]        __submit_bio_noacct+0x145/0x530
[  432.150709]        submit_bio_noacct_nocheck+0x525/0x650
[  432.156019]        iomap_readahead+0x492/0x6a0
[  432.160467]        read_pages+0x177/0xbe0
[  432.164486]        page_cache_ra_order+0x4a9/0xa10
[  432.169278]        filemap_get_pages+0x2bc/0xaa0
[  432.173897]        filemap_read+0x301/0x9e0
[  432.178083]        xfs_file_buffered_read+0x104/0x160 [xfs]
[  432.184030]        xfs_file_read_iter+0x274/0x560 [xfs]
[  432.189559]        vfs_read+0x74a/0xc30
[  432.193405]        ksys_read+0xf1/0x1d0
[  432.197243]        do_syscall_64+0x8c/0x180
[  432.201438]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.207018]
               -> #1 (mapping.invalidate_lock#2){++++}-{3:3}:
[  432.213987]        __lock_acquire+0xc53/0x1bf0
[  432.218440]        lock_acquire+0x177/0x3e0
[  432.222628]        down_read+0xa1/0x4c0
[  432.226475]        filemap_fault+0x70b/0x12a0
[  432.230842]        __xfs_filemap_fault+0x121/0x290 [xfs]
[  432.236449]        __do_fault+0xf1/0x7f0
[  432.240384]        do_pte_missing+0x413/0x940
[  432.244743]        __handle_mm_fault+0xafb/0x1280
[  432.249447]        handle_mm_fault+0x26b/0x5f0
[  432.253892]        do_user_addr_fault+0x236/0xb90
[  432.258600]        exc_page_fault+0x59/0xe0
[  432.262794]        asm_exc_page_fault+0x22/0x30
[  432.267324]        rep_stos_alternative+0x40/0x80
[  432.272031]        elf_load+0x498/0x700
[  432.275871]        load_elf_binary+0x9ca/0x2a30
[  432.280403]        search_binary_handler+0x161/0x560
[  432.285378]        exec_binprm+0x119/0x430
[  432.289475]        bprm_execve+0x1e4/0x520
[  432.293573]        do_execveat_common.isra.0+0x404/0x540
[  432.298887]        __x64_sys_execve+0x88/0xb0
[  432.303246]        do_syscall_64+0x8c/0x180
[  432.307431]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.313005]
               -> #0 (&mm->mmap_lock){++++}-{3:3}:
[  432.319020]        check_prev_add+0x1b7/0x2360
[  432.323473]        validate_chain+0xa42/0xe00
[  432.327831]        __lock_acquire+0xc53/0x1bf0
[  432.332277]        lock_acquire+0x177/0x3e0
[  432.336462]        __might_fault+0xef/0x170
[  432.340649]        _copy_from_user+0x22/0xa0
[  432.344929]        __blk_trace_setup+0x8e/0x130
[  432.349469]        blk_trace_ioctl+0x118/0x240
[  432.353917]        blkdev_ioctl+0xf0/0x5c0
[  432.358024]        __x64_sys_ioctl+0x128/0x1a0
[  432.362479]        do_syscall_64+0x8c/0x180
[  432.366673]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.372244]
               other info that might help us debug this:

[  432.380242] Chain exists of:
                 &mm->mmap_lock --> &q->q_usage_counter(io) -->
&q->debugfs_mutex

[  432.391804]  Possible unsafe locking scenario:

[  432.397721]        CPU0                    CPU1
[  432.402255]        ----                    ----
[  432.406786]   lock(&q->debugfs_mutex);
[  432.410539]                                lock(&q->q_usage_counter(io));
[  432.417323]                                lock(&q->debugfs_mutex);
[  432.423590]   rlock(&mm->mmap_lock);
[  432.427168]
                *** DEADLOCK ***

[  432.433088] 1 lock held by blktrace/2277:
[  432.437099]  #0: ffff88ada6814858 (&q->debugfs_mutex){+.+.}-{3:3},
at: blk_trace_ioctl+0x8d/0x240
[  432.445974]
               stack backtrace:
[  432.450333] CPU: 39 UID: 0 PID: 2277 Comm: blktrace Kdump: loaded
Not tainted 6.12.0-rc5+ #3
[  432.458765] Hardware name: Dell Inc. PowerEdge R640/08HT8T, BIOS
2.20.1 09/13/2023
[  432.466332] Call Trace:
[  432.468784]  <TASK>
[  432.470888]  dump_stack_lvl+0x7e/0xc0
[  432.474564]  print_circular_bug+0x1b7/0x240
[  432.478751]  check_noncircular+0x2f6/0x3e0
[  432.482849]  ? __pfx_check_noncircular+0x10/0x10
[  432.487470]  ? validate_chain+0x148/0xe00
[  432.491491]  ? alloc_chain_hlocks+0x33c/0x530
[  432.495856]  check_prev_add+0x1b7/0x2360
[  432.499784]  validate_chain+0xa42/0xe00
[  432.503634]  ? __pfx_validate_chain+0x10/0x10
[  432.507997]  ? mark_lock.part.0+0x77/0x880
[  432.512100]  __lock_acquire+0xc53/0x1bf0
[  432.516034]  ? rcu_is_watching+0x11/0xb0
[  432.519968]  lock_acquire+0x177/0x3e0
[  432.523638]  ? __might_fault+0xbf/0x170
[  432.527478]  ? __pfx_lock_acquire+0x10/0x10
[  432.531664]  ? blk_trace_ioctl+0x8d/0x240
[  432.535681]  ? __might_fault+0xbf/0x170
[  432.539525]  __might_fault+0xef/0x170
[  432.543197]  ? __might_fault+0xbf/0x170
[  432.547037]  _copy_from_user+0x22/0xa0
[  432.550791]  __blk_trace_setup+0x8e/0x130
[  432.554812]  ? __pfx___blk_trace_setup+0x10/0x10
[  432.559437]  ? snprintf+0x9e/0xd0
[  432.562757]  ? __pfx_snprintf+0x10/0x10
[  432.566601]  blk_trace_ioctl+0x118/0x240
[  432.570531]  ? __pfx_blk_trace_ioctl+0x10/0x10
[  432.574974]  ? __lock_release+0x486/0x960
[  432.578988]  ? __pfx_ioctl_has_perm.constprop.0.isra.0+0x10/0x10
[  432.585004]  ? rcu_is_watching+0x11/0xb0
[  432.588930]  blkdev_ioctl+0xf0/0x5c0
[  432.592515]  ? __pfx_blkdev_ioctl+0x10/0x10
[  432.596704]  __x64_sys_ioctl+0x128/0x1a0
[  432.600637]  do_syscall_64+0x8c/0x180
[  432.604303]  ? ktime_get_coarse_real_ts64+0x130/0x170
[  432.609363]  ? rcu_is_watching+0x11/0xb0
[  432.613288]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.618424]  ? do_syscall_64+0x98/0x180
[  432.622266]  ? lockdep_hardirqs_on+0x78/0x100
[  432.626624]  ? do_syscall_64+0x98/0x180
[  432.630463]  ? do_user_addr_fault+0x4b7/0xb90
[  432.634823]  ? do_user_addr_fault+0x4b7/0xb90
[  432.639181]  ? rcu_is_watching+0x11/0xb0
[  432.643107]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.648248]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.653307] RIP: 0033:0x7fdb8110375b
[  432.656896] Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d
4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00
00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 8d 56 0f 00 f7 d8 64 89
01 48
[  432.675646] RSP: 002b:00007fffc3175998 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[  432.683213] RAX: ffffffffffffffda RBX: 000055cefc56c860 RCX: 00007fdb8110375b
[  432.690344] RDX: 00007fffc3175a40 RSI: 00000000c0481273 RDI: 0000000000000003
[  432.697475] RBP: 00000000c0481273 R08: 00007fdb811faf30 R09: 0000000000000000
[  432.704607] R10: 0000000000000008 R11: 0000000000000246 R12: 00007fffc3175a40
[  432.711741] R13: 0000000000000000 R14: 000055cf3205d650 R15: 0000000000000000
[  432.718880]  </TASK>
[  432.918796] sd 15:0:0:0: [sdb] Synchronizing SCSI cache
[root@storageqe-31 blktests]#
[  432.547037]  _copy_from_user+0x22/0xa0
[  432.550791]  __blk_trace_setup+0x8e/0x130
[  432.554812]  ? __pfx___blk_trace_setup+0x10/0x10
[  432.559437]  ? snprintf+0x9e/0xd0
[  432.562757]  ? __pfx_snprintf+0x10/0x10
[  432.566601]  blk_trace_ioctl+0x118/0x240
[  432.570531]  ? __pfx_blk_trace_ioctl+0x10/0x10
[  432.574974]  ? __lock_release+0x486/0x960
[  432.578988]  ? __pfx_ioctl_has_perm.constprop.0.isra.0+0x10/0x10
[  432.585004]  ? rcu_is_watching+0x11/0xb0
[  432.588930]  blkdev_ioctl+0xf0/0x5c0
[  432.592515]  ? __pfx_blkdev_ioctl+0x10/0x10
[  432.596704]  __x64_sys_ioctl+0x128/0x1a0
[  432.600637]  do_syscall_64+0x8c/0x180
[  432.604303]  ? ktime_get_coarse_real_ts64+0x130/0x170
[  432.609363]  ? rcu_is_watching+0x11/0xb0
[  432.613288]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.618424]  ? do_syscall_64+0x98/0x180
[  432.622266]  ? lockdep_hardirqs_on+0x78/0x100
[  432.626624]  ? do_syscall_64+0x98/0x180
[  432.630463]  ? do_user_addr_fault+0x4b7/0xb90
[  432.634823]  ? do_user_addr_fault+0x4b7/0xb90
[  432.639181]  ? rcu_is_watching+0x11/0xb0
[  432.643107]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.648248]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.653307] RIP: 0033:0x7fdb8110375b
[  432.656896] Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d
4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00
00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 8d 56 0f 00 f7 d8 64 89
01 48
[  432.675646] RSP: 002b:00007fffc3175998 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[  432.683213] RAX: ffffffffffffffda RBX: 000055cefc56c860 RCX: 00007fdb8110375b
[  432.690344] RDX: 00007fffc3175a40 RSI: 00000000c0481273 RDI: 0000000000000003
[  432.697475] RBP: 00000000c0481273 R08: 00007fdb811faf30 R09: 0000000000000000
[  432.704607] R10: 0000000000000008 R11: 0000000000000246 R12: 00007fffc3175a40
[  432.711741] R13: 0000000000000000 R14: 000055cf3205d650 R15: 0000000000000000
[  432.718880]  </TASK>
[  432.918796] sd 15:0:0:0: [sdb] Synchronizing SCSI cache
[root@storageqe-31 blktests]#
[  432.547037]  _copy_from_user+0x22/0xa0
[  432.550791]  __blk_trace_setup+0x8e/0x130
[  432.554812]  ? __pfx___blk_trace_setup+0x10/0x10
[  432.559437]  ? snprintf+0x9e/0xd0
[  432.562757]  ? __pfx_snprintf+0x10/0x10
[  432.566601]  blk_trace_ioctl+0x118/0x240
[  432.570531]  ? __pfx_blk_trace_ioctl+0x10/0x10
[  432.574974]  ? __lock_release+0x486/0x960
[  432.578988]  ? __pfx_ioctl_has_perm.constprop.0.isra.0+0x10/0x10
[  432.585004]  ? rcu_is_watching+0x11/0xb0
[  432.588930]  blkdev_ioctl+0xf0/0x5c0
[  432.592515]  ? __pfx_blkdev_ioctl+0x10/0x10
[  432.596704]  __x64_sys_ioctl+0x128/0x1a0
[  432.600637]  do_syscall_64+0x8c/0x180
[  432.604303]  ? ktime_get_coarse_real_ts64+0x130/0x170
[  432.609363]  ? rcu_is_watching+0x11/0xb0
[  432.613288]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.618424]  ? do_syscall_64+0x98/0x180
[  432.622266]  ? lockdep_hardirqs_on+0x78/0x100
[  432.626624]  ? do_syscall_64+0x98/0x180
[  432.630463]  ? do_user_addr_fault+0x4b7/0xb90
[  432.634823]  ? do_user_addr_fault+0x4b7/0xb90
[  432.639181]  ? rcu_is_watching+0x11/0xb0
[  432.643107]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.648248]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.653307] RIP: 0033:0x7fdb8110375b
[  432.656896] Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d
4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00
00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 8d 56 0f 00 f7 d8 64 89
01 48
[  432.675646] RSP: 002b:00007fffc3175998 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[  432.683213] RAX: ffffffffffffffda RBX: 000055cefc56c860 RCX: 00007fdb8110375b
[  432.690344] RDX: 00007fffc3175a40 RSI: 00000000c0481273 RDI: 0000000000000003
[  432.697475] RBP: 00000000c0481273 R08: 00007fdb811faf30 R09: 0000000000000000
[  432.704607] R10: 0000000000000008 R11: 0000000000000246 R12: 00007fffc3175a40
[  432.711741] R13: 0000000000000000 R14: 000055cf3205d650 R15: 0000000000000000
[  432.718880]  </TASK>
[  432.918796] sd 15:0:0:0: [sdb] Synchronizing SCSI cache
[root@storageqe-31 blktests]#
[  432.547037]  _copy_from_user+0x22/0xa0
[  432.550791]  __blk_trace_setup+0x8e/0x130
[  432.554812]  ? __pfx___blk_trace_setup+0x10/0x10
[  432.559437]  ? snprintf+0x9e/0xd0
[  432.562757]  ? __pfx_snprintf+0x10/0x10
[  432.566601]  blk_trace_ioctl+0x118/0x240
[  432.570531]  ? __pfx_blk_trace_ioctl+0x10/0x10
[  432.574974]  ? __lock_release+0x486/0x960
[  432.578988]  ? __pfx_ioctl_has_perm.constprop.0.isra.0+0x10/0x10
[  432.585004]  ? rcu_is_watching+0x11/0xb0
[  432.588930]  blkdev_ioctl+0xf0/0x5c0
[  432.592515]  ? __pfx_blkdev_ioctl+0x10/0x10
[  432.596704]  __x64_sys_ioctl+0x128/0x1a0
[  432.600637]  do_syscall_64+0x8c/0x180
[  432.604303]  ? ktime_get_coarse_real_ts64+0x130/0x170
[  432.609363]  ? rcu_is_watching+0x11/0xb0
[  432.613288]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.618424]  ? do_syscall_64+0x98/0x180
[  432.622266]  ? lockdep_hardirqs_on+0x78/0x100
[  432.626624]  ? do_syscall_64+0x98/0x180
[  432.630463]  ? do_user_addr_fault+0x4b7/0xb90
[  432.634823]  ? do_user_addr_fault+0x4b7/0xb90
[  432.639181]  ? rcu_is_watching+0x11/0xb0
[  432.643107]  ? lockdep_hardirqs_on_prepare+0x179/0x400
[  432.648248]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  432.653307] RIP: 0033:0x7fdb8110375b
[  432.656896] Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d
4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00
00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 8d 56 0f 00 f7 d8 64 89
01 48
[  432.675646] RSP: 002b:00007fffc3175998 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[  432.683213] RAX: ffffffffffffffda RBX: 000055cefc56c860 RCX: 00007fdb8110375b
[  432.690344] RDX: 00007fffc3175a40 RSI: 00000000c0481273 RDI: 0000000000000003
[  432.697475] RBP: 00000000c0481273 R08: 00007fdb811faf30 R09: 0000000000000000
[  432.704607] R10: 0000000000000008 R11: 0000000000000246 R12: 00007fffc3175a40
[  432.711741] R13: 0000000000000000 R14: 000055cf3205d650 R15: 0000000000000000
[  432.718880]  </TASK>
[  432.918796] sd 15:0:0:0: [sdb] Synchronizing SCSI cache

-- 
Best Regards,
  Yi Zhang





[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux