dm table: add singleton feature
Introduce the concept of a singleton table which contains exactly one target. If a target type sets the DM_TARGET_SINGLETON feature bit device-mapper will ensure that any table that includes that target contains no others. The thin provisioning pool target uses this. Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
@ -55,6 +55,7 @@ struct dm_table {
|
||||
struct dm_target *targets;
|
||||
|
||||
unsigned integrity_supported:1;
|
||||
unsigned singleton:1;
|
||||
|
||||
/*
|
||||
* Indicates the rw permissions for the new logical
|
||||
@ -740,6 +741,12 @@ int dm_table_add_target(struct dm_table *t, const char *type,
|
||||
char **argv;
|
||||
struct dm_target *tgt;
|
||||
|
||||
if (t->singleton) {
|
||||
DMERR("%s: target type %s must appear alone in table",
|
||||
dm_device_name(t->md), t->targets->type->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((r = check_space(t)))
|
||||
return r;
|
||||
|
||||
@ -758,6 +765,15 @@ int dm_table_add_target(struct dm_table *t, const char *type,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dm_target_needs_singleton(tgt->type)) {
|
||||
if (t->num_targets) {
|
||||
DMERR("%s: target type %s must appear alone in table",
|
||||
dm_device_name(t->md), type);
|
||||
return -EINVAL;
|
||||
}
|
||||
t->singleton = 1;
|
||||
}
|
||||
|
||||
tgt->table = t;
|
||||
tgt->begin = start;
|
||||
tgt->len = len;
|
||||
|
Reference in New Issue
Block a user