From 205b0dd928b720626225ed7dc0e3723407535c2c Mon Sep 17 00:00:00 2001 From: mlelstv Date: Fri, 19 May 2023 15:42:43 +0000 Subject: [PATCH] Neither limit the number of requests for the page daemon. Otherwise you may deadlock when the backend needs to allocate memory and the page daemon needs to flush dirty vnd buffers. See PR 57421 for details. --- sys/dev/vnd.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sys/dev/vnd.c b/sys/dev/vnd.c index 1e597b5e9b48..9df8e2ad7a2b 100644 --- a/sys/dev/vnd.c +++ b/sys/dev/vnd.c @@ -1,4 +1,4 @@ -/* $NetBSD: vnd.c,v 1.288 2023/03/14 12:55:43 hannken Exp $ */ +/* $NetBSD: vnd.c,v 1.289 2023/05/19 15:42:43 mlelstv Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2008, 2020 The NetBSD Foundation, Inc. @@ -91,7 +91,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.288 2023/03/14 12:55:43 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.289 2023/05/19 15:42:43 mlelstv Exp $"); #if defined(_KERNEL_OPT) #include "opt_vnd.h" @@ -123,6 +123,8 @@ __KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.288 2023/03/14 12:55:43 hannken Exp $"); #include #include +#include + #include #include @@ -559,7 +561,7 @@ vndstrategy(struct buf *bp) * thread to add requests, as a wedge on vnd queues * requests with biodone() -> dkstart() -> vndstrategy(). */ - if (curlwp != vnd->sc_kthread) { + if (curlwp != vnd->sc_kthread && curlwp != uvm.pagedaemon_lwp) { while (vnd->sc_pending >= VND_MAXPENDING(vnd)) tsleep(&vnd->sc_pending, PRIBIO, "vndpc", 0); }