From nobody Sat Mar 25 22:55:49 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4PkZDk1ZQbz41rKg; Sat, 25 Mar 2023 22:55:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PkZDk11twz4F0m; Sat, 25 Mar 2023 22:55:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679784950; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=pr5dstzAT0HCcYtPD6UjalzHR5A15IEey8AoN0Hnz94=; b=GAa/ODOcPF6ZXqfHVrIfThihFjFXS1RWT3DDxMuV22e5s7iVWfbI89FV2aglO+nm9EORQL +sMG0+2+7wUvUHt795DeNpz+Oq3h8nhwnXiQcdRi0GoQcO8lSUel6MdqkJ7cX9+EikE1Vy fKSdEBFKerozXrHj5HSTUC9UC9Qx0N9U571zdEMfTFtzrchPYwbvSm0SViXD9KxKQYk0Fq qnimF+Xm2sxRaNRogJbgfdM3hdUmVfhq3QNvduqjdDk50bN4P51gjBjwZ+FFrTZpn9Gctt 1wQ78JgCaBTGJAaX3DQqNEvma+zfps51+DY2UT3BZZTpEAEwNCUDS8iRqCEjsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679784950; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=pr5dstzAT0HCcYtPD6UjalzHR5A15IEey8AoN0Hnz94=; b=JB+q4x1flkNxp2SmptswYh8pC3UVI2l4feLPxSRz3yYRwt2ef3whJeiVFNu6lOX7I0dXBw wqlAXi+XBLXIuMn3kgjQE7gKc0znQsWh/R1M1NnGcwv82swWE0CgqAh7ZibNtnsXlwET1J YzPDSL4iSvDzPONeY8o8M+JyDf2q6QVpU9idcvZVbB6X0nKX1/LO7AYy07IA9YZdXwvAAv CHrqw9M7zgRY4s+KYyb32GH1sRllxfyO+IcTTlqnC0kvme8gZUqnMVP9rT898Kl/Ko4z5o FiG5fBhdsOTiR1Pyc7LGc73LU9TiRDkTAu6zjuQ30vLUhbpLAPEBhyfnot6Vnw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679784950; a=rsa-sha256; cv=none; b=arpmXOQCRwXLouqpk7v8I3X257izSsDH5pRri7Fvn/sfVX0Lf66Ya8AdRNArFD3nzhu+dK 3U97VoGojJosqNInHwrF83zb1IiNg6yP0LRaZdQyzc6CSVuT4DzvhKhjw2SVPPZF7T4LkA RE3+6o3OxuuYYXtSUtnG1oSc2MTaR9atcvgR+FTiKdccTozn0yeA9VI0iyg7WC2LErdCgs A5Msz6Mpmf8iHSu9+ApSKX3xPMbDIqPKC8OP+Lc/kBIcxz59SoRVye59VkOSFclcDkSBfA Xt91dUdjYNb9ByMkBVq/EWEAYqPy/4xWpSQFtPHix/WBjhK10aTnXBXRxFv3Cw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PkZDk04qPzHKJ; Sat, 25 Mar 2023 22:55:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 32PMtn4k054031; Sat, 25 Mar 2023 22:55:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32PMtnil054030; Sat, 25 Mar 2023 22:55:49 GMT (envelope-from git) Date: Sat, 25 Mar 2023 22:55:49 GMT Message-Id: <202303252255.32PMtnil054030@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 28f957b8b3a2 - main - vnode_pager_input: return runningbufspace back List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 28f957b8b3a22086927451fee89789fdf596260b Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=28f957b8b3a22086927451fee89789fdf596260b commit 28f957b8b3a22086927451fee89789fdf596260b Author: Konstantin Belousov AuthorDate: 2023-03-24 21:12:21 +0000 Commit: Konstantin Belousov CommitDate: 2023-03-25 22:55:29 +0000 vnode_pager_input: return runningbufspace back Both vnode_pager_input_smlfs() and vnode_pager_generic_getpages() increment runningbufspace, but also both delegate io completion handling on the pbuf to either plain bdone() or filesystem-specific strategy routine. Accidentally, for e.g. UFS it is g_vfs_strategy()/g_vfs_done(). The later calls bufdone() which handles runningbufspace reclamation. For plain bdone() io done handler, nothing would return accounted b_runningbufspace back. Do it in the new helper vnode_pager_input_bdone(), as well as in vnode_pager_generic_getpages_done() explicitly. Note that potential multiple calls to runningbufwakeup() for the same pbuf or buf completion are safe. runningbufwakeup() clears accounting for the buffer, so second and later calls are nop. The problem was found due to tarfs using small vnode pager input but not g_vfs_strategy(). Reported by: des Reviewed by: markj, sjg Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D39263 --- sys/vm/vnode_pager.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index 56caf75d7f90..6103daaf13c2 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -640,6 +640,13 @@ vnode_pager_addr(struct vnode *vp, vm_ooffset_t address, daddr_t *rtaddress, return (err); } +static void +vnode_pager_input_bdone(struct buf *bp) +{ + runningbufwakeup(bp); + bdone(bp); +} + /* * small block filesystem vnode pager input */ @@ -686,7 +693,7 @@ vnode_pager_input_smlfs(vm_object_t object, vm_page_t m) /* build a minimal buffer header */ bp->b_iocmd = BIO_READ; - bp->b_iodone = bdone; + bp->b_iodone = vnode_pager_input_bdone; KASSERT(bp->b_rcred == NOCRED, ("leaking read ucred")); KASSERT(bp->b_wcred == NOCRED, ("leaking write ucred")); bp->b_rcred = crhold(curthread->td_ucred); @@ -1204,6 +1211,8 @@ vnode_pager_generic_getpages_done(struct buf *bp) error = (bp->b_ioflags & BIO_ERROR) != 0 ? bp->b_error : 0; object = bp->b_vp->v_object; + runningbufwakeup(bp); + if (error == 0 && bp->b_bcount != bp->b_npages * PAGE_SIZE) { if (!buf_mapped(bp)) { bp->b_data = bp->b_kvabase;