NetBSD-Bugs archive

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

kern/60568: panic locking against myself (p->p_lock) in NFS from sysctl_vmproc



>Number:         60568
>Category:       kern
>Synopsis:       panic locking against myself (p->p_lock) in NFS from sysctl_vmproc
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Aug 10 00:50:00 +0000 2026
>Originator:     Greg A. Woods
>Release:        NetBSD 11.99.7
>Organization:
Planix, Inc.; Kelowna, BC; Canada
>Environment:
System: NetBSD nbday.local 11.99.7 NetBSD 11.99.7 (XEN3_DOMU) #0: Wed Aug  5 09:51:05 UTC 2026  mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/xen/compile/XEN3_DOMU amd64
Architecture: x86_64
Machine: amd64
>Description:
	
[ 6123.1695877] Mutex error: mutex_vector_enter,551: locking against myself

[ 6123.1695877] lock address : ffff8c800d63e280
[ 6123.1695877] current cpu  :                  0
[ 6123.1695877] current lwp  : 0xffff8c800c922000
[ 6123.1695877] owner field  : 0xffff8c800c922000 wait/spin:                0/0

[ 6123.1695877] panic: lock error: Mutex: mutex_vector_enter,551: locking against myself: lock 0xffff8c800d63e280 cpu 0 lwp 0xffff8c800c922000
[ 6123.1695877] cpu0: Begin traceback...
[ 6123.1695877] vpanic() at netbsd:vpanic+0x164
[ 6123.1695877] panic() at netbsd:panic+0x3c
[ 6123.1695877] lockdebug_abort() at netbsd:lockdebug_abort+0x10f
[ 6123.1695877] mutex_vector_enter() at netbsd:mutex_vector_enter+0x2f5
[ 6123.1695877] sigpending1() at netbsd:sigpending1+0x24
[ 6123.1695877] nfs_rcvlock() at netbsd:nfs_rcvlock+0xed
[ 6123.1695877] nfs_request() at netbsd:nfs_request+0x48e
[ 6123.1817135] nfs_access() at netbsd:nfs_access+0x30b
[ 6123.1817135] VOP_ACCESS() at netbsd:VOP_ACCESS+0x55
[ 6123.1817135] getcwd_common() at netbsd:getcwd_common+0x2bd
[ 6123.1817135] vnode_to_path() at netbsd:vnode_to_path+0xbb
[ 6123.1817135] sysctl_vmproc() at netbsd:sysctl_vmproc+0x71c
[ 6123.1817135] sysctl_dispatch() at netbsd:sysctl_dispatch+0xb3
[ 6123.1817135] sys___sysctl() at netbsd:sys___sysctl+0xca
[ 6123.1817135] syscall() at netbsd:syscall+0x98
[ 6123.1817135] --- syscall (number 202) ---
[ 6123.1817135] netbsd:syscall+0x98:
[ 6123.1817135] cpu0: End traceback...
	
Michael van Elst noted the following:

	sysctl_vmproc
	-> fill_vmentries (takes p->p_lock)
	   -> fill_vmentry
	      -> vnode_to_path
	         -> getwd_common
	            -> VOP_ACCESS
	               ...   sigpending1 (wants p->p_lock)
	
	Calling into VFS layer while holding a process lock is not
	the best idea.

Note at this point the system went into a panic loop, repeatedly
reporting:

[ 6133.4867723] cpu1[1847 getty]: kernel lock spinout
[ 6133.4867957] cpu0[16442 yajl_test]: hogging kernel lock
[ 6133.4867957] ipi_msg_cpu_handler() at netbsd:ipi_msg_cpu_handler+0x59
[ 6133.4867957] ipi_cpu_handler() at netbsd:ipi_cpu_handler+0x84
[ 6133.4867957] xen_ipi_handler() at netbsd:xen_ipi_handler+0x7c
[ 6133.4867957] evtchn_do_event() at netbsd:evtchn_do_event+0x117
[ 6133.4867957] do_hypervisor_callback() at netbsd:do_hypervisor_callback+0x16b
[ 6133.4867957] Xhandle_hypervisor_callback() at netbsd:Xhandle_hypervisor_callback+0x1a
[ 6133.4867957] --- interrupt ---
[ 6133.4867957] mutex_vector_enter() at netbsd:mutex_vector_enter+0x192
[ 6133.4867957] suspendsched() at netbsd:suspendsched+0xe2
[ 6133.4867957] cpu_reboot() at netbsd:cpu_reboot+0x154
[ 6133.4867957] kern_reboot() at netbsd:kern_reboot+0x5f
[ 6133.4867957] vpanic() at netbsd:vpanic+0x16e
[ 6133.4867957] panic() at netbsd:panic+0x3c
[ 6133.4867957] lockdebug_abort() at netbsd:lockdebug_abort+0x10f
[ 6133.4867957] mutex_vector_enter() at netbsd:mutex_vector_enter+0x2f5
[ 6133.4867957] sigpending1() at netbsd:sigpending1+0x24
[ 6133.4867957] nfs_rcvlock() at netbsd:nfs_rcvlock+0xed
[ 6133.4867957] nfs_request() at netbsd:nfs_request+0x48e
[ 6133.4867957] nfs_access() at netbsd:nfs_access+0x30b
[ 6133.4867957] VOP_ACCESS() at netbsd:VOP_ACCESS+0x55
[ 6133.4867957] getcwd_common() at netbsd:getcwd_common+0x2bd
[ 6133.4867957] vnode_to_path() at netbsd:vnode_to_path+0xbb
[ 6133.4867957] sysctl_vmproc() at netbsd:sysctl_vmproc+0x71c
[ 6133.4867957] sysctl_dispatch() at netbsd:sysctl_dispatch+0xb3
[ 6133.4867957] sys___sysctl() at netbsd:sys___sysctl+0xca
[ 6133.4867957] syscall() at netbsd:syscall+0x98
[ 6133.4867957] --- syscall (number 202) ---
[ 6133.4867957] netbsd:syscall+0x98:


>How-To-Repeat:

	run a small make on an NFS-mounted partition?
	(it has happened twice in a row for me)

>Fix:




Home | Main Index | Thread Index | Old Index