CVSROOT:        /cvs
Module name:    src
Changes by:     [email protected]    2019/02/07 08:11:38

Modified files:
        lib/libc/sys   : sysctl.2 
        share/man/man4 : options.4 
        share/man/man9 : malloc.9 
        sys/kern       : subr_witness.c 
        sys/sys        : malloc.h sysctl.h 

Log message:
Add lock stack trace saving for witness(4).

This lets witness(4) save a stack trace on each lock acquisition.
The saved traces can be viewed in ddb(4) when showing the currently
held locks, which may help when debugging incorrect locking.

Sample output:

ddb{0}> show all locks
Process 63836 (rm) thread 0xffff8000221e52c8 (435004)
exclusive rrwlock inode r = 0 (0xfffffd8119a092c0) locked @ 
/usr/src/sys/ufs/ufs/ufs_vnops.c:1547
#0  witness_lock+0x419
#1  _rw_enter+0x2bb
#2  _rrw_enter+0x42
#3  VOP_LOCK+0x3f
#4  vn_lock+0x36
#5  vfs_lookup+0xa1
#6  namei+0x2b3
#7  dounlinkat+0x85
#8  syscall+0x338
#9  Xsyscall+0x128
exclusive kernel_lock &kernel_lock r = 1 (0xffffffff81e6a5f0) locked @ 
/usr/src/sys/arch/amd64/amd64/intr.c:525
#0  witness_lock+0x419
#1  syscall+0x2b6
#2  Xsyscall+0x128

The saving adds overhead, so it is not enabled by default. It can be
taken into use by setting sysctl kern.witness.locktrace=1 at runtime
or by defining WITNESS_LOCKTRACE in the kernel configuration.

Feedback and OK anton@

Reply via email to