public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
From: agk@sourceware.org
To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org
Subject: LVM2/tools toollib.c
Date: Mon, 12 Nov 2007 14:36:00 -0000	[thread overview]
Message-ID: <20071112143657.4286.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk@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: 20+ 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 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-07 10:22 mbroz
2008-06-11 15:02 meyering
2006-11-03 21:23 agk
2006-03-10 15:41 agk
2005-01-19 17:31 agk
2005-01-19 17:31 agk
2004-06-20 15:14 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 \
    --cc=lvm2-cvs@sourceware.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).