[lvm-devel] [PATCH 10/11] Convert vgsplit to use vg_read_for_update.
Petr Rockai
prockai at redhat.com
Mon Jan 12 14:08:05 UTC 2009
Fri Jan 9 15:47:09 CET 2009 Petr Rockai <me at mornfall.net>
* Convert vgsplit to use vg_read_for_update.
diff -rN -u -p old-lvmlib_apply/tools/vgsplit.c new-lvmlib_apply/tools/vgsplit.c
--- old-lvmlib_apply/tools/vgsplit.c 2009-01-12 14:56:01.263018781 +0100
+++ new-lvmlib_apply/tools/vgsplit.c 2009-01-12 14:56:01.355015599 +0100
@@ -320,21 +320,20 @@ int vgsplit(struct cmd_context *cmd, int
}
log_verbose("Checking for volume group \"%s\"", vg_name_from);
- if (!(vg_from = vg_lock_and_read(cmd, vg_name_from, NULL, LCK_VG_WRITE,
- CLUSTERED | EXPORTED_VG |
- RESIZEABLE_VG | LVM_WRITE,
- CORRECT_INCONSISTENT | FAIL_INCONSISTENT)))
- return ECMD_FAILED;
+ vg_from = vg_read_for_update(cmd, vg_name_from, NULL,
+ REQUIRE_RESIZEABLE);
+ if (vg_read_error(vg_from))
+ return ECMD_FAILED;
log_verbose("Checking for new volume group \"%s\"", vg_name_to);
- if (!lock_vol(cmd, vg_name_to, LCK_VG_WRITE | LCK_NONBLOCK)) {
- log_error("Can't get lock for %s", vg_name_to);
- unlock_vg(cmd, vg_name_from);
- return ECMD_FAILED;
- }
+ vg_to = vg_read_for_update(cmd, vg_name_to, NULL, REQUIRE_RESIZEABLE |
+ NONBLOCKING_LOCK | KEEP_LOCK |
+ EXISTENCE_CHECK);
+
+ if (vg_read_error(vg_to))
+ goto_bad;
- consistent = 0;
- if ((vg_to = vg_read_internal(cmd, vg_name_to, NULL, &consistent))) {
+ if (vg_might_exist(vg_to)) {
existing_vg = 1;
if (new_vg_option_specified(cmd)) {
log_error("Volume group \"%s\" exists, but new VG "
@@ -450,12 +449,14 @@ int vgsplit(struct cmd_context *cmd, int
* Finally, remove the EXPORTED flag from the new VG and write it out.
*/
consistent = 1;
- if (!test_mode() &&
- (!(vg_to = vg_read_internal(cmd, vg_name_to, NULL, &consistent)) ||
- !consistent)) {
- log_error("Volume group \"%s\" became inconsistent: please "
- "fix manually", vg_name_to);
- goto_bad;
+ if (!test_mode()) {
+ vg_to = vg_read_for_update(cmd, vg_name_to, NULL,
+ DISABLE_LOCK | ALLOW_EXPORTED);
+ if (vg_read_error(vg_to)) {
+ log_error("Volume group \"%s\" became inconsistent: "
+ "please fix manually", vg_name_to);
+ goto_bad;
+ }
}
vg_to->status &= ~EXPORTED_VG;
More information about the lvm-devel
mailing list