diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2020-11-26 18:00:26 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2020-11-26 18:00:26 +0000 |
| commit | 3b1f974bfbf4d06aaa3bc4a1601345070ed4a293 (patch) | |
| tree | 9eca6d5fdee9ffaa966bd0e2a72950420e7bc6dd /sys/kern | |
| parent | 50696a6e8cbfdbf4a0d00f2f85f1951aa0d8e23d (diff) | |
Notes
Diffstat (limited to 'sys/kern')
| -rw-r--r-- | sys/kern/subr_param.c | 5 | ||||
| -rw-r--r-- | sys/kern/vfs_vnops.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/sys/kern/subr_param.c b/sys/kern/subr_param.c index feb01f63dffd2..032edd4229e17 100644 --- a/sys/kern/subr_param.c +++ b/sys/kern/subr_param.c @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include <sys/msgbuf.h> #include <sys/sysctl.h> #include <sys/proc.h> +#include <sys/vnode.h> #include <vm/vm.h> #include <vm/vm_param.h> @@ -184,6 +185,10 @@ init_param1(void) */ ticks = INT_MAX - (hz * 10 * 60); + vn_lock_pair_pause_max = hz / 100; + if (vn_lock_pair_pause_max == 0) + vn_lock_pair_pause_max = 1; + #ifdef VM_SWZONE_SIZE_MAX maxswzone = VM_SWZONE_SIZE_MAX; #endif diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 19996f268426d..f65d44122af5b 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -3332,11 +3332,16 @@ SYSCTL_ULONG(_debug, OID_AUTO, vn_lock_pair_pause, CTLFLAG_RD, &vn_lock_pair_pause_cnt, 0, "Count of vn_lock_pair deadlocks"); +u_int vn_lock_pair_pause_max; +SYSCTL_UINT(_debug, OID_AUTO, vn_lock_pair_pause_max, CTLFLAG_RW, + &vn_lock_pair_pause_max, 0, + "Max ticks for vn_lock_pair deadlock avoidance sleep"); + static void vn_lock_pair_pause(const char *wmesg) { atomic_add_long(&vn_lock_pair_pause_cnt, 1); - pause(wmesg, prng32_bounded(hz / 10)); + pause(wmesg, prng32_bounded(vn_lock_pair_pause_max)); } /* |
