From adc83f6dca32ea9457ebc7fa087284aad5fe6701 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Fri, 5 Jan 2024 14:07:24 +0100 Subject: [PATCH] tests: add helper for creating arbitrary linear mapping. --- tests/api_test.h | 2 ++ tests/test_utils.c | 28 +++++++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/tests/api_test.h b/tests/api_test.h index 49fc5b65..84602c8f 100644 --- a/tests/api_test.h +++ b/tests/api_test.h @@ -45,6 +45,8 @@ int t_set_readahead(const char *device, unsigned value); int fips_mode(void); +int create_dmdevice_over_device(const char *dm_name, const char *device, uint64_t size, uint64_t offset); + int create_dmdevice_over_loop(const char *dm_name, const uint64_t size); int get_key_dm(const char *name, char *buffer, unsigned int buffer_size); diff --git a/tests/test_utils.c b/tests/test_utils.c index af0b7f6f..aeccd63b 100644 --- a/tests/test_utils.c +++ b/tests/test_utils.c @@ -200,26 +200,40 @@ int fips_mode(void) * size of the loop device or not */ int create_dmdevice_over_loop(const char *dm_name, const uint64_t size) +{ + int r; + + r = create_dmdevice_over_device(dm_name, THE_LOOP_DEV, size, t_dev_offset); + if (r != 0) + return r; + + t_dev_offset += size; + + return r; +} + +/* + * Creates dm-linear target over the desired block device. + */ +int create_dmdevice_over_device(const char *dm_name, const char *device, uint64_t size, uint64_t offset) { char cmd[128]; int r; uint64_t r_size; - if (t_device_size(THE_LOOP_DEV, &r_size) < 0 || r_size <= t_dev_offset || !size) + if (!device || t_device_size(device, &r_size) < 0 || r_size <= offset || !size) return -1; - if ((r_size - t_dev_offset) < size) { - printf("No enough space on backing loop device\n."); + if ((r_size - offset) < size) { + printf("No enough space on device %s\n.", device); return -2; } r = snprintf(cmd, sizeof(cmd), "dmsetup create %s --table \"0 %" PRIu64 " linear %s %" PRIu64 "\"", - dm_name, size, THE_LOOP_DEV, t_dev_offset); + dm_name, size, device, offset); if (r < 0 || (size_t)r >= sizeof(cmd)) return -3; - if (!(r = _system(cmd, 1))) - t_dev_offset += size; - return r; + return _system(cmd, 1); } __attribute__((format(printf, 3, 4)))