From 4194fc9bbdc9107120ba09c22e56612d854fdd41 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Sat, 23 Jun 2018 23:02:24 +0200 Subject: device_mapper: add new _dm_task_create_device_status Introduce new function _dm_task_create_device_status for grabbing status of device for better code sharing. --- device_mapper/libdm-deptree.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'device_mapper') diff --git a/device_mapper/libdm-deptree.c b/device_mapper/libdm-deptree.c index 5327b2e04..bb552b679 100644 --- a/device_mapper/libdm-deptree.c +++ b/device_mapper/libdm-deptree.c @@ -1382,20 +1382,14 @@ out: return r; } -static int _thin_pool_get_status(struct dm_tree_node *dnode, - struct dm_status_thin_pool *s) +static struct dm_task *_dm_task_create_device_status(uint32_t major, uint32_t minor) { struct dm_task *dmt; - int r = 0; - uint64_t start, length; - char *type = NULL; - char *params = NULL; if (!(dmt = dm_task_create(DM_DEVICE_STATUS))) - return_0; + return_NULL; - if (!dm_task_set_major(dmt, dnode->info.major) || - !dm_task_set_minor(dmt, dnode->info.minor)) { + if (!dm_task_set_major(dmt, major) || !dm_task_set_minor(dmt, minor)) { log_error("Failed to set major minor."); goto out; } @@ -1406,6 +1400,26 @@ static int _thin_pool_get_status(struct dm_tree_node *dnode, if (!dm_task_run(dmt)) goto_out; + return dmt; +out: + dm_task_destroy(dmt); + + return NULL; +} + +static int _thin_pool_get_status(struct dm_tree_node *dnode, + struct dm_status_thin_pool *s) +{ + struct dm_task *dmt; + int r = 0; + uint64_t start, length; + char *type = NULL; + char *params = NULL; + + if (!(dmt = _dm_task_create_device_status(dnode->info.major, + dnode->info.minor))) + return_0; + dm_get_next_target(dmt, NULL, &start, &length, &type, ¶ms); if (!type || (strcmp(type, "thin-pool") != 0)) { -- cgit v1.2.1