From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 30EF315800A for ; Sat, 21 Dec 2024 16:59:08 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 0EFBDE096C; Sat, 21 Dec 2024 16:59:03 +0000 (UTC) Received: from mail.muc.de (mail.muc.de [193.149.48.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) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id C7D9FE092E for ; Sat, 21 Dec 2024 16:59:01 +0000 (UTC) Received: (qmail 8627 invoked by uid 3782); 21 Dec 2024 17:59:00 +0100 Received: from muc.de (p4fe157a9.dip0.t-ipconnect.de [79.225.87.169]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Sat, 21 Dec 2024 17:59:00 +0100 Received: (qmail 2171 invoked by uid 1000); 21 Dec 2024 16:58:59 -0000 Date: Sat, 21 Dec 2024 16:58:59 +0000 To: gentoo-user@lists.gentoo.org Subject: Re: [gentoo-user] Fun with mdadm (Software RAID) Message-ID: References: <20241220145053.B361C85A435A@turkos.aspodata.se> <20241220174453.4E33285A435A@turkos.aspodata.se> <20241220220258.7422F85A435A@turkos.aspodata.se> <20241221164513.D4EF385A4946@turkos.aspodata.se> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-user@lists.gentoo.org Reply-to: gentoo-user@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="OqkLLUr1NKW12v9Y" Content-Disposition: inline In-Reply-To: <20241221164513.D4EF385A4946@turkos.aspodata.se> X-Submission-Agent: TMDA/1.3.x (Ph3nix) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Archives-Salt: 0a5f83f6-b375-46e9-b941-724afe0c728a X-Archives-Hash: a93ddb60f7bebdd455d5e94e65cb2577 --OqkLLUr1NKW12v9Y Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, Karl. On Sat, Dec 21, 2024 at 17:45:13 +0100, karl@aspodata.se wrote: > Alan Mackenzie: > ... > > I've now got working code which assembles a metadata 1.2 RAID array at > > boot time. The syntax needed on the command line is, again, > > md=124,1.2,/dev/nvme0n1p6,/dev/nvme1n1p6 > > .. In place of 1.2 can be any of 0.90, 1.0, 1.1, though I haven't tested > > it with anything but 1.2 as yet. > ... > Fun! Which kernel, can you send a patch ? 6.6.62. Patch enclosed. It should apply cleanly from the directory ..../drivers/md. Have fun! > Regards, > /Karl Hammar -- Alan Mackenzie (Nuremberg, Germany). --OqkLLUr1NKW12v9Y Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="diff.20241221b.diff" diff --git a/drivers/md/md-autodetect.c b/drivers/md/md-autodetect.c index b2a00f213c2c..2cd347108284 100644 --- a/drivers/md/md-autodetect.c +++ b/drivers/md/md-autodetect.c @@ -124,6 +124,17 @@ static void __init md_setup_drive(struct md_setup_args *args) struct mddev *mddev; int err = 0, i; char name[16]; + int major_version = 0, minor_version = 90; + char *pp; + static struct { + char *metadata; + int major_version; + int minor_version; + } metadata_table[] = + {{"0.90", 0, 90}, + {"1.0", 1, 0}, + {"1.1", 1, 1}, + {"1.2", 1, 2}}; if (args->partitioned) { mdev = MKDEV(mdp_major, args->minor << MdpMinorShift); @@ -133,6 +144,21 @@ static void __init md_setup_drive(struct md_setup_args *args) sprintf(name, "md%d", args->minor); } + pp = strchr(devname, ','); + if (pp) + { + *pp = 0; + for (i = 1; i < ARRAY_SIZE(metadata_table); i++) + if (!strcmp(devname, metadata_table[i].metadata)) + { + major_version = metadata_table[i].major_version; + minor_version = metadata_table[i].minor_version; + devname = pp + 1; + break; + } + *pp = ','; + } + for (i = 0; i < MD_SB_DISKS && devname != NULL; i++) { struct kstat stat; char *p; @@ -183,6 +209,8 @@ static void __init md_setup_drive(struct md_setup_args *args) goto out_unlock; } + ainfo.major_version = major_version; + ainfo.minor_version = minor_version; if (args->level != LEVEL_NONE) { /* non-persistent */ ainfo.level = args->level; --OqkLLUr1NKW12v9Y--