Commit 79a05a4e inadvertently removed the code necessary to support multipath maps without partitions, as introduced in b73a34ea "libmultipath: add skip_kpartx option". Revert this part of the commit, so that skip_kpartx works again. Fixes: 79a05a4e libmultipath: move suspend logic to _dm_flush_map Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- libmultipath/devmapper.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c index 026418f8..5fb9d9ac 100644 --- a/libmultipath/devmapper.c +++ b/libmultipath/devmapper.c @@ -761,6 +761,12 @@ out: } static int +has_partmap(const char *name, void *data) +{ + return 1; +} + +static int partmap_in_use(const char *name, void *data) { int part_count, *ret_count = (int *)data; @@ -785,12 +791,18 @@ int _dm_flush_map (const char * mapname, int need_sync, int deferred_remove, { int r; int queue_if_no_path = 0; + int udev_flags = 0; unsigned long long mapsize; char params[PARAMS_SIZE] = {0}; if (!dm_is_mpath(mapname)) return 0; /* nothing to do */ + /* if the device currently has no partitions, do not + run kpartx on it if you fail to delete it */ + if (do_foreach_partmaps(mapname, has_partmap, NULL) == 0) + udev_flags |= MPATH_UDEV_NO_KPARTX_FLAG; + /* If you aren't doing a deferred remove, make sure that no * devices are in use */ if (!do_deferred(deferred_remove) && partmap_in_use(mapname, NULL)) @@ -834,7 +846,7 @@ int _dm_flush_map (const char * mapname, int need_sync, int deferred_remove, mapname); if (need_suspend && queue_if_no_path != -1) { dm_simplecmd_noflush(DM_DEVICE_RESUME, - mapname, 0); + mapname, udev_flags); } } if (retries) -- 2.12.2 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel