WARNING: possible circular locking dependency at: device_list_add.constprop.0+0x2c4/0xc7c (kernel v7.0-rc2)

From: Erhard Furtner

Date: Wed Mar 04 2026 - 15:43:07 EST


Greetings!

Getting this lockdep splat on my PowerMac G5 11,2 at boot on kernel v7.0-rc2 (and v7.0-rc1 too):

[...]
ohci-pci 0001:01:0b.0: OHCI PCI host controller
ohci-pci 0001:01:0b.0: new USB bus registered, assigned bus number 2
ohci-pci 0001:01:0b.0: irq 70, io mem 0x80082000

======================================================
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 7.00
WARNING: possible circular locking dependency detected
7.0.0-rc2-PMacG5 #1 Tainted: G N
------------------------------------------------------
(udev-worker)/189 is trying to acquire lock:
c0000000032f0dd0 (&type->i_mutex_dir_key#2
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
){++++}-{3:3}
usb usb2: Product: OHCI PCI host controller
, at: lookup_slow+0x30/0x60

but task is already holding lock:
c0000000036f82d8 (&fs_devs->device_list_mutex){+.+.}-{3:3}, at: device_list_add.constprop.0+0x2c4/0xc7c
usb usb2: Manufacturer: Linux 7.0.0-rc2-PMacG5 ohci_hcd

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #6 (&fs_devs->device_list_mutex){+.+.}-{3:3}:
__mutex_lock+0xe4/0x4fc
usb usb2: SerialNumber: 0001:01:0b.0
write_all_supers+0x2c8/0xd90
btrfs_sync_log+0x8e4/0xa34
btrfs_sync_file+0x53c/0x614
vfs_fsync_range+0x70/0x8c
do_fsync+0x3c/0x5c
sys_fsync+0x20/0x30
system_call_exception+0x16c/0x1cc
system_call_common+0xf4/0x258

-> #5 (&fs_info->tree_log_mutex){+.+.}-{3:3}:
__mutex_lock+0xe4/0x4fc
btrfs_sync_log+0x7b0/0xa34
btrfs_sync_file+0x53c/0x614
vfs_fsync_range+0x70/0x8c
do_fsync+0x3c/0x5c
sys_fsync+0x20/0x30
system_call_exception+0x16c/0x1cc
system_call_common+0xf4/0x258

-> #4 (btrfs_trans_num_extwriters){.+.+}-{0:0}:
join_transaction+0x314/0x650
start_transaction+0x318/0x810
btrfs_dirty_inode+0x3c/0xdc
file_update_time_flags+0xe4/0x104
btrfs_page_mkwrite+0x268/0x71c
do_page_mkwrite+0x68/0xb0
do_wp_page+0x10c/0x95c
__handle_mm_fault+0x1ec/0x248
handle_mm_fault+0x190/0x1dc
___do_page_fault+0x540/0x66c
hash__do_page_fault+0x28/0x54
do_hash_fault+0x94/0x168
data_access_common_virt+0x198/0x1f0

-> #3 (btrfs_trans_num_writers){.+.+}-{0:0}:
lock_release+0x2dc/0x34c
sb_end_intwrite+0x30/0x12c
__btrfs_end_transaction+0xc0/0x200
btrfs_dirty_inode+0xbc/0xdc
file_update_time_flags+0xe4/0x104
btrfs_page_mkwrite+0x268/0x71c
do_page_mkwrite+0x68/0xb0
do_wp_page+0x10c/0x95c
__handle_mm_fault+0x1ec/0x248
handle_mm_fault+0x190/0x1dc
___do_page_fault+0x540/0x66c
hash__do_page_fault+0x28/0x54
do_hash_fault+0x94/0x168
data_access_common_virt+0x198/0x1f0

-> #2 (sb_pagefaults){.+.+}-{0:0}:
btrfs_page_mkwrite+0xc0/0x71c
do_page_mkwrite+0x68/0xb0
do_wp_page+0x10c/0x95c
__handle_mm_fault+0x1ec/0x248
handle_mm_fault+0x190/0x1dc
___do_page_fault+0x540/0x66c
hash__do_page_fault+0x28/0x54
do_hash_fault+0x94/0x168
data_access_common_virt+0x198/0x1f0

-> #1 (&mm->mmap_lock){++++}-{3:3}:
__might_fault+0x58/0x7c
filldir64+0xe0/0x234
dir_emit_dots+0x5c/0xe8
offset_readdir+0x60/0x150
iterate_dir+0x9c/0x18c
sys_getdents64+0x74/0x194
system_call_exception+0x16c/0x1cc
system_call_common+0xf4/0x258

-> #0 (&type->i_mutex_dir_key#2){++++}-{3:3}:
__lock_acquire+0x1144/0x14b8
lock_acquire+0x2dc/0x324
down_read+0x3c/0x17c
zram1: detected capacity change from 0 to 100663296
lookup_slow+0x30/0x60
path_lookupat+0xf8/0x234
filename_lookup+0x80/0xcc
kern_path+0x3c/0x54
device_list_add.constprop.0+0x750/0xc7c
btrfs_scan_one_device+0x1c8/0x1fc
btrfs_control_ioctl+0x174/0x1dc
sys_ioctl+0xa8/0xd0
system_call_exception+0x16c/0x1cc
system_call_common+0xf4/0x258

other info that might help us debug this:

Chain exists of:
&type->i_mutex_dir_key#2 --> &fs_info->tree_log_mutex --> &fs_devs->device_list_mutex

Possible unsafe locking scenario:

CPU0 CPU1
---- ----
lock(&fs_devs->device_list_mutex);
lock(&fs_info->tree_log_mutex);
lock(&fs_devs->device_list_mutex);
rlock(&type->i_mutex_dir_key#2);

*** DEADLOCK ***

2 locks held by (udev-worker)/189:
#0: c0000000023fd3c8 (uuid_mutex){+.+.}-{3:3}, at: btrfs_control_ioctl+0x164/0x1dc
#1: c0000000036f82d8 (&fs_devs->device_list_mutex){+.+.}-{3:3}, at: device_list_add.constprop.0+0x2c4/0xc7c

stack backtrace:
CPU: 0 UID: 0 PID: 189 Comm: (udev-worker) Tainted: G N 7.0.0-rc2-PMacG5 #1 PREEMPTLAZY
Tainted: [N]=TEST
Hardware name: PowerMac11,2 PPC970MP 0x440101 PowerMac
Call Trace:
[c00000000808b290] [c000000000b5dc58] dump_stack_lvl+0xc0/0x110 (unreliable)
[c00000000808b2d0] [c0000000000eeebc] print_circular_bug+0x284/0x2ac
[c00000000808b380] [c0000000000eeffc] check_noncircular+0x118/0x11c
[c00000000808b400] [c0000000000f1bdc] __lock_acquire+0x1144/0x14b8
[c00000000808b510] [c0000000000f222c] lock_acquire+0x2dc/0x324
[c00000000808b610] [c000000000b8a620] down_read+0x3c/0x17c
[c00000000808b690] [c00000000035abf4] lookup_slow+0x30/0x60
[c00000000808b6e0] [c00000000035f194] path_lookupat+0xf8/0x234
[c00000000808b730] [c00000000035fb40] filename_lookup+0x80/0xcc
[c00000000808b870] [c00000000035fbc8] kern_path+0x3c/0x54
[c00000000808b8b0] [c000000000543760] device_list_add.constprop.0+0x750/0xc7c
[c00000000808b9b0] [c000000000543e54] btrfs_scan_one_device+0x1c8/0x1fc
[c00000000808ba30] [c0000000004c3b18] btrfs_control_ioctl+0x174/0x1dc
[c00000000808ba90] [c000000000365d4c] sys_ioctl+0xa8/0xd0
[c00000000808bae0] [c00000000001efec] system_call_exception+0x16c/0x1cc
[c00000000808be50] [c00000000000b4d4] system_call_common+0xf4/0x258
---- interrupt: c00 at 0x3fff9fc5f884
NIP: 00003fff9fc5f884 LR: 000000011d917c50 CTR: 0000000000000000
REGS: c00000000808be80 TRAP: 0c00 Tainted: G N (7.0.0-rc2-PMacG5)
MSR: 900000000200d032 <SF,HV,VEC,EE,PR,ME,IR,DR,RI> CR: 2800448e XER: 00000000
IRQMASK: 0
GPR00: 0000000000000036 00003fffef2aeed0 00003fff9fd57100 0000000000000016
GPR04: 0000000050009427 00003fffef2aefe8 0000000000007034 000000002f6e766d
GPR08: fffffffeb26d2150 0000000000000000 0000000000000000 0000000000000000
GPR12: 0000000000000000 00003fffa01b47c0 000000011d96e188 000000011d95942a
GPR16: 000000014d92dc50 00003fffef2b83a8 00003fffef2b83a0 000000011d965f13
GPR20: 000000011d965f9d 000000014d75cec0 000000014d76a030 000000011d96e100
GPR24: 000000011d96e120 0000000000000000 000000011d95cf0f 00003fffef2aefe8
GPR28: 000000014d92dc30 0000000000000000 000000014d92dce0 0000000000000016
NIP [00003fff9fc5f884] 0x3fff9fc5f884
LR [000000011d917c50] 0x11d917c50
---- interrupt: c00
BTRFS info: devid 1 device path /dev/root changed to /dev/nvme0n1p4 scanned by (udev-worker) (189)
[...]


Kernel .config and full dmesg available at request.

Regards,
Erhard