mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-23 21:35:29 +03:00
Check for duplicate paths (pvids) on the commandline of vgcreate.
A user specifying duplicate paths on the cmdline of vgcreate will get a message similar to the following: vgcreate vgtest2 /dev/loop3 /dev/loop5 Found duplicate PV jk1lXsKzwyOKlXq6bhaFFKMQQ06oPgu8: using /dev/loop5 not /dev/loop3 Found duplicate PV jk1lXsKzwyOKlXq6bhaFFKMQQ06oPgu8: using /dev/loop3 not /dev/loop5 Internal error: Duplicate PV id jk1lXs-Kzwy-OKlX-q6bh-aFFK-MQQ0-6oPgu8 detected for /dev/loop3 in vgtest2. This is caught by vg_validate(), but it would be good to find this condition earlier in the vgcreate code. add_pv_to_vg() currently checks by pvname, but does not look for duplcate pvids. This patch adds the check for duplicate pvids and results in new error output as follows: vgcreate vgtest2 /dev/loop3 /dev/loop5 Found duplicate PV jk1lXsKzwyOKlXq6bhaFFKMQQ06oPgu8: using /dev/loop5 not /dev/loop3 Found duplicate PV jk1lXsKzwyOKlXq6bhaFFKMQQ06oPgu8: using /dev/loop3 not /dev/loop5 Physical volume '/dev/loop5 (jk1lXs-Kzwy-OKlX-q6bh-aFFK-MQQ0-6oPgu8)' listed more than once. Unable to add physical volume '/dev/loop5' to volume group 'vgtest2'. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
This commit is contained in:
parent
491ef790c2
commit
34573cf6a5
@ -52,6 +52,9 @@ static struct physical_volume *_find_pv_by_name(struct cmd_context *cmd,
|
||||
static struct pv_list *_find_pv_in_vg(const struct volume_group *vg,
|
||||
const char *pv_name);
|
||||
|
||||
static struct pv_list *_find_pv_in_vg_by_uuid(const struct volume_group *vg,
|
||||
const struct id *id);
|
||||
|
||||
static uint32_t _vg_bad_status_bits(const struct volume_group *vg,
|
||||
uint64_t status);
|
||||
|
||||
@ -160,6 +163,7 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name,
|
||||
struct pv_list *pvl;
|
||||
struct format_instance *fid = vg->fid;
|
||||
struct dm_pool *mem = vg->vgmem;
|
||||
char uuid[64] __attribute((aligned(8)));
|
||||
|
||||
log_verbose("Adding physical volume '%s' to volume group '%s'",
|
||||
pv_name, vg->name);
|
||||
@ -211,9 +215,14 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (_find_pv_in_vg(vg, pv_name)) {
|
||||
log_error("Physical volume '%s' listed more than once.",
|
||||
pv_name);
|
||||
if (_find_pv_in_vg(vg, pv_name) ||
|
||||
_find_pv_in_vg_by_uuid(vg, &pv->id)) {
|
||||
if (!id_write_format(&pv->id, uuid, sizeof(uuid))) {
|
||||
stack;
|
||||
uuid[0] = '\0';
|
||||
}
|
||||
log_error("Physical volume '%s (%s)' listed more than once.",
|
||||
pv_name, uuid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user