public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
From: snitzer@sourceware.org
To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org
Subject: LVM2 ./WHATS_NEW lib/activate/dev_manager.c
Date: Fri, 22 Jan 2010 15:40:00 -0000	[thread overview]
Message-ID: <20100122154033.29385.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	snitzer@sourceware.org	2010-01-22 15:40:32

Modified files:
	.              : WHATS_NEW 
	lib/activate   : dev_manager.c 

Log message:
	Eliminate extra ioctls just to check open_count in _add_new_lv_to_dtree.
	
	DM >= 4.7.0 always returns open_count so just use the associated nodes'
	existing info.
	
	Introduce _cached_info() to get an LV's cached info.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1403&r2=1.1404
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.176&r2=1.177

--- LVM2/WHATS_NEW	2010/01/22 14:33:33	1.1403
+++ LVM2/WHATS_NEW	2010/01/22 15:40:31	1.1404
@@ -1,5 +1,6 @@
 Version 2.02.60
 ===================================
+  Eliminate extra ioctls just to check open_count in _add_new_lv_to_dtree.
   Disable not thread-safe memory debugging if dmeventd is configured.
   Fix first log message prefix in syslog for dmeventd plugins.
   Fix exported symbols names for dmeventd lvm2 wrapper plugin.
--- LVM2/lib/activate/dev_manager.c	2010/01/22 13:28:54	1.176
+++ LVM2/lib/activate/dev_manager.c	2010/01/22 15:40:32	1.177
@@ -249,6 +249,35 @@
 		     info, read_ahead);
 }
 
+static const struct dm_info *_cached_info(struct dm_pool *mem,
+					  const struct logical_volume *lv,
+					  struct dm_tree *dtree)
+{
+	const char *dlid;
+	struct dm_tree_node *dnode;
+	const struct dm_info *dinfo;
+
+	if (!(dlid = _build_dlid(mem, lv->lvid.s, NULL))) {
+		log_error("dlid build failed for %s", lv->name);
+		return NULL;
+	}
+
+	if (!(dnode = dm_tree_find_node_by_uuid(dtree, dlid))) {
+		log_error("failed to find tree node for %s", lv->name);
+		return NULL;
+	}
+
+	if (!(dinfo = dm_tree_node_get_info(dnode))) {
+		log_error("failed to get info from tree node for %s", lv->name);
+		return NULL;
+	}
+
+	if (!dinfo->exists)
+		return NULL;
+
+	return dinfo;
+}
+
 /* FIXME Interface must cope with multiple targets */
 static int _status_run(const char *name, const char *uuid,
 		       unsigned long long *s, unsigned long long *l,
@@ -1117,7 +1146,7 @@
 	struct lv_segment *seg;
 	struct lv_layer *lvlayer;
 	struct dm_tree_node *dnode;
-	struct dm_info dinfo;
+	const struct dm_info *dinfo;
 	char *name, *dlid, *lv_name;
 	uint32_t max_stripe_size = UINT32_C(0);
 	uint32_t read_ahead = lv->read_ahead;
@@ -1130,15 +1159,14 @@
 		/*
 		 * Clear merge attributes if merge isn't currently possible:
 		 * either origin or merging snapshot are open
-		 * - must refresh info's open_count, so using the tree's
-		 *   existing nodes' info isn't an option
-		 * - but use "snapshot-merge" if it is already being used
+		 * - but use "snapshot-merge" if it is already in use
+		 * - open_count is always retrieved (as of dm-ioctl 4.7.0)
+		 *   so just use the tree's existing nodes' info
 		 */
-		/* FIXME Avoid this - open_count is always returned by kernel now. */
-		if ((dev_manager_info(dm->mem, NULL, lv,
-				      0, 1, 0, &dinfo, NULL) && dinfo.open_count) ||
-		    (dev_manager_info(dm->mem, NULL, find_merging_cow(lv)->cow,
-				      0, 1, 0, &dinfo, NULL) && dinfo.open_count)) {
+		if (((dinfo = _cached_info(dm->mem, lv,
+					   dtree)) && dinfo->open_count) ||
+		    ((dinfo = _cached_info(dm->mem, find_merging_cow(lv)->cow,
+					   dtree)) && dinfo->open_count)) {
 			/* FIXME Is there anything simpler to check for instead? */
 			if (!_lv_has_target_type(dm, lv, NULL, "snapshot-merge"))
 				clear_snapshot_merge(lv);


             reply	other threads:[~2010-01-22 15:40 UTC|newest]

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