1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-02-25 21:57:45 +03:00

fix: regression for recent persistent commit

Do not let fly metadata with just 'minor' set
(since they would not be readable on older version)

Be permissive with invalid major/minor number and
just report them as problem, but allow to use
such metadata with default major:minor.
This commit is contained in:
Zdenek Kabelac 2014-09-19 17:05:35 +02:00
parent 18b8fdc8c9
commit 392bb6f46e
2 changed files with 17 additions and 12 deletions

View File

@ -678,16 +678,19 @@ static int _read_lvsegs(struct format_instance *fid,
return 0;
}
if (!_read_int32(lvn, "major", &lv->major)) {
log_error("Couldn't read major number for logical "
"volume %s.", lv->name);
return 0;
if (!dm_config_has_node(lvn, "major"))
/* If major is missing, pick default */
lv->major = vg->cmd->dev_types->device_mapper_major;
else if (!_read_int32(lvn, "major", &lv->major)) {
log_warn("WARNING: Couldn't read major number for logical "
"volume %s.", lv->name);
lv->major = vg->cmd->dev_types->device_mapper_major;
}
if (!validate_major_minor(vg->cmd, fid->fmt, lv->major, lv->minor)) {
log_error("Logical volume %s does not have a valid major, minor number.",
lv->name);
return 0;
log_warn("WARNING: Ignoring invalid major, minor number for "
"logical volume %s.", lv->name);
lv->major = lv->minor = -1;
}
}

View File

@ -607,11 +607,13 @@ int read_and_validate_major_minor(const struct cmd_context *cmd,
return 0;
}
*major = arg_int_value(cmd, major_ARG, -1);
} else if (arg_is_set(cmd, major_ARG)) {
log_warn("WARNING: Ignoring supplied major number - "
"kernel assigns major numbers dynamically. "
"Using major number %d instead.",
cmd->dev_types->device_mapper_major);
} else {
if (arg_is_set(cmd, major_ARG)) {
log_warn("WARNING: Ignoring supplied major number - "
"kernel assigns major numbers dynamically. "
"Using major number %d instead.",
cmd->dev_types->device_mapper_major);
}
*major = cmd->dev_types->device_mapper_major;
}