[lvm-devel] [PATCH] use snapshot metadata usage to determine if snapshot is empty
Mike Snitzer
snitzer at redhat.com
Fri Oct 9 20:17:46 UTC 2009
Future dm-snapshot will append metadata sectors used to a snapshot's
status. This patch allows LVM2 to accurately determine if the snapshot
store is empty. Knowing when a snapshot store is empty is important in
the context of snapshot-merge (means merge is complete).
Signed-off-by: Mike Snitzer <snitzer at redhat.com>
---
diff --git a/lib/snapshot/snapshot.c b/lib/snapshot/snapshot.c
index d5bac31..6c61cf0 100644
--- a/lib/snapshot/snapshot.c
+++ b/lib/snapshot/snapshot.c
@@ -95,15 +95,17 @@ static int _snap_target_percent(void **target_state __attribute((unused)),
char *params, uint64_t *total_numerator,
uint64_t *total_denominator)
{
- uint64_t numerator, denominator;
+ uint64_t total_sectors, sectors_allocated, metadata_sectors = 0;
+ int r;
- if (sscanf(params, "%" PRIu64 "/%" PRIu64,
- &numerator, &denominator) == 2) {
- *total_numerator += numerator;
- *total_denominator += denominator;
- if (!numerator)
+ r = sscanf(params, "%" PRIu64 "/%" PRIu64 " %" PRIu64,
+ §ors_allocated, &total_sectors, &metadata_sectors);
+ if (r == 2 || r == 3) {
+ *total_numerator += sectors_allocated;
+ *total_denominator += total_sectors;
+ if (sectors_allocated == metadata_sectors)
*percent_range = PERCENT_0;
- else if (numerator == denominator)
+ else if (sectors_allocated == total_sectors)
*percent_range = PERCENT_100;
else
*percent_range = PERCENT_0_TO_100;
More information about the lvm-devel
mailing list