From nobody Fri Aug 15 12:09:05 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 4c3LW571Drz6500s; Fri, 15 Aug 2025 12:09:05 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4c3LW54gYVz3f8y; Fri, 15 Aug 2025 12:09:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755259745; 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=pXJbas65ked9Mfl8jjZ86TCUMs9Knj6N1rKQx3OgCV8=; b=UomxWVMZzjNG3G2kfGtO0aS+x8fS0y7vwi4jgld6iAGyLWWfDgiCOWNInz1cAI7ZLGhVkI XBix0UDZOQdGGytJ52irELi6WRctA2ZFrN0kzQhEeeVfi4C0MSNghkL+zs9Hc5ptSFm4Gm qJxupCmjEFgoMUa1Y/aMWrlwLIXI9BzLsLcY6D+WKHzsO1tv9mguPPh4ovnrPDxheS+34l vTN5sePMPP8mvOZyF1MODl11eF3rUeOIDn6RTozbolvXSM+FkBz/S8fi6OaKKJEENGFxkk 5oNW0MoKjgpKK4zIpxxohMr1edOSTaU8S3G1/caMOXE863grA+9LFyRZc7zy7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755259745; 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=pXJbas65ked9Mfl8jjZ86TCUMs9Knj6N1rKQx3OgCV8=; b=YGvs07Ee2H+MOF9iAMnDJpIHCjIh1naQb+5SZU1f9TjNJXiuKzsSOwExINqkDqBHF2JXj1 DmIu5dN24H2A6XCykRl9qJpLIBPXpx2nAMi1bAXzL0emwzwlPFm+NO20tO13Y1uuibMI1T hlsXbTK5XZcto9dA6stY+wWrxU8UkoAeNZfVIrxeN8kqHxpfziyr5HDaZycktOmlVJdqbV QGS4EwiyFobTRVGIqO1FNOnnNsWRekLdhbLZNyyhZmQqzyukvW2rH5jmkpaZkueNWeUDJH 4wCCBAZGVC+uCS3pda2tjY8bQHTmUisMWeQ3k6LA/WiEQQwv8H0YqdhutQldeQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1755259745; a=rsa-sha256; cv=none; b=aJCXHy0gETJUeyrpM5pZ3jMc2m/qkLZxuFyKsU7H2jJuclOpyHnz03W7Fijn/Xv2x6iH7Z FzwdR7JBhEWm4eku+LHjp+bWQlz8tIlWgC+217l+zZ6spL52W7bnL4ZQloRsxWWy9QtkpU J1OrXRZFGovxLk66qQkzv+SrtuV+Od5uyQ/Ln1bK+TUDWXGSYM2BGULmsA477qtEOI4une 8S+iNYZIpSKBaFdSAJogGyoTfNcUxzbbbFZLZTciiI5me3wN4uAhzZAGHmV285E6bh7aEi elnDsN1HSBp4NNmPGByDkQpSJaJuyGBObRy1BgIjKtBm4JjDYDvjofqrueZ/Qw== 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 4c3LW53hWbzdvj; Fri, 15 Aug 2025 12:09:05 +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 57FC95q7033631; Fri, 15 Aug 2025 12:09:05 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 57FC95jZ033628; Fri, 15 Aug 2025 12:09:05 GMT (envelope-from git) Date: Fri, 15 Aug 2025 12:09:05 GMT Message-Id: <202508151209.57FC95jZ033628@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Toomas Soome Subject: git: 6e25c4321cd5 - main - makefs: zfs uberblock location is calculated wrong 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: tsoome X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6e25c4321cd5fcf54fa63f20cb787713245a87a8 Auto-Submitted: auto-generated The branch main has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=6e25c4321cd5fcf54fa63f20cb787713245a87a8 commit 6e25c4321cd5fcf54fa63f20cb787713245a87a8 Author: Toomas Soome AuthorDate: 2025-08-15 04:55:49 +0000 Commit: Toomas Soome CommitDate: 2025-08-15 04:55:49 +0000 makefs: zfs uberblock location is calculated wrong The shift used to calculate uberblock location depends both on minimum size (UBERBLOCK_SHIFT) and MAX_UBERBLOCK_SHIFT. Since makefs defaults to use ashift 12, it incidentally does get the correct size, but ashift 9 does not work with current code. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D51860 --- sys/cddl/boot/zfs/zfsimpl.h | 6 ++++++ usr.sbin/makefs/zfs.c | 2 +- usr.sbin/makefs/zfs/vdev.c | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/cddl/boot/zfs/zfsimpl.h b/sys/cddl/boot/zfs/zfsimpl.h index 83d964360343..915aeeda3c9e 100644 --- a/sys/cddl/boot/zfs/zfsimpl.h +++ b/sys/cddl/boot/zfs/zfsimpl.h @@ -536,6 +536,12 @@ typedef struct zio_gbh { offsetof(vdev_label_t, vl_uberblock[(n) << VDEV_UBERBLOCK_SHIFT(vd)]) #define VDEV_UBERBLOCK_SIZE(vd) (1ULL << VDEV_UBERBLOCK_SHIFT(vd)) +#define ASHIFT_UBERBLOCK_SHIFT(ashift) \ + MIN(MAX(ashift, UBERBLOCK_SHIFT), \ + MAX_UBERBLOCK_SHIFT) +#define ASHIFT_UBERBLOCK_SIZE(ashift) \ + (1ULL << ASHIFT_UBERBLOCK_SHIFT(ashift)) + typedef struct vdev_phys { char vp_nvlist[VDEV_PHYS_SIZE - sizeof (zio_eck_t)]; zio_eck_t vp_zbt; diff --git a/usr.sbin/makefs/zfs.c b/usr.sbin/makefs/zfs.c index 8d50c450541b..e33a182e5c8f 100644 --- a/usr.sbin/makefs/zfs.c +++ b/usr.sbin/makefs/zfs.c @@ -596,7 +596,7 @@ pool_labels_write(zfs_opt_t *zfs) * checksum is calculated in vdev_label_write(). */ for (size_t uoff = 0; uoff < sizeof(label->vl_uberblock); - uoff += (1 << zfs->ashift)) { + uoff += ASHIFT_UBERBLOCK_SIZE(zfs->ashift)) { ub = (uberblock_t *)(&label->vl_uberblock[0] + uoff); ub->ub_magic = UBERBLOCK_MAGIC; ub->ub_version = SPA_VERSION; diff --git a/usr.sbin/makefs/zfs/vdev.c b/usr.sbin/makefs/zfs/vdev.c index afcce402cb13..a2423e180ca3 100644 --- a/usr.sbin/makefs/zfs/vdev.c +++ b/usr.sbin/makefs/zfs/vdev.c @@ -200,7 +200,7 @@ vdev_label_write(zfs_opt_t *zfs, int ind, const vdev_label_t *labelp) * per sector; for example, with an ashift of 12 we end up with * 128KB/4KB=32 copies of the uberblock in the ring. */ - blksz = 1 << zfs->ashift; + blksz = ASHIFT_UBERBLOCK_SIZE(zfs->ashift); assert(sizeof(label->vl_uberblock) % blksz == 0); for (size_t roff = 0; roff < sizeof(label->vl_uberblock); roff += blksz) {