From d8ad775622b5e3a319104b48d1217b6a15434376 Mon Sep 17 00:00:00 2001 From: lifeng68 Date: Sat, 13 Jun 2020 14:34:52 +0800 Subject: [PATCH] dev_mapper: fix device mapper metadata path Signed-off-by: lifeng68 --- .../graphdriver/devmapper/devices_constants.h | 1 - .../graphdriver/devmapper/deviceset.c | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h b/src/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h index e840830..e0acaa3 100644 --- a/src/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h +++ b/src/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h @@ -21,7 +21,6 @@ #include "isula_libutils/image_devmapper_deviceset_metadata.h" #include "isula_libutils/image_devmapper_direct_lvm_config.h" -#define DEVICE_FILE_DIR "/var/lib/isulad/storage/devicemapper/metadata" #define DEVICE_SET_METAFILE "deviceset-metadata" #define TRANSACTION_METADATA "transaction-metadata" #define DEVICE_DIRECTORY "/dev" diff --git a/src/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c b/src/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c index 92b8ef3..3ea80d5 100644 --- a/src/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c +++ b/src/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c @@ -562,18 +562,26 @@ static uint64_t get_base_device_size(struct device_set *devset) static int device_file_walk(struct device_set *devset) { int ret = 0; - DIR *dp; - struct dirent *entry; + DIR *dp = NULL; + struct dirent *entry = NULL; struct stat st; image_devmapper_device_info *info = NULL; char fname[PATH_MAX] = { 0 }; + char *metadir = NULL; - dp = opendir(DEVICE_FILE_DIR); - if (dp == NULL) { - ERROR("devmapper: open dir %s failed", DEVICE_FILE_DIR); + metadir = metadata_dir(devset); + if (metadir == NULL) { + ERROR("Failed to get meta data directory"); return -1; } + dp = opendir(metadir); + if (dp == NULL) { + ERROR("devmapper: open dir %s failed", metadir); + ret = -1; + goto out; + } + // 路径权限导致stat为非regular文件,误判为dir,此处需优化 while ((entry = readdir(dp)) != NULL) { int pathname_len; @@ -583,7 +591,7 @@ static int device_file_walk(struct device_set *devset) } (void)memset(fname, 0, sizeof(fname)); - pathname_len = snprintf(fname, PATH_MAX, "%s/%s", DEVICE_FILE_DIR, entry->d_name); + pathname_len = snprintf(fname, PATH_MAX, "%s/%s", metadir, entry->d_name); if (pathname_len < 0 || pathname_len >= PATH_MAX) { ERROR("Pathname too long"); continue; @@ -618,7 +626,10 @@ static int device_file_walk(struct device_set *devset) } out: - closedir(dp); + if (dp != NULL) { + closedir(dp); + } + free(metadir); return ret; } @@ -2433,8 +2444,7 @@ static int devmapper_init_devset(const char *driver_home, const char **options, goto out; } - ret = devmapper_parse_options(devset, options, len); - if (ret != 0) { + if (devmapper_parse_options(devset, options, len) != 0) { ERROR("devmapper: parse options failed"); ret = -1; goto out; @@ -2453,8 +2463,7 @@ static int devmapper_init_devset(const char *driver_home, const char **options, goto out; } - ret = pthread_rwlock_init(&devset->devmapper_driver_rwlock, NULL); - if (ret != 0) { + if (pthread_rwlock_init(&devset->devmapper_driver_rwlock, NULL) != 0) { ERROR("Failed to init devmapper conf rwlock"); ret = -1; goto out; -- GitLab