[lvm-devel] master - cleanup: avoid dm_list size calc in common path

Zdenek Kabelac zkabelac at fedoraproject.org
Wed Nov 5 14:33:33 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=94e4d5fcf51abdfd42df9299109fbc9d22f2f92b
Commit:        94e4d5fcf51abdfd42df9299109fbc9d22f2f92b
Parent:        6e5790f2d24d798e217fc005522c07e06c97adc9
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Tue Nov 4 23:06:21 2014 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Nov 5 15:30:59 2014 +0100

cleanup: avoid dm_list size calc in common path

Calculate dm_list_size only when there is not just a single
ont segment in list - so it's only counted on error path.
---
 lib/metadata/lv_manip.c |   31 ++++++++++++++++---------------
 1 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 30188e4..6292626 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -826,24 +826,25 @@ struct lv_segment *get_only_segment_using_this_lv(const struct logical_volume *l
 		return NULL;
 	}
 
-	if (dm_list_size(&lv->segs_using_this_lv) != 1) {
-		log_error("%s is expected to have only one segment using it, "
-			  "while it has %d", lv->name,
-			  dm_list_size(&lv->segs_using_this_lv));
-		return NULL;
-	}
+	dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
+		/* Needs to be he only item in list */
+		if (!dm_list_end(&lv->segs_using_this_lv, &sl->list))
+			break;
 
-	dm_list_iterate_items(sl, &lv->segs_using_this_lv)
-		break; /* first item */
+		if (sl->count != 1) {
+			log_error("%s is expected to have only one segment using it, "
+				  "while %s:%" PRIu32 " uses it %d times.",
+				  display_lvname(lv), sl->seg->lv->name, sl->seg->le, sl->count);
+			return NULL;
+		}
 
-	if (sl->count != 1) {
-		log_error("%s is expected to have only one segment using it, "
-			  "while %s:%" PRIu32 " uses it %d times",
-			  lv->name, sl->seg->lv->name, sl->seg->le, sl->count);
-		return NULL;
+		return sl->seg;
 	}
 
-	return sl->seg;
+	log_error("%s is expected to have only one segment using it, while it has %d.",
+		  display_lvname(lv), dm_list_size(&lv->segs_using_this_lv));
+
+	return NULL;
 }
 
 /*




More information about the lvm-devel mailing list