diff options
author | 2012-05-30 19:32:19 +0000 | |
---|---|---|
committer | 2012-05-30 19:32:19 +0000 | |
commit | 26be189a511c89149c6509ba90d930a6fc5425fa (patch) | |
tree | 33c55683e800293be5f393b4a5beda9ffece9966 /lib/libc | |
parent | Correctly compute the IOC3 device mask on MENET boards. (diff) | |
download | wireguard-openbsd-26be189a511c89149c6509ba90d930a6fc5425fa.tar.xz wireguard-openbsd-26be189a511c89149c6509ba90d930a6fc5425fa.zip |
Fix a few issues in the pressure logic when the available buffers run low:
- make sure the buffer reclaiming loop in buf_get() actually does something
but spin, if `backoffpages' is nonzero and all free queues have been drained.
- don't forget to set a poor man's condition variable to nonzero before
tsleeping on it in bufadjust(), otherwise you'll never get woken up.
- don't be too greedy and reassing backoffpages a large amount immediately
after bufadjust() has been called.
This fixes reproduceable hangs seen during heavy I/O (such as `make install'
of many large files, e.g. run in /usr/src/lib with NOMAN=) on systems with
a challenged number of pages (less than a few thousands, total).
Part of this is temporary bandaid until a better pressure logic is devised,
but it's solving an immediate problem. Been in snapshots for a solid month.
Diffstat (limited to 'lib/libc')
0 files changed, 0 insertions, 0 deletions