summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/lvconvert.c12
-rw-r--r--tools/lvcreate.c5
-rw-r--r--tools/lvrename.c5
-rw-r--r--tools/lvresize.c5
-rw-r--r--tools/polldaemon.c3
-rw-r--r--tools/pvchange.c5
-rw-r--r--tools/pvdisplay.c4
-rw-r--r--tools/pvmove.c12
-rw-r--r--tools/pvresize.c15
-rw-r--r--tools/reporter.c4
-rw-r--r--tools/vgextend.c11
-rw-r--r--tools/vgmerge.c14
12 files changed, 61 insertions, 34 deletions
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index e2285fdc..de420115 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -239,7 +239,10 @@ static struct volume_group *_get_lvconvert_vg(struct cmd_context *cmd,
{
dev_close_all();
- return vg_read_for_update(cmd, extract_vgname(cmd, lv_name),
+ /*
+ * uuid is here LV uuid, but vg_read will use only first part.
+ */
+ return vg_read_for_update(cmd, extract_vgname(cmd, lv_name),
NULL, 0);
}
@@ -933,9 +936,10 @@ int lvconvert(struct cmd_context * cmd, int argc, char **argv)
log_verbose("Checking for existing volume group \"%s\"", lp.vg_name);
- vg = vg_read_for_update(cmd, lp.vg_name, NULL, 0);
- if (vg_read_error(vg))
- return ECMD_FAILED;
+ if (!(vg = vg_lock_and_read(cmd, lp.vg_name, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
+ goto out;
if (!(lvl = find_lv_in_vg(vg, lp.lv_name))) {
log_error("Logical volume \"%s\" not found in "
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 030aa0c9..37d30c69 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -994,8 +994,9 @@ int lvcreate(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
log_verbose("Finding volume group \"%s\"", lp.vg_name);
- vg = vg_read_for_update(cmd, lp.vg_name, NULL, 0);
- if (vg_read_error(vg))
+ if (!(vg = vg_lock_and_read(cmd, lp.vg_name, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
return ECMD_FAILED;
if (!_lvcreate(cmd, vg, &lp))
diff --git a/tools/lvrename.c b/tools/lvrename.c
index 53ea1165..b5d3b383 100644
--- a/tools/lvrename.c
+++ b/tools/lvrename.c
@@ -102,8 +102,9 @@ int lvrename(struct cmd_context *cmd, int argc, char **argv)
}
log_verbose("Checking for existing volume group \"%s\"", vg_name);
- vg = vg_read_for_update(cmd, vg_name, NULL, 0);
- if (vg_read_error(vg))
+ if (!(vg = vg_lock_and_read(cmd, vg_name, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
return ECMD_FAILED;
if (!(lvl = find_lv_in_vg(vg, lv_name_old))) {
diff --git a/tools/lvresize.c b/tools/lvresize.c
index b5587921..1c0f5707 100644
--- a/tools/lvresize.c
+++ b/tools/lvresize.c
@@ -671,8 +671,9 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
log_verbose("Finding volume group %s", lp.vg_name);
- vg = vg_read_for_update(cmd, lp.vg_name, NULL, 0);
- if (vg_read_error(vg)) {
+ if (!(vg = vg_lock_and_read(cmd, lp.vg_name, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT))) {
stack;
return ECMD_FAILED;
}
diff --git a/tools/polldaemon.c b/tools/polldaemon.c
index bdfd3de7..1adb521e 100644
--- a/tools/polldaemon.c
+++ b/tools/polldaemon.c
@@ -147,8 +147,7 @@ static int _wait_for_single_mirror(struct cmd_context *cmd, const char *name, co
}
/* Locks the (possibly renamed) VG again */
- vg = parms->poll_fns->get_copy_vg(cmd, name);
- if (vg_read_error(vg)) {
+ if (!(vg = parms->poll_fns->get_copy_vg(cmd, name, uuid))) {
log_error("ABORTING: Can't reread VG for %s", name);
/* What more could we do here? */
return 0;
diff --git a/tools/pvchange.c b/tools/pvchange.c
index 1c9d3944..98fe2f27 100644
--- a/tools/pvchange.c
+++ b/tools/pvchange.c
@@ -57,8 +57,9 @@ static int _pvchange_single(struct cmd_context *cmd, struct physical_volume *pv,
log_verbose("Finding volume group %s of physical volume %s",
vg_name, pv_name);
- vg = vg_read_for_update(cmd, vg_name, NULL, 0);
- if (vg_read_error(vg))
+ if (!(vg = vg_lock_and_read(cmd, vg_name, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
return_0;
if (!(pvl = find_pv_in_vg(vg, pv_name))) {
diff --git a/tools/pvdisplay.c b/tools/pvdisplay.c
index c8c4a884..406e6310 100644
--- a/tools/pvdisplay.c
+++ b/tools/pvdisplay.c
@@ -29,8 +29,8 @@ static int _pvdisplay_single(struct cmd_context *cmd,
if (!is_orphan(pv) && !vg) {
vg_name = pv_vg_name(pv);
- vg = vg_read(cmd, vg_name, (char *)&pv->vgid, 0);
- if (vg_read_error(vg)) {
+ if (!(vg = vg_lock_and_read(cmd, vg_name, (char *)&pv->vgid,
+ LCK_VG_READ, CLUSTERED, 0))) {
log_error("Skipping volume group %s", vg_name);
/* FIXME If CLUSTERED should return ECMD_PROCESSED here */
return ECMD_FAILED;
diff --git a/tools/pvmove.c b/tools/pvmove.c
index d288e6f4..3d376e6b 100644
--- a/tools/pvmove.c
+++ b/tools/pvmove.c
@@ -89,9 +89,16 @@ static const char *_extract_lvname(struct cmd_context *cmd, const char *vgname,
static struct volume_group *_get_vg(struct cmd_context *cmd, const char *vgname)
{
+ struct volume_group *vg;
+
dev_close_all();
- return vg_read_for_update(cmd, vgname, NULL, 0);
+ if (!(vg = vg_lock_and_read(cmd, vgname, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
+ return NULL;
+
+ return vg;
}
/* Create list of PVs for allocation of replacement extents */
@@ -385,8 +392,7 @@ static int _set_up_pvmove(struct cmd_context *cmd, const char *pv_name,
/* Read VG */
log_verbose("Finding volume group \"%s\"", pv_vg_name(pv));
- vg = _get_vg(cmd, pv_vg_name(pv));
- if (vg_read_error(vg)) {
+ if (!(vg = _get_vg(cmd, pv_vg_name(pv)))) {
stack;
return ECMD_FAILED;
}
diff --git a/tools/pvresize.c b/tools/pvresize.c
index 82c79368..3b5f1493 100644
--- a/tools/pvresize.c
+++ b/tools/pvresize.c
@@ -29,6 +29,7 @@ static int _pv_resize_single(struct cmd_context *cmd,
const uint64_t new_size)
{
struct pv_list *pvl;
+ int consistent = 1;
uint64_t size = 0;
uint32_t new_pe_count = 0;
int r = 0;
@@ -58,9 +59,19 @@ static int _pv_resize_single(struct cmd_context *cmd,
} else {
vg_name = pv_vg_name(pv);
- vg = vg_read_for_update(cmd, vg_name, NULL, 0);
+ if (!lock_vol(cmd, vg_name, LCK_VG_WRITE)) {
+ log_error("Can't get lock for %s", pv_vg_name(pv));
+ return 0;
+ }
+
+ if (!(vg = vg_read_internal(cmd, vg_name, NULL, &consistent))) {
+ unlock_vg(cmd, vg_name);
+ log_error("Unable to find volume group of \"%s\"",
+ pv_name);
+ return 0;
+ }
- if (vg_read_error(vg))
+ if (!vg_check_status(vg, CLUSTERED | EXPORTED_VG | LVM_WRITE))
goto bad;
if (!(pvl = find_pv_in_vg(vg, pv_name))) {
diff --git a/tools/reporter.c b/tools/reporter.c
index 1e352b51..d50d586a 100644
--- a/tools/reporter.c
+++ b/tools/reporter.c
@@ -132,8 +132,8 @@ static int _pvs_single(struct cmd_context *cmd, struct volume_group *vg,
if (is_pv(pv) && !is_orphan(pv) && !vg) {
vg_name = pv_vg_name(pv);
- vg = vg_read(cmd, vg_name, (char *)&pv->vgid, 0);
- if (vg_read_error(vg)) {
+ if (!(vg = vg_lock_and_read(cmd, vg_name, (char *)&pv->vgid,
+ LCK_VG_READ, CLUSTERED, 0))) {
log_error("Skipping volume group %s", vg_name);
return ECMD_FAILED;
}
diff --git a/tools/vgextend.c b/tools/vgextend.c
index aeb85ceb..4b2044c5 100644
--- a/tools/vgextend.c
+++ b/tools/vgextend.c
@@ -42,12 +42,13 @@ int vgextend(struct cmd_context *cmd, int argc, char **argv)
}
log_verbose("Checking for volume group \"%s\"", vg_name);
- vg = vg_read_for_update(cmd, vg_name, NULL,
- READ_REQUIRE_RESIZEABLE | LOCK_NONBLOCKING);
- if (vg_read_error(vg)) {
- unlock_vg(cmd, VG_ORPHANS);
+ if (!(vg = vg_lock_and_read(cmd, vg_name, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG |
+ LVM_WRITE | RESIZEABLE_VG,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT))) {
+ unlock_vg(cmd, VG_ORPHANS);
return ECMD_FAILED;
- }
+ }
/********** FIXME
log_print("maximum logical volume size is %s",
(dummy = lvm_show_size(LVM_LV_SIZE_MAX(vg) / 2, LONG)));
diff --git a/tools/vgmerge.c b/tools/vgmerge.c
index 23b95a47..f5072193 100644
--- a/tools/vgmerge.c
+++ b/tools/vgmerge.c
@@ -28,15 +28,17 @@ static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to,
}
log_verbose("Checking for volume group \"%s\"", vg_name_to);
- vg_to = vg_read_for_update(cmd, vg_name_to, NULL, 0);
- if (vg_read_error(vg_to))
+ if (!(vg_to = vg_lock_and_read(cmd, vg_name_to, NULL, LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
return ECMD_FAILED;
log_verbose("Checking for volume group \"%s\"", vg_name_from);
- vg_from = vg_read_for_update(cmd, vg_name_from, NULL,
- LOCK_NONBLOCKING);
- if (vg_read_error(vg_from)) {
- unlock_release_vg(cmd, vg_to, vg_name_to);
+ if (!(vg_from = vg_lock_and_read(cmd, vg_name_from, NULL,
+ LCK_VG_WRITE,
+ CLUSTERED | EXPORTED_VG | LVM_WRITE,
+ CORRECT_INCONSISTENT | FAIL_INCONSISTENT))) {
+ unlock_and_release_vg(cmd, vg_to, vg_name_to);
return ECMD_FAILED;
}