diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2012-05-30 19:32:20 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2012-05-30 19:32:20 +0000 |
commit | 4549bc77a3f6e2d94d47fedb36869999184c528d (patch) | |
tree | 2f6cdf29580d9580d4ab18f9b30c543bb95bac12 /distrib/amd64 | |
parent | efe7d7e7f533cee65ce661a43efeb80fda3257fb (diff) |
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 'distrib/amd64')
0 files changed, 0 insertions, 0 deletions