From nobody Tue Dec 9 10:35:10 2025 X-Original-To: dev-commits-src-main@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 4dQZxB2G1Kz6KMX7 for ; Tue, 09 Dec 2025 10:35:10 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dQZxB1XK0z3Qpk for ; Tue, 09 Dec 2025 10:35:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765276510; 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=S71MvmOkUnMCB2M1SWDq0hBJtMdaWSzl2Qc/hjQtBo4=; b=kILXrn28z3+K6sSyIrT0cWMWKLDK7L0PAXIqkgM4OMDWsxI4w6vZrnT0Xfu9aFdobwdCp1 xaNjkwbW3ReKcEjmmhao1uoEdkpzFqkQopOLci5y6oZquEgXwDgV2cstUUVG+p04vCdLer kb3h4n0K77KgtKj+Tbfsf4FIIM16Q1pUOkBAa2TkrugLzeqly8rhstS+hiI+JdKmX1yU9P BYjWvgkc3qhVcxt9MuMEzt6Nql4s2jJm/22kp+jID1iiSbGQT/74znEOpxWmRkS+Ii1Ndr rqdwSe5G92CaiiYaZbZoE//J9ze+OhJ9CDN8QWKiiVvJI1tPGfFvehXE+axtfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765276510; 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=S71MvmOkUnMCB2M1SWDq0hBJtMdaWSzl2Qc/hjQtBo4=; b=ltGZMwlsGUOHb7DbMcJ8Bk12GGcDyvrwpCcKaDRSKjl4pZ22fUG+NgrQ23NQUcB0+WGdRv pt+CuWxXms07+iO7WPqAicAdVKMOhx1LY8ny9DARr4uA6RH+N9sUnFhElJ9phvpUF/In04 WwrhubcPEc7CWIjyrEMoJGZhztR+rN82/GJP2m4X37GWO4xgiAi0Z7YNlEhQCMKYl2D9Op g01PqhEi4G+o0JuNgt/MjWhGUAwz7fCrnWN9onNZ7MP/rxe5xYE035M8ibM0XlDWG5yQXW r0JcNcwbbg7TWH5S35ZdvdJ/8OLYf2IOyGqfM9TmmdbVIddOxa9iyEnExBkQaQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765276510; a=rsa-sha256; cv=none; b=jdILdvBW7+N7czHpkZWwssy9gl0SpMmCbdhVVMSN82IdH6X2w/iS6UXv/KQNz+xwqkFnLv JkFyBmoA/qVvEhmmdf/GyaUpH2BMCKR0Daaoq7uJynhGYqaUi29ACl/5/qZYeLboSYMXjI fyaoy60u8RqY+B6sZpjLKPuYlvzz75E/Q6t3Ak5xbZB5HO+360koJqknLvTBa0xhI1gJKv pfKipA9qM8SB6u0fRD2t0vvcuxpWsOWaPAADHWhNyfl9CxnKamTrrTJZrPtqL7R1FJjcYB XiTadMsKWfud3p3DnI5Vhy+v6Apw8vARlSMrHdBxc7a32wKl2Hn3eYWg1cdBwA== 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 4dQZxB0pWKzvRn for ; Tue, 09 Dec 2025 10:35:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c72a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 09 Dec 2025 10:35:10 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Peter Holm Subject: git: f88300a7b56e - main - stress2: Added a regression test List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pho X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f88300a7b56e32808e91fc893e7f1afc67ce72fd Auto-Submitted: auto-generated Date: Tue, 09 Dec 2025 10:35:10 +0000 Message-Id: <6937fb5e.3c72a.51e8553a@gitrepo.freebsd.org> The branch main has been updated by pho: URL: https://cgit.FreeBSD.org/src/commit/?id=f88300a7b56e32808e91fc893e7f1afc67ce72fd commit f88300a7b56e32808e91fc893e7f1afc67ce72fd Author: Peter Holm AuthorDate: 2025-12-09 10:33:09 +0000 Commit: Peter Holm CommitDate: 2025-12-09 10:34:44 +0000 stress2: Added a regression test --- tools/test/stress2/misc/pg_zero.sh | 191 +++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/tools/test/stress2/misc/pg_zero.sh b/tools/test/stress2/misc/pg_zero.sh new file mode 100755 index 000000000000..4d34a59616e1 --- /dev/null +++ b/tools/test/stress2/misc/pg_zero.sh @@ -0,0 +1,191 @@ +#!/bin/sh + +# Regression test for: +# D53963: vm_fault: only rely on PG_ZERO when the page was newly allocated +# Test scenario suggestions by: kib + +# Problem seen: +# b[0] is 4. Expected 0 +# b[0] is 4. Expected 0 + +. ../default.cfg + +set -u +prog=$(basename "$0" .sh) +cat > /tmp/$prog.c < +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +static int debug = 0; +static int fail, fd, ok, parallel; +static volatile int done, go; +static char *buf; +static char *path = "/dev/md$mdstart"; + +#define PARALLEL 3 +#define RUNTIME 180 + +void * +wr(void *arg __unused) +{ + int n; + + while (done != 1) { + while (go == 0) { + usleep(10); + } + go = 2; + n = write(fd, buf, 512); + if (n == -1 && errno != EFAULT) + warn("write()"); + if (debug == 1) { + if (n == -1) + fail++; + else + ok++; + } + } + + return (NULL); +} + +int +test(void) +{ + size_t len; + int i, pagesize; + char *a, *b, *c, *p; + + pagesize = sysconf(_SC_PAGESIZE); + len = 3 * pagesize; + if ((p = mmap(NULL, len, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED) + err(1, "mmap(%ld pages", len); + if (mlock(p, len) == -1) + err(1, "mlock()"); + + a = p; + b = a + pagesize; + buf = b; + c = b + pagesize; + + memset(a, 2, pagesize); + memset(b, 4, pagesize); + memset(c, 8, pagesize); + + if (munlock(b, pagesize) == -1) + err(1, "munlock(b)"); + go = 1; + while (go == 1) + usleep(10); + if (munmap(b, pagesize) == -1) + err(1, "munmap(b)"); + + if (mmap(b, pagesize, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_FIXED, -1, 0) == MAP_FAILED) + err(1, "mmap(%d pages", pagesize); + + for (i = 0; i < pagesize; i++) { + if (b[i] != 0) { + fprintf(stderr, "b[%d] is %d. Expected 0\n", i, (int)b[i]); + return (1); + } + } + go = 0; + + if (munmap(p, len) == -1) + err(1, "Final munmap()"); + + return (0); +} + +int +run(void) +{ + pthread_t tid; + time_t start; + int e; + + ok = fail = 0; + go = 0; + e = pthread_create(&tid, NULL, wr, NULL); + if (e) + errc(1, e, "pthread_create()"); + fail = ok = 0; + start = time(NULL); + while ((time(NULL) - start) < 30) { + if (lseek(fd, 0, SEEK_SET) == -1) + err(1, "lseek(0)"); + if (fsync(fd) != 0) + err(1, "fsync()"); + if ((e = test()) != 0) + break; + } + done = 1; + pthread_join(tid, NULL); + if (debug == 1) + fprintf(stderr, "Fail = %3d, OK = %5d, parallel = %d\n", fail, ok, parallel); + _exit(e); +} + +int +main(void) +{ + pid_t pids[PARALLEL]; + time_t start; + int e, i, status; + + if ((fd = open(path, O_WRONLY)) == -1) + err(1, "open(%s)", path); + e = 0; + start = time(NULL); + while ((time(NULL) - start) < RUNTIME && e == 0) { + parallel = arc4random() % PARALLEL + 1; + for (i = 0; i < parallel; i++) { + if ((pids[i] = fork()) == 0) + run(); + if (pids[i] == -1) + err(1, "fork()"); + } + for (i = 0; i < parallel; i++) { + if (waitpid(pids[i], &status, 0) == -1) + err(1, "waitpid(%d)", pids[i]); + if (status != 0) { + if (WIFSIGNALED(status)) + fprintf(stderr, + "pid %d exit signal %d\n", + pids[i], WTERMSIG(status)); + } + e += status == 0 ? 0 : 1; + } + } + close(fd); + + return (e); +} +EOF + +mycc -o /tmp/$prog -Wall -Wextra -O0 -g /tmp/$prog.c -pthread || exit 1 + +mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart +truncate -s 2g $diskimage +mdconfig -a -t vnode -f $diskimage -u $mdstart +../testcases/swap/swap -t 3m -i 20 -l 100 > /dev/null & +sleep 3 +cd /tmp; ./$prog; s=$?; cd - +pkill swap +wait +rm -f /tmp/$prog.c /tmp/$prog $diskimage +mdconfig -d -u $mdstart +exit $s