1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-10-28 03:27:58 +03:00

pvresize: Do not use pv_read (get the PV from orphan VG).

This commit is contained in:
Petr Rockai 2013-02-19 01:54:34 +01:00
parent 0a59305c44
commit 603b45e0ed

View File

@ -549,9 +549,9 @@ static int pv_resize(struct physical_volume *pv,
}
int pv_resize_single(struct cmd_context *cmd,
struct volume_group *vg,
struct physical_volume *pv,
const uint64_t new_size)
struct volume_group *vg,
struct physical_volume *pv,
const uint64_t new_size)
{
struct pv_list *pvl;
uint64_t size = 0;
@ -561,39 +561,26 @@ int pv_resize_single(struct cmd_context *cmd,
struct volume_group *old_vg = vg;
int vg_needs_pv_write = 0;
if (is_orphan_vg(vg_name)) {
if (!lock_vol(cmd, vg_name, LCK_VG_WRITE, NULL)) {
log_error("Can't get lock for orphans");
return 0;
}
vg = vg_read_for_update(cmd, vg_name, NULL, 0);
if (!(pv = pv_read(cmd, pv_name, 1, 0))) {
unlock_vg(cmd, vg_name);
log_error("Unable to read PV \"%s\"", pv_name);
return 0;
}
} else {
vg = vg_read_for_update(cmd, vg_name, NULL, 0);
if (vg_read_error(vg)) {
release_vg(vg);
log_error("Unable to read volume group \"%s\".",
vg_name);
return 0;
}
if (!(pvl = find_pv_in_vg(vg, pv_name))) {
log_error("Unable to find \"%s\" in volume group \"%s\"",
pv_name, vg->name);
goto out;
}
pv = pvl->pv;
if (!archive(vg))
goto out;
if (vg_read_error(vg)) {
release_vg(vg);
log_error("Unable to read volume group \"%s\".",
vg_name);
return 0;
}
if (!(pvl = find_pv_in_vg(vg, pv_name))) {
log_error("Unable to find \"%s\" in volume group \"%s\"",
pv_name, vg->name);
goto out;
}
pv = pvl->pv;
if (!archive(vg))
goto out;
if (!(pv->fmt->features & FMT_RESIZE_PV)) {
log_error("Physical volume %s format does not support resizing.",
pv_name);
@ -650,8 +637,6 @@ out:
log_error("Use pvcreate and vgcfgrestore "
"to repair from archived metadata.");
unlock_vg(cmd, vg_name);
if (is_orphan_vg(vg_name))
free_pv_fid(pv);
if (!old_vg)
release_vg(vg);
return r;