make --update=homehost work again
Commit 1e2b276535
(Report error in --update
string is not recognised) broke homehost updating functionality because it
depended on each string comparison being done even after we already found
a match. Make it work again by restructuring code.
Reported-by: (and original version by) Justin Maggard <jmaggard10@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
9698df15d9
commit
def1133297
18
super0.c
18
super0.c
|
@ -435,6 +435,18 @@ static int update_super0(struct supertype *st, struct mdinfo *info,
|
|||
int rv = 0;
|
||||
int uuid[4];
|
||||
mdp_super_t *sb = st->sb;
|
||||
|
||||
if (strcmp(update, "homehost") == 0 &&
|
||||
homehost) {
|
||||
/* note that 'homehost' is special as it is really
|
||||
* a "uuid" update.
|
||||
*/
|
||||
uuid_set = 0;
|
||||
update = "uuid";
|
||||
info->uuid[0] = sb->set_uuid0;
|
||||
info->uuid[1] = sb->set_uuid1;
|
||||
}
|
||||
|
||||
if (strcmp(update, "sparc2.2")==0 ) {
|
||||
/* 2.2 sparc put the events in the wrong place
|
||||
* So we copy the tail of the superblock
|
||||
|
@ -551,12 +563,6 @@ static int update_super0(struct supertype *st, struct mdinfo *info,
|
|||
/* make sure resync happens */
|
||||
sb->state &= ~(1<<MD_SB_CLEAN);
|
||||
sb->recovery_cp = 0;
|
||||
} else if (strcmp(update, "homehost") == 0 &&
|
||||
homehost) {
|
||||
uuid_set = 0;
|
||||
update = "uuid";
|
||||
info->uuid[0] = sb->set_uuid0;
|
||||
info->uuid[1] = sb->set_uuid1;
|
||||
} else if (strcmp(update, "uuid") == 0) {
|
||||
if (!uuid_set && homehost) {
|
||||
char buf[20];
|
||||
|
|
25
super1.c
25
super1.c
|
@ -885,6 +885,21 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
|
|||
int rv = 0;
|
||||
struct mdp_superblock_1 *sb = st->sb;
|
||||
|
||||
if (strcmp(update, "homehost") == 0 &&
|
||||
homehost) {
|
||||
/* Note that 'homehost' is special as it is really
|
||||
* a "name" update.
|
||||
*/
|
||||
char *c;
|
||||
update = "name";
|
||||
c = strchr(sb->set_name, ':');
|
||||
if (c)
|
||||
strncpy(info->name, c+1, 31 - (c-sb->set_name));
|
||||
else
|
||||
strncpy(info->name, sb->set_name, 32);
|
||||
info->name[32] = 0;
|
||||
}
|
||||
|
||||
if (strcmp(update, "force-one")==0) {
|
||||
/* Not enough devices for a working array,
|
||||
* so bring this one up-to-date
|
||||
|
@ -1037,16 +1052,6 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
|
|||
sb->bblog_shift = 0;
|
||||
sb->bblog_offset = 0;
|
||||
}
|
||||
} else if (strcmp(update, "homehost") == 0 &&
|
||||
homehost) {
|
||||
char *c;
|
||||
update = "name";
|
||||
c = strchr(sb->set_name, ':');
|
||||
if (c)
|
||||
strncpy(info->name, c+1, 31 - (c-sb->set_name));
|
||||
else
|
||||
strncpy(info->name, sb->set_name, 32);
|
||||
info->name[32] = 0;
|
||||
} else if (strcmp(update, "name") == 0) {
|
||||
if (info->name[0] == 0)
|
||||
sprintf(info->name, "%d", info->array.md_minor);
|
||||
|
|
Loading…
Reference in New Issue