@@ -556,9 +556,12 @@ int dm_addmap_create (struct multipath *mpp, char * params)
* Failing the second part leaves an empty map. Clean it up.
*/
err = errno;
- if (dm_map_present(mpp->alias)) {
+ if (libmp_mapinfo(DM_MAP_BY_NAME | MAPINFO_MPATH_ONLY |
+ MAPINFO_CHECK_UUID,
+ (mapid_t) { .str = mpp->alias },
+ (mapinfo_t) { .uuid = NULL }) == DMP_BAD_DEV) {
condlog(3, "%s: failed to load map (a path might be in use)", mpp->alias);
- dm_flush_map_nosync(mpp->alias);
+ dm_device_remove(mpp->alias, 0);
}
if (err != EROFS) {
condlog(3, "%s: failed to load map, error %d",
@@ -166,7 +166,6 @@ enum {
int dm_flush_map__ (const char *mapname, int flags, int retries);
#define dm_flush_map(mapname) dm_flush_map__(mapname, DMFL_NEED_SYNC, 0)
-#define dm_flush_map_nosync(mapname) dm_flush_map__(mapname, DMFL_NONE, 0)
#define dm_suspend_and_flush_map(mapname, retries) \
dm_flush_map__(mapname, DMFL_NEED_SYNC|DMFL_SUSPEND, retries)
int dm_flush_map_nopaths(const char * mapname, int deferred_remove);
dm_flush_nap_nosync() only removes a device if it has a multipath table. On failed removes, there is no table, so this function does nothing. Instead, if libmp_mapinfo() returns DMP_BAD_DEV, then there is an empty map, and it is removed using dm_device_remove(). Also, since there are no longer any callers of dm_flush_map_nosync(), remove it. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> --- libmultipath/devmapper.c | 7 +++++-- libmultipath/devmapper.h | 1 - 2 files changed, 5 insertions(+), 3 deletions(-)