]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Allow --update=name to update the name during assembly.
authorNeil Brown <neilb@suse.de>
Tue, 23 May 2006 04:57:04 +0000 (04:57 +0000)
committerNeil Brown <neilb@suse.de>
Tue, 23 May 2006 04:57:04 +0000 (04:57 +0000)
Signed-off-by: Neil Brown <neilb@suse.de>
Assemble.c
mdadm.8
mdadm.c
super1.c

index 30cb1aa090eac120f1c58cc38c6290b95bbed954..1dc0ffc15bf171d313ee4a9e791e2575886aa791 100644 (file)
@@ -225,7 +225,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
                                        devname);
                        continue;
                }
-               if (ident->name[0] &&
+               if (ident->name[0] && (!update || strcmp(update, "name")!= 0) &&
                    (!super || strncmp(info.name, ident->name, 32)!=0)) {
                        if ((inargv && verbose >= 0) || verbose > 0)
                                fprintf(stderr, Name ": %s has wrong name.\n",
diff --git a/mdadm.8 b/mdadm.8
index 9c113f0e967da738585c81b633a9cc16b932bbc8..132052ad23ff1bf295a0fd881f2414d4f72510db 100644 (file)
--- a/mdadm.8
+++ b/mdadm.8
@@ -650,6 +650,7 @@ argument given to this flag can be one of
 .BR sparc2.2 ,
 .BR summaries ,
 .BR uuid ,
+.BR name ,
 .BR resync ,
 .BR byteorder ,
 or
@@ -681,6 +682,13 @@ option will change the uuid of the array.  If a UUID is given with the
 be used to help identify the devices in the array.
 If no "--uuid" is given, a random uuid is chosen.
 
+The
+.B name
+option will change the
+.I name
+of the array as stored in the superblock.  This is only supported for
+version-1 superblocks.
+
 The
 .B resync
 option will cause the array to be marked
diff --git a/mdadm.c b/mdadm.c
index 880fa94ae21d5882e306f10f5be9081f5fa03a5f..42fcf0762a8a207480c2c9ee099a81900df0a785 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -566,6 +566,8 @@ int main(int argc, char *argv[])
                                continue;
                        if (strcmp(update, "uuid")==0)
                                continue;
+                       if (strcmp(update, "name")==0)
+                               continue;
                        if (strcmp(update, "byteorder")==0) {
                                if (ss) {
                                        fprintf(stderr, Name ": must not set metadata type with --update=byteorder.\n");
index 533929a303f486654b8ad735f14a119058755166..2ccda5dab2eaafaf11d2dd29c0021e1d8bae231e 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -496,6 +496,19 @@ static int update_super1(struct mdinfo *info, void *sbv, char *update,
                        memcpy(bm->uuid, info->uuid, 16);
                }
        }
+       if (strcmp(update, "name") == 0) {
+               if (info->name[0] == 0)
+                       sprintf(info->name, "%d", info->array.md_minor);
+               memset(sb->set_name, 0, sizeof(sb->set_name));
+               if (homehost &&
+                   strchr(info->name, ':') == NULL &&
+                   strlen(homehost)+1+strlen(info->name) < 32) {
+                       strcpy(sb->set_name, homehost);
+                       strcat(sb->set_name, ":");
+                       strcat(sb->set_name, info->name);
+               } else
+                       strcpy(sb->set_name, info->name);
+       }
        if (strcmp(update, "_reshape_progress")==0)
                sb->reshape_position = __cpu_to_le64(info->reshape_progress);