summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-11-04 23:06:21 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2014-11-05 15:30:59 +0100
commit94e4d5fcf51abdfd42df9299109fbc9d22f2f92b (patch)
tree1a52f51ffb1996e55bb1a39a8a1644b62b110891
parent6e5790f2d24d798e217fc005522c07e06c97adc9 (diff)
downloadlvm2-94e4d5fcf51abdfd42df9299109fbc9d22f2f92b.tar.gz
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.
-rw-r--r--lib/metadata/lv_manip.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 30188e406..629262651 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;
}
/*