aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2026-04-22 05:09:34 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2026-05-03 19:58:37 +0000
commit067cfac2e7bd9dc857fb6cc504c01b0249bcd1b7 (patch)
tree0a074e2f2833118b0e9890988326dc641a693943
parentf9458655e78f6532e962a13d28d6a6086b4156de (diff)
bufspace_wait(): only try to help bufdaemon if there is a chance to help
Only call buf_flush() if there are some dirty buffers belonging to the vnode we are allocating the buffer for. Otherwise the bd dirty queue scan cannot find anything and it makes no sense to spend CPU doing it.
-rw-r--r--sys/kern/vfs_bio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 8f47a7abbc5e..675f6fb4e526 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -727,7 +727,8 @@ bufspace_wait(struct bufdomain *bd, struct vnode *vp, int gbflags,
BD_LOCK(bd);
while (bd->bd_wanted) {
if (vp != NULL && vp->v_type != VCHR &&
- (td->td_pflags & TDP_BUFNEED) == 0) {
+ (td->td_pflags & TDP_BUFNEED) == 0 &&
+ vp->v_bufobj.bo_dirty.bv_cnt > 0) {
BD_UNLOCK(bd);
/*
* getblk() is called with a vnode locked, and