mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +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
7cbd4a743e
commit
fddc256a02
@ -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,
|
static struct pv_list *_find_pv_in_vg(const struct volume_group *vg,
|
||||||
const char *pv_name);
|
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,
|
static uint32_t _vg_bad_status_bits(const struct volume_group *vg,
|
||||||
uint64_t status);
|
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 pv_list *pvl;
|
||||||
struct format_instance *fid = vg->fid;
|
struct format_instance *fid = vg->fid;
|
||||||
struct dm_pool *mem = vg->vgmem;
|
struct dm_pool *mem = vg->vgmem;
|
||||||
|
char uuid[64] __attribute((aligned(8)));
|
||||||
|
|
||||||
log_verbose("Adding physical volume '%s' to volume group '%s'",
|
log_verbose("Adding physical volume '%s' to volume group '%s'",
|
||||||
pv_name, vg->name);
|
pv_name, vg->name);
|
||||||
@ -211,9 +215,14 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_find_pv_in_vg(vg, pv_name)) {
|
if (_find_pv_in_vg(vg, pv_name) ||
|
||||||
log_error("Physical volume '%s' listed more than once.",
|
_find_pv_in_vg_by_uuid(vg, &pv->id)) {
|
||||||
pv_name);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user