diff options
author | Patrick Caulfield <pcaulfie@redhat.com> | 2001-12-07 09:37:18 +0000 |
---|---|---|
committer | Patrick Caulfield <pcaulfie@redhat.com> | 2001-12-07 09:37:18 +0000 |
commit | cbe3e5991b1c8c7f56d70cac0e1090d28cc56c84 (patch) | |
tree | d60661cf208efd6404f086c6180580c2ba6658c2 | |
parent | 3335b34c44a31d1ecdb3f5b343d3e6e92861424c (diff) | |
download | lvm2-CLUSTER_TAG.tar.gz |
Add locking to PV commands.CLUSTER_TAG
-rw-r--r-- | tools/pvchange.c | 18 | ||||
-rw-r--r-- | tools/pvcreate.c | 13 |
2 files changed, 26 insertions, 5 deletions
diff --git a/tools/pvchange.c b/tools/pvchange.c index 29bad00bd..84d7eb069 100644 --- a/tools/pvchange.c +++ b/tools/pvchange.c @@ -27,6 +27,7 @@ int pvchange(int argc, char **argv) int opt = 0; int done = 0; int total = 0; + int ret = ECMD_FAILED; struct physical_volume *pv; char *pv_name; @@ -48,6 +49,12 @@ int pvchange(int argc, char **argv) return EINVALID_CMD_LINE; } + /* Prevent other commands from interleaving */ + if (lock_lvm(0) != 0) { + log_error("error locking lvm"); + return ECMD_FAILED; + } + if (argc) { log_verbose("Using physical volume(s) on command line"); for (; opt < argc; opt++) { @@ -63,7 +70,7 @@ int pvchange(int argc, char **argv) } else { log_verbose("Scanning for physical volume names"); if (!(pvs = fid->ops->get_pvs(fid))) { - return ECMD_FAILED; + goto finish; } list_iterate(pvh, pvs) { @@ -80,8 +87,11 @@ int pvchange(int argc, char **argv) log_print("%d physical volume(s) changed / %d physical volume(s) " "not changed", done, total - done); + ret = 0; + finish: + unlock_lvm(ret); - return 0; + return ret; } int pvchange_single(struct physical_volume *pv) @@ -96,7 +106,7 @@ int pvchange_single(struct physical_volume *pv) /* If in a VG, must change using volume group. Pointless. */ /* FIXME: Provide a direct pv_write_pv that *only* touches PV structs*/ if (*pv->vg_name) { - log_verbose("Finding volume group of physical volume %s", + log_verbose("Finding volume group of physical volume %s", pv_name); if (!(vg = fid->ops->vg_read(fid, pv->vg_name))) { log_error("Unable to find volume group of %s", pv_name); @@ -144,7 +154,7 @@ int pvchange_single(struct physical_volume *pv) } } else { if (!(fid->ops->pv_write(fid, pv))) { - log_error("Failed to store physical volume %s", + log_error("Failed to store physical volume %s", pv_name); return 0; } diff --git a/tools/pvcreate.c b/tools/pvcreate.c index 7f58cc784..fd14dd31e 100644 --- a/tools/pvcreate.c +++ b/tools/pvcreate.c @@ -106,6 +106,7 @@ static void pvcreate_single(const char *pv_name) int pvcreate(int argc, char **argv) { int i; + int ret = ECMD_FAILED; if (!argc) { log_error("Please enter a physical volume path"); @@ -117,10 +118,20 @@ int pvcreate(int argc, char **argv) return EINVALID_CMD_LINE; } + /* Prevent other commands from interleaving */ + if (lock_lvm(0) != 0) { + log_error("error locking lvm"); + return ECMD_FAILED; + } + for (i = 0; i < argc; i++) { pvcreate_single(argv[i]); pool_empty(fid->cmd->mem); } - return 0; + ret = 0; + finish: + unlock_lvm(ret); + + return ret; } |