From nobody Tue Apr 7 13:54:44 2026 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 4fqnkX5pfFz6YJRV for ; Tue, 07 Apr 2026 13:54:44 +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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fqnkX3Hlqz3W7w for ; Tue, 07 Apr 2026 13:54:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775570084; 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=R+4ZkBphbtblkUtZ7AU0uOeVFwpolXUKmglvAbSiMOg=; b=Aoc8niIZSntZRdaGNc/eM69utpOawrRSSk5+ijYWhP3y1UExPl6s4N/3lnsfhqgvKrg07k 7l6/mNVU0Dp3vK/e+1AMW7WUpB+Khh/h1OC1yeCCNspahBpgmL3rji6503uwwm+MtSK5yd FCafNkNurfFarqAhmONJGJH5pFDpLB1aWbtyA9uUQMleGkRoT7iSKRbCVOq23wYwo2VGZ4 aZxZ44kR0bjM/a0g0w2Bz30hPxkFfsW1e3gVSecQ70BSye5vWBl+Z/Q7rJ/PHHzkoqLXIV S59b2mAyRXUHATquChMcHp88aQ2kjvsX7DMcVoBfmH+N3FWATC1iQT2kOv+x8Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775570084; a=rsa-sha256; cv=none; b=wn5eo05QHMWW8asVSEb+AYRHsgdKloSEfSVlqOGRT5b6fESaPsRG72Qgk3l6IABPa0WJAf s0N3PwBy6hfALLD/zMY/bMfzhQ0G4P+BDhXbHZ2dhYrel+zIeBgJc8Tek8tYlXHxMOJyLu NmEUXlf/AjOlkLJgfBaMCDrhfC+QpUGaEMItpeSln484OTZk0qb3kaRe74WnH5PlTcYaOf a7+aTzycrPtwMmtrN/njJlDfK6vmTFMaVyeh8fOuzP2fjWxxAjMYwJR3LlqByx8rCkzqkX zB2qMVbVqLJMz2Pbru8XvlpGNuMabJ1l7MD2FJeeqTrRQRbtGOP1UrnkJjwQJw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775570084; 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=R+4ZkBphbtblkUtZ7AU0uOeVFwpolXUKmglvAbSiMOg=; b=j8ZyYPld9599cbUEeIudSZF1vpx90ozTXveg3yXXpXjYtEO7DQcVoWIfB0g98ktASga53F d8cOlbac6HzkqupJ2B32UBpyM2SOV2Fta3oiul+rx0gfuXjZt62a0F1ItgQ6wCW/1kxSrY +4hZNAkb2e9M37egM2KFEvt2WbIkIMGO8ByclePUfO6HPBEzanJSs0IQkM+unSZgeLKxmq mjxJPBvIgMXbuiuk38awJDGYcmvGEWy1mrrqUEaQltw8rcguLN7dps+1bkW/0bMsnz9L5j dVDfdPriMncspNVd39lPfxeztyY7tg249kxtsAbkfiZd0Sh3Yi2ABODkMlzk3A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fqnkX260QzjdY for ; Tue, 07 Apr 2026 13:54:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3aa01 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 07 Apr 2026 13:54:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 8244dd326265 - main - tunefs: Better fix for arm64 alignment issues 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: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8244dd326265867293b2286efc3d571f06ef0dab Auto-Submitted: auto-generated Date: Tue, 07 Apr 2026 13:54:44 +0000 Message-Id: <69d50ca4.3aa01.23788f2e@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=8244dd326265867293b2286efc3d571f06ef0dab commit 8244dd326265867293b2286efc3d571f06ef0dab Author: Dag-Erling Smørgrav AuthorDate: 2026-04-07 13:54:28 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-04-07 13:54:28 +0000 tunefs: Better fix for arm64 alignment issues Rather than trust that the compiler will lay out the stack frame the way we expect it to, use a union to force the correct alignment. MFC after: 1 week Fixes: 616f47f176c3 ("tunefs: Fix alignment warning on arm64") Reviewed by: kevans, mckusick Differential Revision: https://reviews.freebsd.org/D56245 --- sbin/tunefs/tunefs.c | 64 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/sbin/tunefs/tunefs.c b/sbin/tunefs/tunefs.c index 56f343a5a4db..56160dafce28 100644 --- a/sbin/tunefs/tunefs.c +++ b/sbin/tunefs/tunefs.c @@ -44,6 +44,7 @@ #include #include +#include #include #include #include @@ -51,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +74,11 @@ static int journal_alloc(int64_t size); static void journal_clear(void); static void sbdirty(void); +typedef union { + char buf[MAXBSIZE]; + struct direct dir; +} dirblock; + int main(int argc, char *argv[]) { @@ -631,16 +638,17 @@ journal_balloc(void) static ino_t dir_search(ufs2_daddr_t blk, int bytes) { - char block[MAXBSIZE]; + dirblock block; struct direct *dp; int off; - if (bread(&disk, fsbtodb(&sblock, blk), block, bytes) <= 0) { + if (bread(&disk, fsbtodb(&sblock, blk), &block, bytes) <= 0) { warn("Failed to read dir block"); return (-1); } for (off = 0; off < bytes; off += dp->d_reclen) { - dp = (struct direct *)(uintptr_t)&block[off]; + assert(off % alignof(struct direct) == 0); + dp = (struct direct *)(uintptr_t)(block.buf + off); if (dp->d_reclen == 0) break; if (dp->d_ino == 0) @@ -700,12 +708,13 @@ journal_findfile(void) } static void -dir_clear_block(const char *block, off_t off) +dir_clear_block(const dirblock *block, off_t off) { struct direct *dp; for (; off < sblock.fs_bsize; off += DIRBLKSIZ) { - dp = (struct direct *)(uintptr_t)&block[off]; + assert(off % alignof(struct direct) == 0); + dp = (struct direct *)(uintptr_t)(block + off); dp->d_ino = 0; dp->d_reclen = DIRBLKSIZ; dp->d_type = DT_UNKNOWN; @@ -721,21 +730,23 @@ static int dir_insert(ufs2_daddr_t blk, off_t off, ino_t ino) { struct direct *dp; - char block[MAXBSIZE]; + dirblock block; - if (bread(&disk, fsbtodb(&sblock, blk), block, sblock.fs_bsize) <= 0) { + assert((size_t)sblock.fs_bsize <= sizeof(block)); + if (bread(&disk, fsbtodb(&sblock, blk), &block, sblock.fs_bsize) <= 0) { warn("Failed to read dir block"); return (-1); } - bzero(&block[off], sblock.fs_bsize - off); - dp = (struct direct *)(uintptr_t)&block[off]; + assert(off % alignof(struct direct) == 0); + bzero(block.buf + off, sblock.fs_bsize - off); + dp = (struct direct *)(uintptr_t)(block.buf + off); dp->d_ino = ino; dp->d_reclen = DIRBLKSIZ; dp->d_type = DT_REG; dp->d_namlen = strlen(SUJ_FILE); bcopy(SUJ_FILE, &dp->d_name, strlen(SUJ_FILE)); - dir_clear_block(block, off + DIRBLKSIZ); - if (bwrite(&disk, fsbtodb(&sblock, blk), block, sblock.fs_bsize) <= 0) { + dir_clear_block(&block, off + DIRBLKSIZ); + if (bwrite(&disk, fsbtodb(&sblock, blk), &block, sblock.fs_bsize) <= 0) { warn("Failed to write dir block"); return (-1); } @@ -749,15 +760,16 @@ dir_insert(ufs2_daddr_t blk, off_t off, ino_t ino) static int dir_extend(ufs2_daddr_t blk, ufs2_daddr_t nblk, off_t size, ino_t ino) { - char block[MAXBSIZE]; + dirblock block; - if (bread(&disk, fsbtodb(&sblock, blk), block, + assert((size_t)sblock.fs_bsize <= sizeof(block)); + if (bread(&disk, fsbtodb(&sblock, blk), &block, roundup(size, sblock.fs_fsize)) <= 0) { warn("Failed to read dir block"); return (-1); } - dir_clear_block(block, size); - if (bwrite(&disk, fsbtodb(&sblock, nblk), block, sblock.fs_bsize) + dir_clear_block(&block, size); + if (bwrite(&disk, fsbtodb(&sblock, nblk), &block, sblock.fs_bsize) <= 0) { warn("Failed to write dir block"); return (-1); @@ -846,19 +858,17 @@ journal_insertfile(ino_t ino) static int indir_fill(ufs2_daddr_t blk, int level, int *resid) { - char indirbuf[MAXBSIZE]; - ufs1_daddr_t *bap1; - ufs2_daddr_t *bap2; + union { + char buf[MAXBSIZE]; + ufs1_daddr_t ufs1; + ufs2_daddr_t ufs2; + } indir = { 0 }; + ufs1_daddr_t *bap1 = &indir.ufs1; + ufs2_daddr_t *bap2 = &indir.ufs2; ufs2_daddr_t nblk; - int ncnt; - int cnt; - int i; + int cnt = 0, ncnt; - bzero(indirbuf, sizeof(indirbuf)); - bap1 = (ufs1_daddr_t *)(uintptr_t)indirbuf; - bap2 = (void *)bap1; - cnt = 0; - for (i = 0; i < NINDIR(&sblock) && *resid != 0; i++) { + for (int i = 0; i < NINDIR(&sblock) && *resid != 0; i++) { nblk = journal_balloc(); if (nblk <= 0) return (-1); @@ -875,7 +885,7 @@ indir_fill(ufs2_daddr_t blk, int level, int *resid) } else (*resid)--; } - if (bwrite(&disk, fsbtodb(&sblock, blk), indirbuf, + if (bwrite(&disk, fsbtodb(&sblock, blk), indir.buf, sblock.fs_bsize) <= 0) { warn("Failed to write indirect"); return (-1);