All of lore.kernel.org
 help / color / mirror / Atom feed
From: agk@sourceware.org <agk@sourceware.org>
To: lvm-devel@redhat.com
Subject: LVM2/tools toollib.c
Date: 12 Nov 2007 14:36:57 -0000	[thread overview]
Message-ID: <20071112143657.4286.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk at sourceware.org	2007-11-12 14:36:57

Modified files:
	tools          : toollib.c 

Log message:
	Remove new mirror logs when creation fails.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.110&r2=1.111

--- LVM2/tools/toollib.c	2007/11/02 20:40:05	1.110
+++ LVM2/tools/toollib.c	2007/11/12 14:36:57	1.111
@@ -1339,56 +1339,46 @@
 	size_t len;
 	struct str_list *sl;
 
+	if (!activation() && in_sync) {
+		log_error("Aborting. Unable to create in-sync mirror log "
+			  "while activation is disabled.");
+		return NULL;
+	}
+
 	len = strlen(lv_name) + 32;
 	if (!(log_name = alloca(len)) ||
 	    !(generate_log_name_format(vg, lv_name, log_name, len))) {
-		log_error("log_name allocation failed. "
-			  "Remove new LV and retry.");
+		log_error("log_name allocation failed.");
 		return NULL;
 	}
 
 	if (!(log_lv = lv_create_empty(log_name, NULL,
 				       VISIBLE_LV | LVM_READ | LVM_WRITE,
-				       alloc, 0, vg))) {
-		stack;
-		return NULL;
-	}
+				       alloc, 0, vg)))
+		return_NULL;
 
-	if (!lv_add_log_segment(ah, log_lv)) {
-		stack;
-		goto error;
-	}
+	if (!lv_add_log_segment(ah, log_lv))
+		return_NULL;
 
 	/* Temporary tag mirror log */
 	list_iterate_items(sl, tags)
 		if (!str_list_add(cmd->mem, &log_lv->tags, sl->str)) {
 			log_error("Aborting. Unable to tag mirror log.");
-			goto error;
+			return NULL;
 		}
 
 	/* store mirror log on disk(s) */
-	if (!vg_write(vg)) {
-		stack;
-		goto error;
-	}
+	if (!vg_write(vg))
+		return_NULL;
 
 	backup(vg);
 
-	if (!vg_commit(vg)) {
-		stack;
-		goto error;
-	}
-
-	if (!activation() && in_sync) {
-		log_error("Aborting. Unable to create in-sync mirror log "
-			  "while activation is disabled.");
-		goto error;
-	}
+	if (!vg_commit(vg))
+		return_NULL;
 
 	if (!activate_lv(cmd, log_lv)) {
-		log_error("Aborting. Failed to activate mirror log. "
-			  "Remove new LVs and retry.");
-		goto error;
+		log_error("Aborting. Failed to activate mirror log.");
+		goto revert_new_lv;
 	}
 
 	list_iterate_items(sl, tags)
@@ -1398,27 +1388,35 @@
 
 	if (activation() && !set_lv(cmd, log_lv, log_lv->size,
 				    in_sync ? -1 : 0)) {
-		log_error("Aborting. Failed to wipe mirror log. "
-			  "Remove new LV and retry.");
-		goto error;
+		log_error("Aborting. Failed to wipe mirror log.");
+		goto deactivate_and_revert_new_lv;
 	}
 
 	if (activation() && !_write_log_header(cmd, log_lv)) {
-		log_error("Aborting. Failed to write mirror log header. "
-			  "Remove new LV and retry.");
-		goto error;
+		log_error("Aborting. Failed to write mirror log header.");
+		goto deactivate_and_revert_new_lv;
 	}
 
 	if (!deactivate_lv(cmd, log_lv)) {
 		log_error("Aborting. Failed to deactivate mirror log. "
-			  "Remove new LV and retry.");
-		goto error;
+			  "Manual intervention required.");
+		return NULL;
 	}
 
 	log_lv->status &= ~VISIBLE_LV;
 
 	return log_lv;
-error:
-	/* FIXME Attempt to clean up. */
+
+deactivate_and_revert_new_lv:
+	if (!deactivate_lv(cmd, log_lv)) {
+		log_error("Unable to deactivate mirror log LV. "
+			  "Manual intervention required.");
+		return NULL;
+	}
+
+revert_new_lv:
+	if (!lv_remove(log_lv) || !vg_write(vg) || backup(vg), !vg_commit(vg))
+		log_error("Manual intervention may be required to remove "
+			  "abandoned log LV before retrying.");
 	return NULL;
 }



             reply	other threads:[~2007-11-12 14:36 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-12 14:36 agk [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-03-04 15:58 LVM2/tools toollib.c zkabelac
2010-12-20 14:05 zkabelac
2010-12-01 12:22 zkabelac
2010-12-01 10:36 zkabelac
2010-10-25 12:08 zkabelac
2010-04-28 12:23 zkabelac
2009-07-15 12:23 wysochanski
2009-07-15 12:15 wysochanski
2009-07-15  5:23 wysochanski
2009-06-10 11:15 mbroz
2009-06-10 10:15 mbroz
2009-04-23 16:45 mornfall
2009-04-24  0:40 ` Alasdair G Kergon
2009-04-07 10:22 mbroz
2008-06-11 15:02 meyering
2006-11-03 21:23 agk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071112143657.4286.qmail@sourceware.org \
    --to=agk@sourceware.org \
    --cc=lvm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.