From mboxrd@z Thu Jan 1 00:00:00 1970 From: Coly Li Subject: Re: [PATCH] mdadm: allow to assemble /dev/md_xxx named arrays. Date: Thu, 10 Aug 2017 20:24:28 +0800 Message-ID: <1d686f60-3101-8614-c917-76100c094e2c@suse.de> References: <20170803163236.28958-1-jcejka@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20170803163236.28958-1-jcejka@suse.com> Content-Language: en-US Sender: linux-raid-owner@vger.kernel.org To: jcejka@suse.com, linux-raid@vger.kernel.org List-Id: linux-raid.ids On 2017/8/4 上午12:32, jcejka@suse.com wrote: > From: Josef Cejka > > Allow to assemble arrays using /dev/md_xxx name format > both from cmdline like mdadm -A /dev/md_xxx > or using ASSEMBLE directive in mdadm.conf > > Signed-off-by: Josef Cejka Reviewed-by: Coly Li Thanks. Coly Li > --- > config.c | 5 +++-- > mdopen.c | 26 ++++++++++++++++---------- > 2 files changed, 19 insertions(+), 12 deletions(-) > > diff --git a/config.c b/config.c > index 48e0278..113ef01 100644 > --- a/config.c > +++ b/config.c > @@ -389,6 +389,7 @@ void arrayline(char *line) > * /dev/md/{anything} > * /dev/mdNN > * /dev/md_dNN > + * /dev/md_XXX > * > * or anything that doesn't start '/' or '<' > */ > @@ -397,8 +398,8 @@ void arrayline(char *line) > (w[0] != '/' && w[0] != '<') || > (strncmp(w, "/dev/md", 7) == 0 && > is_number(w + 7)) || > - (strncmp(w, "/dev/md_d", 9) == 0 && > - is_number(w + 9))) { > + (strncmp(w, "/dev/md_", 8) == 0 && > + strlen(w) > 8)) { > /* This is acceptable */; > if (mis.devname) > pr_err("only give one device per ARRAY line: %s and %s\n", > diff --git a/mdopen.c b/mdopen.c > index c4f1c12..0f3a244 100644 > --- a/mdopen.c > +++ b/mdopen.c > @@ -174,19 +174,25 @@ int create_mddev(char *dev, char *name, int autof, int trustworthy, > num = strtoul(e, NULL, 10); > strcpy(cname, dev+5); > cname[e-(dev+5)] = 0; > - /* name *must* be mdXX or md_dXX in this context */ > + /* name is not mdXX or md_dXX */ > if (num < 0 || > (strcmp(cname, "md") != 0 && strcmp(cname, "md_d") != 0)) { > - pr_err("%s is an invalid name for an md device. Try /dev/md/%s\n", > - dev, dev+5); > - return -1; > + if (strncmp(cname, "md_", 3) != 0) { > + pr_err("%s is an invalid name for an md device. Try /dev/md/%s\n", > + dev, dev+5); > + return -1; > + } > + /* /dev/md_ format */ > + strcpy(cname, dev+8); > + num = -1; > + } else { > + if (strcmp(cname, "md") == 0) > + use_mdp = 0; > + else > + use_mdp = 1; > + /* recreate name: /dev/md/0 or /dev/md/d0 */ > + sprintf(cname, "%s%d", use_mdp?"d":"", num); > } > - if (strcmp(cname, "md") == 0) > - use_mdp = 0; > - else > - use_mdp = 1; > - /* recreate name: /dev/md/0 or /dev/md/d0 */ > - sprintf(cname, "%s%d", use_mdp?"d":"", num); > } else > strcpy(cname, dev); > >