summaryrefslogtreecommitdiff
path: root/device_mapper/libdm-targets.c
diff options
context:
space:
mode:
Diffstat (limited to 'device_mapper/libdm-targets.c')
-rw-r--r--device_mapper/libdm-targets.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/device_mapper/libdm-targets.c b/device_mapper/libdm-targets.c
index d82e28b13..4289927bd 100644
--- a/device_mapper/libdm-targets.c
+++ b/device_mapper/libdm-targets.c
@@ -380,6 +380,35 @@ int dm_get_status_writecache(struct dm_pool *mem, const char *params,
return 1;
}
+int dm_get_status_integrity(struct dm_pool *mem, const char *params,
+ struct dm_status_integrity **status)
+{
+ struct dm_status_integrity *s;
+ char recalc_str[8];
+
+ if (!(s = dm_pool_zalloc(mem, sizeof(struct dm_status_integrity))))
+ return_0;
+
+ memset(recalc_str, 0, sizeof(recalc_str));
+
+ if (sscanf(params, "%llu %llu %s",
+ (unsigned long long *)&s->number_of_mismatches,
+ (unsigned long long *)&s->provided_data_sectors,
+ recalc_str) != 3) {
+ log_error("Failed to parse integrity params: %s.", params);
+ dm_pool_free(mem, s);
+ return 0;
+ }
+
+ if (recalc_str[0] == '-')
+ s->recalc_sector = 0;
+ else
+ s->recalc_sector = strtoull(recalc_str, NULL, 0);
+
+ *status = s;
+ return 1;
+}
+
int parse_thin_pool_status(const char *params, struct dm_status_thin_pool *s)
{
int pos;