|
@@ -695,37 +695,32 @@ int dm_table_add_target(struct dm_table *t, const char *type,
|
|
|
|
|
|
tgt->type = dm_get_target_type(type);
|
|
tgt->type = dm_get_target_type(type);
|
|
if (!tgt->type) {
|
|
if (!tgt->type) {
|
|
- DMERR("%s: %s: unknown target type", dm_device_name(t->md),
|
|
|
|
- type);
|
|
|
|
|
|
+ DMERR("%s: %s: unknown target type", dm_device_name(t->md), type);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
if (dm_target_needs_singleton(tgt->type)) {
|
|
if (dm_target_needs_singleton(tgt->type)) {
|
|
if (t->num_targets) {
|
|
if (t->num_targets) {
|
|
- DMERR("%s: target type %s must appear alone in table",
|
|
|
|
- dm_device_name(t->md), type);
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ tgt->error = "singleton target type must appear alone in table";
|
|
|
|
+ goto bad;
|
|
}
|
|
}
|
|
t->singleton = true;
|
|
t->singleton = true;
|
|
}
|
|
}
|
|
|
|
|
|
if (dm_target_always_writeable(tgt->type) && !(t->mode & FMODE_WRITE)) {
|
|
if (dm_target_always_writeable(tgt->type) && !(t->mode & FMODE_WRITE)) {
|
|
- DMERR("%s: target type %s may not be included in read-only tables",
|
|
|
|
- dm_device_name(t->md), type);
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ tgt->error = "target type may not be included in a read-only table";
|
|
|
|
+ goto bad;
|
|
}
|
|
}
|
|
|
|
|
|
if (t->immutable_target_type) {
|
|
if (t->immutable_target_type) {
|
|
if (t->immutable_target_type != tgt->type) {
|
|
if (t->immutable_target_type != tgt->type) {
|
|
- DMERR("%s: immutable target type %s cannot be mixed with other target types",
|
|
|
|
- dm_device_name(t->md), t->immutable_target_type->name);
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ tgt->error = "immutable target type cannot be mixed with other target types";
|
|
|
|
+ goto bad;
|
|
}
|
|
}
|
|
} else if (dm_target_is_immutable(tgt->type)) {
|
|
} else if (dm_target_is_immutable(tgt->type)) {
|
|
if (t->num_targets) {
|
|
if (t->num_targets) {
|
|
- DMERR("%s: immutable target type %s cannot be mixed with other target types",
|
|
|
|
- dm_device_name(t->md), tgt->type->name);
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ tgt->error = "immutable target type cannot be mixed with other target types";
|
|
|
|
+ goto bad;
|
|
}
|
|
}
|
|
t->immutable_target_type = tgt->type;
|
|
t->immutable_target_type = tgt->type;
|
|
}
|
|
}
|
|
@@ -740,7 +735,6 @@ int dm_table_add_target(struct dm_table *t, const char *type,
|
|
*/
|
|
*/
|
|
if (!adjoin(t, tgt)) {
|
|
if (!adjoin(t, tgt)) {
|
|
tgt->error = "Gap in table";
|
|
tgt->error = "Gap in table";
|
|
- r = -EINVAL;
|
|
|
|
goto bad;
|
|
goto bad;
|
|
}
|
|
}
|
|
|
|
|