public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
From: mbroz@sourceware.org
To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org
Subject: LVM2 ./WHATS_NEW lib/metadata/metadata.c
Date: Thu, 19 Aug 2010 23:03:00 -0000	[thread overview]
Message-ID: <20100819230336.24367.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	mbroz@sourceware.org	2010-08-19 23:03:35

Modified files:
	.              : WHATS_NEW 
	lib/metadata   : metadata.c 

Log message:
	Change the pvcreate swap/md logic
	
	pvcreate detects MD and swap signature.
	
	The logic hidden there is not only documented but it is also
	user unfriendly. Who invented this logic should run pvcreate
	on its own critical MD device to see why;-)
	
	This patch
	- creates one function instead of duplication code
	- asks if user want to overwrite signature
	- allows aborting (!)
	(Please note that writing LVM signatute without wiping old
	is wrong, it confuses blkid, MD will not work anyway and
	swap and LUKS is broken too.)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1712&r2=1.1713
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.391&r2=1.392

--- LVM2/WHATS_NEW	2010/08/19 22:33:14	1.1712
+++ LVM2/WHATS_NEW	2010/08/19 23:03:34	1.1713
@@ -1,5 +1,6 @@
 Version 2.02.74 - 
 ==================================
+  Simplify MD/swap signature detection in pvcreate and allow aborting.
 
 Version 2.02.73 - 18th August 2010
 ==================================
--- LVM2/lib/metadata/metadata.c	2010/08/12 04:11:49	1.391
+++ LVM2/lib/metadata/metadata.c	2010/08/19 23:03:35	1.392
@@ -1526,6 +1526,40 @@
 	return 1;
 }
 
+static int _wipe_sb(struct device *dev, const char *type, const char *name,
+		    int wipe_len, struct pvcreate_params *pp,
+		    int (*func)(struct device *dev, uint64_t *signature))
+{
+	int wipe;
+	uint64_t superblock;
+
+	wipe = func(dev, &superblock);
+	if (wipe == -1) {
+		log_error("Fatal error while trying to detect %s on %s.",
+			  type, name);
+		return 0;
+	}
+
+	if (wipe == 0)
+		return 1;
+
+	/* Specifying --yes => do not ask. */
+	if (!pp->yes && (pp->force == PROMPT) &&
+	    yes_no_prompt("WARNING: %s detected on %s. Wipe it? [y/n] ",
+			  type, name) != 'y') {
+		log_error("Aborting pvcreate on %s.", name);
+		return 0;
+	}
+
+	log_print("Wiping %s on %s.", type, name);
+	if (!dev_set(dev, superblock, wipe_len, 0)) {
+		log_error("Failed to wipe %s on %s.", type, name);
+		return 0;
+	}
+
+	return 1;
+}
+
 /*
  * See if we may pvcreate on this device.
  * 0 indicates we may not.
@@ -1535,8 +1569,6 @@
 {
 	struct physical_volume *pv;
 	struct device *dev;
-	uint64_t md_superblock, swap_signature;
-	int wipe_md, wipe_swap;
 	struct dm_list mdas;
 
 	dm_list_init(&mdas);
@@ -1602,41 +1634,11 @@
 		return 0;
 	}
 
-	/* Wipe superblock? */
-	if ((wipe_md = dev_is_md(dev, &md_superblock)) == 1 &&
-	    ((!pp->idp && !pp->restorefile) || pp->yes ||
-	     (yes_no_prompt("Software RAID md superblock "
-			    "detected on %s. Wipe it? [y/n] ", name) == 'y'))) {
-		log_print("Wiping software RAID md superblock on %s", name);
-		if (!dev_set(dev, md_superblock, 4, 0)) {
-			log_error("Failed to wipe RAID md superblock on %s",
-				  name);
-			return 0;
-		}
-	}
-
-	if (wipe_md == -1) {
-		log_error("Fatal error while trying to detect software "
-			  "RAID md superblock on %s", name);
+	if (!_wipe_sb(dev, "software RAID md superblock", name, 4, pp, dev_is_md))
 		return 0;
-	}
-
-	if ((wipe_swap = dev_is_swap(dev, &swap_signature)) == 1 &&
-	    ((!pp->idp && !pp->restorefile) || pp->yes ||
-	     (yes_no_prompt("Swap signature detected on %s. Wipe it? [y/n] ",
-			    name) == 'y'))) {
-		log_print("Wiping swap signature on %s", name);
-		if (!dev_set(dev, swap_signature, 10, 0)) {
-			log_error("Failed to wipe swap signature on %s", name);
-			return 0;
-		}
-	}
 
-	if (wipe_swap == -1) {
-		log_error("Fatal error while trying to detect swap "
-			  "signature on %s", name);
+	if (!_wipe_sb(dev, "swap signature", name, 10, pp, dev_is_swap))
 		return 0;
-	}
 
 	if (sigint_caught())
 		return 0;


             reply	other threads:[~2010-08-19 23:03 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-19 23:03 mbroz [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-03-12 14:18 zkabelac
2012-02-23  0:11 agk
2012-02-13 11:01 zkabelac
2012-02-13 10:58 zkabelac
2012-02-13 10:51 zkabelac
2011-11-18 19:28 zkabelac
2011-10-24 10:24 zkabelac
2011-08-11 16:31 prajnoha
2011-08-04 15:18 zkabelac
2011-03-29 21:57 zkabelac
2011-03-11 15:06 prajnoha
2011-03-10 13:12 zkabelac
2010-12-08 10:45 zkabelac
2010-11-29 11:08 zkabelac
2010-06-22 21:10 mbroz
2010-05-21 12:45 zkabelac
2010-04-01 11:43 agk
2010-03-02 21:56 snitzer
2010-01-21 21:09 wysochanski
2010-01-05 16:01 mbroz
2009-12-18 12:45 mbroz
2009-12-18 12:44 mbroz
2009-12-11 13:14 zkabelac
2009-12-09 19:29 mbroz
2009-08-20  7:03 mbroz
2009-07-16  3:25 wysochanski
2009-05-27 13:19 agk
2009-05-12 19:09 mbroz
2009-04-22  9:31 mbroz
2009-04-10  9:56 mbroz
2009-01-26 22:43 agk
2008-09-25 15:59 mbroz
2008-06-03 17:56 agk
2008-05-08 18:06 agk
2008-04-07 22:12 agk
2008-04-04 15:41 wysochanski
2007-10-12 18:37 wysochanski
2007-07-02 21:48 wysochanski
2006-09-21 20:25 agk
2006-08-09 19:33 agk
2006-07-04 19:36 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=20100819230336.24367.qmail@sourceware.org \
    --to=mbroz@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).