From nobody Sat Jan 24 00:32:32 2026 X-Original-To: dev-commits-src-branches@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 4dybNc5Mnnz6Q1ln for ; Sat, 24 Jan 2026 00:32:32 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dybNc3kslz452P for ; Sat, 24 Jan 2026 00:32:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769214752; 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=R0wntBkpzntS/3TlcyTVwo00aovrlwt7hq04DLDGNkE=; b=N3fsFFOHcL1xIt++BsKwoo4aOQ4YVQmGHJK4dpdCoWjFHEXIlqvu8/NKR3GsWYtDyXtJCs iJvSRiNvZKX+JTsSf1t47ysuCtuMtgcCy9IwCb45bo2e4pArBcYSH3MKN2sbvUgwDMEkBJ 9ACWCf04LkjjLMNZBNzuugIuWpx6Pdx7RGj3D7vDP45ZBeLtcFwFPcNOaWP9aVWT2eao5/ PPAOpzE2BaB3HDXPcpfvXt5JG4hy/s6ulKCKnaH5GgCi/SBj/6cZ/zYYl3s6jf5ITuxsmQ 91uYbGMsgixoi0CCrXC0UuZmoV39Z1yGQu05pVB/9aZ4U/58iEjZvcoQLVcG2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769214752; 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=R0wntBkpzntS/3TlcyTVwo00aovrlwt7hq04DLDGNkE=; b=c7vMoQMyjz0qJ+z1dPsEK0/KLXdYKByQMo0RTgSgoSctE6rKe9fFZ705yslsOonyvZctdm jOTWZOOtM7sCrzZpUPfbHyv1BRLy5LwtnTLEYBSvmNL9l7lX0z9lEN6gseplXhQE/grWyA kkYoscJtXfdsv6Fo0Wu68jWrUl7i5FDyfSQoPD2LACB5q10d8odCDmIzrZ/cjyE8QNOAH5 eNFds8vAX3U+CCBzaypxp5+njTU+S1yZhaBTOlFxgGW7tl1j6CdfJaOrt6UDFW5DfOX8QY UJ8d+85QneTwQzwo0/RpPdTBmqlPav9NLlgO1kARh10WHtLCG6Ai8ZYJpxeNdg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769214752; a=rsa-sha256; cv=none; b=XD9ILZod3nSw6L/BYjTXWmYxNJNoQ5/cIjr66Dps+2jqaH8QL6NY4XqDbdr7dZyDV4KwpS 0mJF1ujJxra8BcmX16WR8kxTwp6+fNU7TRAwsdotLk8Bw9CZo8kCtJp8rtZw/VZmvuWwmr QpgARIMVvcaJD1G7r+Nc3tx8UGvNCIg5jUdygB2VsdO5LdTCdZQZnRLjF4pcM+g8F8f7rG JOLI/Y1kvDYkWKmDOZ6VsCGZhJNZadneY09u/X74z9j0B4X9hsVhs1+TmLoAhnny+bTxlx Uj8em90g+pjDbL1Ntt2DfIo22qkI9PNZc2i2OmwUPkOdTa5wZ+kZVGA+SR8PoQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dybNc3DJhzj8s for ; Sat, 24 Jan 2026 00:32:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 98e0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 24 Jan 2026 00:32:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 2a27aefcefe0 - stable/15 - swap_pager_getpages(): some pages from ma[] might be bogus List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/15 X-Git-Reftype: branch X-Git-Commit: 2a27aefcefe05fb531189b256bad63c3c8f5cea5 Auto-Submitted: auto-generated Date: Sat, 24 Jan 2026 00:32:32 +0000 Message-Id: <69741320.98e0.46a7bbee@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=2a27aefcefe05fb531189b256bad63c3c8f5cea5 commit 2a27aefcefe05fb531189b256bad63c3c8f5cea5 Author: Konstantin Belousov AuthorDate: 2026-01-13 13:35:28 +0000 Commit: Konstantin Belousov CommitDate: 2026-01-24 00:26:45 +0000 swap_pager_getpages(): some pages from ma[] might be bogus (cherry picked from commit d198ad51ea73bbb162336923a387f52b0b1c1f1d) --- sys/vm/swap_pager.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 012d89db3310..f6d201309349 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -1362,14 +1362,22 @@ static int swap_pager_getpages_locked(struct pctrie_iter *blks, vm_object_t object, vm_page_t *ma, int count, int *a_rbehind, int *a_rahead, struct buf *bp) { + vm_page_t m; vm_pindex_t pindex; - int rahead, rbehind; + int i, rahead, rbehind; VM_OBJECT_ASSERT_WLOCKED(object); KASSERT((object->flags & OBJ_SWAP) != 0, ("%s: object not swappable", __func__)); - pindex = ma[0]->pindex; + for (i = 0; i < count; i++) { + m = ma[i]; + if (m != bogus_page) { + pindex = m->pindex - i; + break; + } + } + MPASS(i != count); if (!swp_pager_haspage_iter(pindex, &rbehind, &rahead, blks)) { VM_OBJECT_WUNLOCK(object); uma_zfree(swrbuf_zone, bp); @@ -1399,8 +1407,11 @@ swap_pager_getpages_locked(struct pctrie_iter *blks, vm_object_t object, KASSERT(bp->b_npages <= PBUF_PAGES, ("bp_npages %d (rb %d c %d ra %d) not less than PBUF_PAGES %jd", bp->b_npages, rbehind, count, rahead, (uintmax_t)PBUF_PAGES)); - for (int i = 0; i < bp->b_npages; i++) - bp->b_pages[i]->oflags |= VPO_SWAPINPROG; + for (i = 0; i < bp->b_npages; i++) { + m = bp->b_pages[i]; + if (m != bogus_page) + m->oflags |= VPO_SWAPINPROG; + } bp->b_blkno = swp_pager_meta_lookup(blks, pindex - rbehind); KASSERT(bp->b_blkno != SWAPBLK_NONE, ("no swap blocking containing %p(%jx)", object, (uintmax_t)pindex)); @@ -1448,8 +1459,14 @@ swap_pager_getpages_locked(struct pctrie_iter *blks, vm_object_t object, */ VM_OBJECT_WLOCK(object); /* This could be implemented more efficiently with aflags */ - while ((ma[0]->oflags & VPO_SWAPINPROG) != 0) { - ma[0]->oflags |= VPO_SWAPSLEEP; + for (i = 0; i < count; i++) { + m = ma[i]; + if (m != bogus_page) + break; + } + MPASS(i != count); + while ((m->oflags & VPO_SWAPINPROG) != 0) { + m->oflags |= VPO_SWAPSLEEP; VM_CNT_INC(v_intrans); if (VM_OBJECT_SLEEP(object, &object->handle, PSWP, "swread", hz * 20)) { @@ -1463,9 +1480,10 @@ swap_pager_getpages_locked(struct pctrie_iter *blks, vm_object_t object, /* * If we had an unrecoverable read error pages will not be valid. */ - for (int i = 0; i < count; i++) - if (ma[i]->valid != VM_PAGE_BITS_ALL) + for (i = 0; i < count; i++) { + if (ma[i] != bogus_page && ma[i]->valid != VM_PAGE_BITS_ALL) return (VM_PAGER_ERROR); + } return (VM_PAGER_OK); @@ -1730,6 +1748,9 @@ swp_pager_async_iodone(struct buf *bp) for (i = 0; i < bp->b_npages; ++i) { vm_page_t m = bp->b_pages[i]; + if (m == bogus_page) + continue; + m->oflags &= ~VPO_SWAPINPROG; if (m->oflags & VPO_SWAPSLEEP) { m->oflags &= ~VPO_SWAPSLEEP;