Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Mar 2021 14:06:46 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 0bec69d1898f - stable/12 - buf: Fix the dirtybufthresh check
Message-ID:  <202103041406.124E6kbl066608@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=0bec69d1898ff310aaf4915626e00887d803bfaf

commit 0bec69d1898ff310aaf4915626e00887d803bfaf
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-02-25 15:04:44 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-03-04 14:06:43 +0000

    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:          3cec5c77d6
    Differential Revision:  https://reviews.freebsd.org/D28901
    
    (cherry picked from commit 369706a6f887f8ffe1037d78bc31565ec701d72b)
---
 sys/kern/vfs_bio.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index d23a19f37907..6c5286d30871 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -2305,11 +2305,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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202103041406.124E6kbl066608>