mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
buf: Fix the dirtybufthresh check
dirtybufthresh is a watermark, slightly below the high watermark for dirty buffers. When a delayed write is issued, the dirtying thread will start flushing buffers if the dirtybufthresh watermark is reached. This helps ensure that the high watermark is not reached, otherwise performance will degrade as clustering and other optimizations are disabled (see buf_dirty_count_severe()). When the buffer cache was partitioned into "domains", the dirtybufthresh threshold checks were not updated. Fix this. Reported by: Shrikanth R Kamath <kshrikanth@juniper.net> Reviewed by: rlibby, mckusick, kib, bdrewery Sponsored by: Juniper Networks, Inc., Klara, Inc. Fixes:3cec5c77d6Differential Revision: https://reviews.freebsd.org/D28901 (cherry picked from commit369706a6f8)
This commit is contained in:
parent
095558ac89
commit
05812ed9e7
1 changed files with 4 additions and 2 deletions
|
|
@ -2325,11 +2325,13 @@ void
|
|||
bufbdflush(struct bufobj *bo, struct buf *bp)
|
||||
{
|
||||
struct buf *nbp;
|
||||
struct bufdomain *bd;
|
||||
|
||||
if (bo->bo_dirty.bv_cnt > dirtybufthresh + 10) {
|
||||
bd = &bdomain[bo->bo_domain];
|
||||
if (bo->bo_dirty.bv_cnt > bd->bd_dirtybufthresh + 10) {
|
||||
(void) VOP_FSYNC(bp->b_vp, MNT_NOWAIT, curthread);
|
||||
altbufferflushes++;
|
||||
} else if (bo->bo_dirty.bv_cnt > dirtybufthresh) {
|
||||
} else if (bo->bo_dirty.bv_cnt > bd->bd_dirtybufthresh) {
|
||||
BO_LOCK(bo);
|
||||
/*
|
||||
* Try to find a buffer to flush.
|
||||
|
|
|
|||
Loading…
Reference in a new issue