summaryrefslogtreecommitdiffstats
path: root/lib/snapshot/snapshot.c
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2009-10-01 00:35:29 +0000
committerAlasdair Kergon <agk@redhat.com>2009-10-01 00:35:29 +0000
commit78ad1549a53dbaee7679e635c1ba1c6d15506a52 (patch)
tree8cf30c7f8fb1458dd4e226514957c30758deb7f5 /lib/snapshot/snapshot.c
parent4b12fa1377d2d5bccf30ebac96a2c81644d14ed4 (diff)
downloadlvm2-78ad1549a53dbaee7679e635c1ba1c6d15506a52.tar.gz
lvm2-78ad1549a53dbaee7679e635c1ba1c6d15506a52.tar.xz
lvm2-78ad1549a53dbaee7679e635c1ba1c6d15506a52.zip
Introduce percent_range_t and centralise snapshot full/mirror in-sync checks.
Diffstat (limited to 'lib/snapshot/snapshot.c')
-rw-r--r--lib/snapshot/snapshot.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/snapshot/snapshot.c b/lib/snapshot/snapshot.c
index d704ff9b..d5bac31b 100644
--- a/lib/snapshot/snapshot.c
+++ b/lib/snapshot/snapshot.c
@@ -88,11 +88,12 @@ static int _snap_text_export(const struct lv_segment *seg, struct formatter *f)
#ifdef DEVMAPPER_SUPPORT
static int _snap_target_percent(void **target_state __attribute((unused)),
- struct dm_pool *mem __attribute((unused)),
- struct cmd_context *cmd __attribute((unused)),
- struct lv_segment *seg __attribute((unused)),
- char *params, uint64_t *total_numerator,
- uint64_t *total_denominator)
+ percent_range_t *percent_range,
+ struct dm_pool *mem __attribute((unused)),
+ struct cmd_context *cmd __attribute((unused)),
+ struct lv_segment *seg __attribute((unused)),
+ char *params, uint64_t *total_numerator,
+ uint64_t *total_denominator)
{
uint64_t numerator, denominator;
@@ -100,7 +101,16 @@ static int _snap_target_percent(void **target_state __attribute((unused)),
&numerator, &denominator) == 2) {
*total_numerator += numerator;
*total_denominator += denominator;
- }
+ if (!numerator)
+ *percent_range = PERCENT_0;
+ else if (numerator == denominator)
+ *percent_range = PERCENT_100;
+ else
+ *percent_range = PERCENT_0_TO_100;
+ } else if (!strcmp(params, "Invalid"))
+ *percent_range = PERCENT_INVALID;
+ else
+ return 0;
return 1;
}