From nobody Mon Apr 29 04:40:59 2024 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 4VSVyM4xNXz5JD4G; Mon, 29 Apr 2024 04:40:59 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4VSVyM4Flvz49FL; Mon, 29 Apr 2024 04:40:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1714365659; 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=wLdKmdJQghIa2ToWPdnbmoq1v8YpYUwGdhpHXNyusx8=; b=R2EqaDsg3aDTJx4bMAP7yqB22lg39O1U/VeyPhjySHxX1PZ90ybunvY6OGkMDKz/82IMVJ PTGW2xU8pzW8aFq4EQDzlL9C66g5p8ipeRnI/zwJVZaFxU6KlNne+Q4i+Axyuk4JocQ2L1 5MV1o1lSszN5x37sOQdwsZW24YUxU7r0KwxQba74vDG1ETWlx6HKRIabFy0doiXhjqlWsQ q1cbpjl5ZEasxkCfxeydqS4xkCPkTVMArs3GdHofmT+8CXp+iCfLrB4FQ5nTLkhUgEuGcG tq+x15Xqx/hcJiQWmKfcXNsBpo5X4bHTklF0HD5MQKl2XWXLd9UfWwKMTgHOBA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1714365659; a=rsa-sha256; cv=none; b=QJbGi1/A0NhBe4IVnNEbyjRIGZGEkcctCg9r8KzXK1T0V5qTRjvwJg+UxYFe/fc6mJSMm4 SvWjc/+FRwy+QBStoAP5Nj7NOUY4sSVWIsAGP68fJ4jMTCmoSU+xv//bdPlwHiHUFCxu6b zS7zBxOytWLaO+wTFR1wkWI5jwsX1emzfJCEx7psouOUVCAIumJ0wMQWx9bktGn7ofPxc1 7CpROY5i25PcMgoqg5lut9vaHkttUKYblOUcX2jGe85A4/W/iPnhPb3ucUdylNk5PpJ/dV d89FcqG1VvTjOp4poqqwU6NMDJvmrjDNyd3IqgIv9wQxEx5MpDGZpEcmXgixGw== 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=1714365659; 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=wLdKmdJQghIa2ToWPdnbmoq1v8YpYUwGdhpHXNyusx8=; b=OotyuMw+jvy9C17s96U/ePnuXLZeNx6kZOgf0EWft7kIwifp8eeSuARJtF8qRZlhCWFc3T 6Vj2T3YfV6wzfmI3OFONGLt1Gj7/0T2haaK0/b6gKHaQGHST9VFY0UjTSRmkO5n+wGQLgX XT81fK+1ao7RaDs8ljrJAX3qW1yXlnxizfY6KAGlFNBNPW2sUAL3lxCJuIO8c/YeVps1II Q+2deINSw0rAddRpOozhctoBNZ6KPC135JxredJKgJLlhZ0ZCKpVtz/haI2vIsLemXdj+X N1d7VYOetoLbDSvGYnlRfCabiwOqPA30vdxzV0TAcr/G5mpdDCn7mHMr9oepYw== 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 4VSVyM3qr6zvL2; Mon, 29 Apr 2024 04:40:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 43T4excn072241; Mon, 29 Apr 2024 04:40:59 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 43T4exw9072238; Mon, 29 Apr 2024 04:40:59 GMT (envelope-from git) Date: Mon, 29 Apr 2024 04:40:59 GMT Message-Id: <202404290440.43T4exw9072238@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 78444b5ade65 - main - glabel: Add support for Linux swap 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: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 78444b5ade65568d817ecc3cfa5d66e05edf2b14 Auto-Submitted: auto-generated The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=78444b5ade65568d817ecc3cfa5d66e05edf2b14 commit 78444b5ade65568d817ecc3cfa5d66e05edf2b14 Author: Ricardo Branco AuthorDate: 2024-04-29 04:38:15 +0000 Commit: Warner Losh CommitDate: 2024-04-29 04:39:47 +0000 glabel: Add support for Linux swap Reviewed by: imp, kib Pull Request: https://github.com/freebsd/freebsd-src/pull/1205 --- lib/geom/label/glabel.8 | 3 ++ sys/conf/files | 1 + sys/geom/label/g_label.c | 1 + sys/geom/label/g_label.h | 1 + sys/geom/label/g_label_swaplinux.c | 91 ++++++++++++++++++++++++++++++++++++ sys/modules/geom/geom_label/Makefile | 1 + 6 files changed, 98 insertions(+) diff --git a/lib/geom/label/glabel.8 b/lib/geom/label/glabel.8 index a133b4abff72..6b089172348f 100644 --- a/lib/geom/label/glabel.8 +++ b/lib/geom/label/glabel.8 @@ -115,6 +115,9 @@ EXT2FS (directory .It NTFS (directory .Pa /dev/ntfs/ ) . +.It +Swap Linux (directory +.Pa /dev/swaplinux/ ) . .El .Pp Support for partition metadata is implemented for: diff --git a/sys/conf/files b/sys/conf/files index ef0a56eb8b45..326260ffb1dc 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -3648,6 +3648,7 @@ geom/label/g_label_ntfs.c optional geom_label geom/label/g_label_ufs.c optional geom_label geom/label/g_label_gpt.c optional geom_label | geom_label_gpt geom/label/g_label_disk_ident.c optional geom_label +geom/label/g_label_swaplinux.c optional geom_label geom/linux_lvm/g_linux_lvm.c optional geom_linux_lvm geom/mirror/g_mirror.c optional geom_mirror geom/mirror/g_mirror_ctl.c optional geom_mirror diff --git a/sys/geom/label/g_label.c b/sys/geom/label/g_label.c index e20e5b50e80b..acb17d40914e 100644 --- a/sys/geom/label/g_label.c +++ b/sys/geom/label/g_label.c @@ -104,6 +104,7 @@ const struct g_label_desc *g_labels[] = { &g_label_ntfs, &g_label_disk_ident, &g_label_flashmap, + &g_label_swaplinux, #endif &g_label_generic, NULL diff --git a/sys/geom/label/g_label.h b/sys/geom/label/g_label.h index 69bfbf3910a1..0d8951f7c99d 100644 --- a/sys/geom/label/g_label.h +++ b/sys/geom/label/g_label.h @@ -78,6 +78,7 @@ extern struct g_label_desc g_label_gpt; extern struct g_label_desc g_label_gpt_uuid; extern struct g_label_desc g_label_disk_ident; extern struct g_label_desc g_label_flashmap; +extern struct g_label_desc g_label_swaplinux; extern void g_label_rtrim(char *label, size_t size); #endif /* _KERNEL */ diff --git a/sys/geom/label/g_label_swaplinux.c b/sys/geom/label/g_label_swaplinux.c new file mode 100644 index 000000000000..5994ad93fd6f --- /dev/null +++ b/sys/geom/label/g_label_swaplinux.c @@ -0,0 +1,91 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +#include +#include +#include + +/* + * Taken from + * https://github.com/util-linux/util-linux/blob/master/include/swapheader.h + */ + +#define SWAP_VERSION 1 +#define SWAP_UUID_LENGTH 16 +#define SWAP_LABEL_LENGTH 16 +#define SWAP_SIGNATURE "SWAPSPACE2" +#define SWAP_SIGNATURE_SZ (sizeof(SWAP_SIGNATURE) - 1) + +struct swap_header_v1_2 { + char bootbits[1024]; /* Space for disklabel etc. */ + uint32_t version; + uint32_t last_page; + uint32_t nr_badpages; + unsigned char uuid[SWAP_UUID_LENGTH]; + char volume_name[SWAP_LABEL_LENGTH]; + uint32_t padding[117]; + uint32_t badpages[1]; +}; + +typedef union { + struct swap_header_v1_2 header; + struct { + uint8_t reserved[PAGE_SIZE - SWAP_SIGNATURE_SZ]; + char signature[SWAP_SIGNATURE_SZ]; + } tail; +} swhdr_t; + +#define sw_version header.version +#define sw_volume_name header.volume_name +#define sw_signature tail.signature + +static void +g_label_swaplinux_taste(struct g_consumer *cp, char *label, size_t size) +{ + struct g_provider *pp; + swhdr_t *hdr; + + g_topology_assert_not(); + pp = cp->provider; + label[0] = '\0'; + + KASSERT(pp->sectorsize != 0, ("Tasting a disk with 0 sectorsize")); + if ((PAGE_SIZE % pp->sectorsize) != 0) + return; + + hdr = (swhdr_t *)g_read_data(cp, 0, PAGE_SIZE, NULL); + if (hdr == NULL) + return; + + /* Check version and magic string */ + if (hdr->sw_version == SWAP_VERSION && + !memcmp(hdr->sw_signature, SWAP_SIGNATURE, SWAP_SIGNATURE_SZ)) + G_LABEL_DEBUG(1, "linux swap detected on %s.", pp->name); + else + goto exit_free; + + /* Check for volume label */ + if (hdr->sw_volume_name[0] == '\0') + goto exit_free; + + /* Terminate label */ + hdr->sw_volume_name[sizeof(hdr->sw_volume_name) - 1] = '\0'; + strlcpy(label, hdr->sw_volume_name, size); + +exit_free: + g_free(hdr); +} + +struct g_label_desc g_label_swaplinux = { + .ld_taste = g_label_swaplinux_taste, + .ld_dirprefix = "swaplinux/", + .ld_enabled = 1 +}; + +G_LABEL_INIT(swaplinux, g_label_swaplinux, "Create device nodes for Linux swap"); diff --git a/sys/modules/geom/geom_label/Makefile b/sys/modules/geom/geom_label/Makefile index 19e0ee446fa1..37ee312f849e 100644 --- a/sys/modules/geom/geom_label/Makefile +++ b/sys/modules/geom/geom_label/Makefile @@ -11,6 +11,7 @@ SRCS+= g_label_iso9660.c SRCS+= g_label_msdosfs.c SRCS+= g_label_ntfs.c SRCS+= g_label_ufs.c +SRCS+= g_label_swaplinux.c SRCS+= opt_geom.h SRCS+= vnode_if.h