[lvm-devel] master - cleanup: use 'dm_get_status_raid'

Zdenek Kabelac zkabelac at sourceware.org
Fri Jun 16 15:13:31 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=b7c9ec8a24a0271e55ea5aa0c9f6525011d0fa0c
Commit:        b7c9ec8a24a0271e55ea5aa0c9f6525011d0fa0c
Parent:        59d646167f8f47fbef3231469675f52d90432205
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Jun 16 10:48:38 2017 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Jun 16 17:04:01 2017 +0200

cleanup: use 'dm_get_status_raid'

Use single 'dm' call to parse raid status.
(Avoiding multiple parsers - even when we know it's slighly
less efficient).
---
 lib/raid/raid.c |   37 +++++++++++--------------------------
 1 files changed, 11 insertions(+), 26 deletions(-)

diff --git a/lib/raid/raid.c b/lib/raid/raid.c
index 969007c..c5cfb0f 100644
--- a/lib/raid/raid.c
+++ b/lib/raid/raid.c
@@ -358,36 +358,21 @@ static int _raid_target_percent(void **target_state,
 				uint64_t *total_numerator,
 				uint64_t *total_denominator)
 {
-	int i;
-	uint64_t numerator, denominator;
-	char *pos = params;
-	/*
-	 * Status line:
-	 *    <raid_type> <#devs> <status_chars> <synced>/<total>
-	 * Example:
-	 *    raid1 2 AA 1024000/1024000
-	 */
-	for (i = 0; i < 3; i++) {
-		pos = strstr(pos, " ");
-		if (pos)
-			pos++;
-		else
-			break;
-	}
-	if (!pos || (sscanf(pos, FMTu64 "/" FMTu64 "%n", &numerator, &denominator, &i) != 2) ||
-	    !denominator) {
-		log_error("Failed to parse %s status fraction: %s",
-			  (seg) ? seg->segtype->name : "segment", params);
-		return 0;
-	}
+	struct dm_status_raid *sr;
+
+	if (!dm_get_status_raid(mem, params, &sr))
+		return_0;
 
-	*total_numerator += numerator;
-	*total_denominator += denominator;
+	*total_numerator += sr->insync_regions;
+	*total_denominator += sr->total_regions;
 
 	if (seg)
-		seg->extents_copied = (uint64_t) seg->area_len * dm_make_percent(numerator, denominator) / DM_PERCENT_100;
+		seg->extents_copied = (uint64_t) seg->area_len
+			* dm_make_percent(sr->insync_regions , sr->total_regions) / DM_PERCENT_100;
+
+	*percent = dm_make_percent(sr->insync_regions, sr->total_regions);
 
-	*percent = dm_make_percent(numerator, denominator);
+	dm_pool_free(mem, sr);
 
 	return 1;
 }




More information about the lvm-devel mailing list