From nobody Sat Jan 24 00:32:23 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 4dybNS3tgXz6Q1DV for ; Sat, 24 Jan 2026 00:32:24 +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 4dybNR6BNfz4513 for ; Sat, 24 Jan 2026 00:32:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769214743; 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=av3CD6WaYAlD/Zilnq7QDSlyXCCG/Qjv+riYkYqObXk=; b=N7kEGBIeQDadRZwxuUwDpcH+58oM0lEyng8pPNqIckE+BQBaC57g6NatMsdZ4mDvhj6iiM W1S7Sz8pziJjwwOrdVFZdhKlaSE5eMu4jMctDW1SIQkf3uljQ3DRViHJqwZcUSfur2YNRw ekp8YK6dG41WUPWzyJdbueRo3RTgP2vm2I7rmhpOeujMSU67S+5MvA3q110afaVMQjMzOF snYhOx6byel0+IFFHdHRGAR36SknnqgW48c9Y2PyG1lha/vPEoVF1ffQcX+xcuvwFG6E/H JxPQLHyO6IqjYFwhnYXRQXHfYEmAAOtJHqh5wV5xw6L52cdKEv9izeZ0yi9NfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769214743; 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=av3CD6WaYAlD/Zilnq7QDSlyXCCG/Qjv+riYkYqObXk=; b=lGxeTV8tLPzD+FXU7IJ2r9qHuKiRaCfyBzpXTX18z+Eng7gA1WHGEw6GKyQIyReqXzAci1 YspWna6ROK+GNOLm7bxnRy0MlFsnsoePWH0O2/FwT2bOrEqht+n6v7aj/Eg2MAFJE34DDs n6gKB0CpJ/XZXMY7lBEWUog9ljDtbR9XvTaVeQ8Z//y5vLt0Cl6po+JMWZgVbojw7yGyjn 7OeaPOnk4RCsZzVgz5XffoIsF2daB+c7QvRhUdrM6sZxMpTQS0MJ5mtagp0zgrDoUfyKCH PcvVrhWaVZAwpgvrVy7aUMv1WTOJx5dODG4MTSGzeRMyd+qBDSwbHWYBtEMaXQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769214743; a=rsa-sha256; cv=none; b=Qm9kCxoq+L+suJer18kg0tWAYO5O28utQjOhNkpM4T5o7qPTuEJCu1Q/yKwGvEoblFy9Xo LsIF6SBPG56yqdblJ4fJGn/7HtGfyYxGx4ePT4EAlXpS6ESIRXPGjVZnF7D+viu3ykL7Tr DfcrY/K5ALhWEOX4YxkD54qzwqf0ofjhEZFFJrHnY8Py6o3IT8RLci+Xav3EW87Jo2My7K 6eNPV4kkHYvcWaxnJzkBb1dr3wMTzDj4idKiX0iaeyxP6ko3hEMS9CWUuzrdZIYpjHrFSL kX8/zo1Vr24Z8AcNn8VTQ7WDlLvf/pU+1DNIE78Sc6jbBfnjyCFrL1kj/YASrg== 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 4dybNR5HQszj6L for ; Sat, 24 Jan 2026 00:32:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id b10d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 24 Jan 2026 00:32:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 0ab96c91676d - stable/15 - rfork(2): fix swap accounting in vmspace_unshare() 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: 0ab96c91676d8f5158227ae1d1465019ef97cdb3 Auto-Submitted: auto-generated Date: Sat, 24 Jan 2026 00:32:23 +0000 Message-Id: <69741317.b10d.7c225a06@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=0ab96c91676d8f5158227ae1d1465019ef97cdb3 commit 0ab96c91676d8f5158227ae1d1465019ef97cdb3 Author: Konstantin Belousov AuthorDate: 2026-01-04 00:19:36 +0000 Commit: Konstantin Belousov CommitDate: 2026-01-24 00:26:45 +0000 rfork(2): fix swap accounting in vmspace_unshare() (cherry picked from commit de770681234d001a1f4cdb8121179331dc3a2def) --- sys/vm/swap_pager.c | 10 ++++++++-- sys/vm/vm.h | 1 + sys/vm/vm_map.c | 7 +++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index e0bdca07ff0f..3f077289ac30 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -330,7 +330,7 @@ out_error: } void -swap_reserve_force(vm_ooffset_t incr) +swap_reserve_force_by_cred(vm_ooffset_t incr, struct ucred *cred) { u_long pincr; @@ -346,7 +346,13 @@ swap_reserve_force(vm_ooffset_t incr) #endif pincr = atop(incr); atomic_add_long(&swap_reserved, pincr); - swap_reserve_force_rlimit(pincr, curthread->td_ucred); + swap_reserve_force_rlimit(pincr, cred); +} + +void +swap_reserve_force(vm_ooffset_t incr) +{ + swap_reserve_force_by_cred(incr, curthread->td_ucred); } void diff --git a/sys/vm/vm.h b/sys/vm/vm.h index d28c84dd1c95..0da1891dfcc7 100644 --- a/sys/vm/vm.h +++ b/sys/vm/vm.h @@ -168,6 +168,7 @@ void vm_ksubmap_init(struct kva_md_info *); bool swap_reserve(vm_ooffset_t incr); bool swap_reserve_by_cred(vm_ooffset_t incr, struct ucred *cred); void swap_reserve_force(vm_ooffset_t incr); +void swap_reserve_force_by_cred(vm_ooffset_t incr, struct ucred *cred); void swap_release(vm_ooffset_t decr); void swap_release_by_cred(vm_ooffset_t decr, struct ucred *cred); diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 68dcadd2b2f1..4c33b786eaa0 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -4957,6 +4957,13 @@ vmspace_unshare(struct proc *p) if (newvmspace == NULL) return (ENOMEM); if (!swap_reserve_by_cred(fork_charge, p->p_ucred)) { + /* + * The swap reservation failed. The accounting from + * the entries of the copied newvmspace will be + * subtracted in vmspace_free(), so force the + * reservation there. + */ + swap_reserve_force_by_cred(fork_charge, p->p_ucred); vmspace_free(newvmspace); return (ENOMEM); }