From nobody Mon May 26 03:05:46 2025 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 4b5LHZ71q6z5x8TY; Mon, 26 May 2025 03:05:46 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b5LHZ5xH5z3djv; Mon, 26 May 2025 03:05:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748228746; 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=7koC2WgvXJVjePestPzHPX4fz26HNfTZH+qwMJmBqzk=; b=t007OYpjVVpocNb5tjA9FBrg6sWl1i+VsIdSrIVm4Sy1/lx+tWVUm2Pe8ruhdt/7mQMnqt gJyI0vHcE0GQzU2XVgvUULOVGBd0N29eADD9LUAG8c8DRIigJfujNPFvQ6a9w1l9a7Qjte BHRl7HmkaUImCVIUiMsoj1pxhyDFJqyClLq2PKO4fsDwIop/RPnNLC91qC6y1nyx+Ri5wP NDSmLzoO2QNEzmSuCqGvVytmSNTaRfm4T2G3140YBtx21PaVqGe8i2YYNlf/cBIfjakNfc cCmIA8976AqL1GI1WIyjvxom5Gcws+1fRoIC59/AIuzfrfF/DnN71cIKio8/1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748228746; 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=7koC2WgvXJVjePestPzHPX4fz26HNfTZH+qwMJmBqzk=; b=mYCWsk2I4kWfurMzDzImWbG47R7SLWEgcs66YsLVpnIPCAvXPOdnVGu3D2Y/HwZCk1911b 13cZPhhR7E6/MbIVYOFcYH1P1s/8Hsi2RtrSO2eVZV5P4YR4LiE4AMG8037Bpza70uQ8fv bEAJb1Oh3/qWw7pckNrdFCtaKvau/sQkBhGk/mtYZv+bJay2dCtdjkc/vNYRIAg5QOB1Km RmZ+6Vfv+jQbN6a8nH9EyL7rCr8ggQgzgT/qG9kSYQgjHqiIt8UeTzBeYAnDLg1wbbUBDF lFeHky2Zp1Bh9H0rNu6ZmpIL0ariT1lQbnM/4cFcUo6qOHeXUgs59+2WfuLkuQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1748228746; a=rsa-sha256; cv=none; b=RIJdAmRQBqLisO+HBWarXysDv5sOys1bDKO9en7ndwOMJzifXsPQTeaVUurQyuW0T/+6l5 0Fw2g+ITUD5nXzgv6ccsjVXOpyMkGWTxH4DL+4n1g9aWtz43lgi9BLvPR1dT815OBATq/r O+btfgAAVtMiue6vRsPqeahVEXtL1Ap8QkgQB2OCdEQ6MbTYlKTo4WA6Cov/70V7iib6Rj Jaj6wYZvFs55kF5GCepehn9TA8NAs1ta7OLV9m3sf6DyHYAQqeMAT93vczmmxvpFdrw31t jK1TvTqPC7L93QFZGC2SZDnxWGf/746YdQDJflrjg31NpiLGcKEGm5+nFaZsDg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4b5LHZ5VGJzq4p; Mon, 26 May 2025 03:05:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54Q35kkX042233; Mon, 26 May 2025 03:05:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54Q35kkq042231; Mon, 26 May 2025 03:05:46 GMT (envelope-from git) Date: Mon, 26 May 2025 03:05:46 GMT Message-Id: <202505260305.54Q35kkq042231@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Doug Moore Subject: git: 68e3875b623b - main - vm_object: drop reverse walk from collect_flush 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dougm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 68e3875b623b56f83e276afe6ed5334545684ba2 Auto-Submitted: auto-generated The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=68e3875b623b56f83e276afe6ed5334545684ba2 commit 68e3875b623b56f83e276afe6ed5334545684ba2 Author: Doug Moore AuthorDate: 2025-05-26 03:02:37 +0000 Commit: Doug Moore CommitDate: 2025-05-26 03:02:37 +0000 vm_object: drop reverse walk from collect_flush In vm_object_page_collect_flush, following a forward walk from page p seeking more pages to which vm_object_page_remove_write might be applied, a backward walk from page p is attempted. It never finds a page, and so this change removes that walk, and renames the function to better indicate its use for one specific application only. It never finds a page because collect_flush() is only called from one place, in vm_object_page_clean(). If there was a page p-1 to be found, then either it is less than tstart, or it would have been found in the previous iteration. If it less than tstart, then page_clean() shouldn't be messing with it. If it was found in the previous iteration, then vm_object_page_collect_flush() would have been called in that iteration, and page p would have been the first page in the forward walk from p-1, and it would have been processed then, and so p would not be passed to vm_object_page_collect_flush now. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D50517 --- sys/vm/vm_object.c | 69 ++++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index b885b3eda5c1..9b00aea9cdc8 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -110,9 +110,6 @@ static int old_msync; SYSCTL_INT(_vm, OID_AUTO, old_msync, CTLFLAG_RW, &old_msync, 0, "Use old (insecure) msync behavior"); -static int vm_object_page_collect_flush(struct pctrie_iter *pages, - vm_page_t p, int pagerflags, int flags, boolean_t *allclean, - boolean_t *eio); static boolean_t vm_object_page_remove_write(vm_page_t p, int flags, boolean_t *allclean); static void vm_object_backing_remove(vm_object_t object); @@ -1001,6 +998,31 @@ vm_object_page_remove_write(vm_page_t p, int flags, boolean_t *allclean) } } +static int +vm_object_page_clean_flush(struct pctrie_iter *pages, vm_page_t p, + int pagerflags, int flags, boolean_t *allclean, boolean_t *eio) +{ + vm_page_t ma[vm_pageout_page_count]; + int count, runlen; + + vm_page_lock_assert(p, MA_NOTOWNED); + vm_page_assert_xbusied(p); + ma[0] = p; + for (count = 1; count < vm_pageout_page_count; count++) { + p = vm_radix_iter_next(pages); + if (p == NULL || vm_page_tryxbusy(p) == 0) + break; + if (!vm_object_page_remove_write(p, flags, allclean)) { + vm_page_xunbusy(p); + break; + } + ma[count] = p; + } + + vm_pageout_flush(ma, count, pagerflags, 0, &runlen, eio); + return (runlen); +} + /* * vm_object_page_clean * @@ -1073,7 +1095,7 @@ rescan: continue; } if (object->type == OBJT_VNODE) { - n = vm_object_page_collect_flush(&pages, p, pagerflags, + n = vm_object_page_clean_flush(&pages, p, pagerflags, flags, &allclean, &eio); pctrie_iter_reset(&pages); if (eio) { @@ -1120,45 +1142,6 @@ rescan: return (res); } -static int -vm_object_page_collect_flush(struct pctrie_iter *pages, vm_page_t p, - int pagerflags, int flags, boolean_t *allclean, boolean_t *eio) -{ - vm_page_t ma[2 * vm_pageout_page_count - 1]; - int base, count, runlen; - - vm_page_lock_assert(p, MA_NOTOWNED); - vm_page_assert_xbusied(p); - base = nitems(ma) / 2; - ma[base] = p; - for (count = 1; count < vm_pageout_page_count; count++) { - p = vm_radix_iter_next(pages); - if (p == NULL || vm_page_tryxbusy(p) == 0) - break; - if (!vm_object_page_remove_write(p, flags, allclean)) { - vm_page_xunbusy(p); - break; - } - ma[base + count] = p; - } - - pages->index = ma[base]->pindex; - for (; count < vm_pageout_page_count; count++) { - p = vm_radix_iter_prev(pages); - if (p == NULL || vm_page_tryxbusy(p) == 0) - break; - if (!vm_object_page_remove_write(p, flags, allclean)) { - vm_page_xunbusy(p); - break; - } - ma[--base] = p; - } - - vm_pageout_flush(&ma[base], count, pagerflags, nitems(ma) / 2 - base, - &runlen, eio); - return (runlen); -} - /* * Note that there is absolutely no sense in writing out * anonymous objects, so we track down the vnode object