dbdf7ab1ce
Add 0100-libmultipath-avoid-temporarily-enabling-queueing-on-.patch Add 0101-multipathd-Make-sure-to-disable-queueing-if-recovery.patch * Fixes RHEL-17234 ("RHEL9 dm-multipath no_path_retry [retry number] is undone if paths are later lost for an open map.") Add 0102-multipathd-remove-nopath-flushing-code-from-flush_ma.patch Add 0103-multipathd-make-flush_map-delete-maps-like-the-multi.patch Add 0104-multipathd-disable-queueing-when-removing-unknown-ma.patch * Fixes RHEL-4998 ("When remove external lun from host, rescan lun status will cause the OS hang and no response") Resolves: RHEL-4998 Resolves: RHEL-17234
84 lines
2.8 KiB
Diff
84 lines
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Date: Fri, 8 Dec 2023 14:50:31 -0500
|
|
Subject: [PATCH] multipathd: disable queueing when removing unknown maps
|
|
|
|
Make cli_del_maps() call dm_suspend_and_flush_map() for the unknown
|
|
multipath devices as well.
|
|
|
|
After this change, all callers of cli_del_maps() set need_suspend, so
|
|
simplify dm_flush_maps().
|
|
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmultipath/devmapper.c | 7 ++-----
|
|
libmultipath/devmapper.h | 2 +-
|
|
multipath/main.c | 2 +-
|
|
multipathd/cli_handlers.c | 2 +-
|
|
4 files changed, 5 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
|
index 4b2e8a15..f9de3358 100644
|
|
--- a/libmultipath/devmapper.c
|
|
+++ b/libmultipath/devmapper.c
|
|
@@ -1145,7 +1145,7 @@ dm_flush_map_nopaths(const char * mapname,
|
|
|
|
#endif
|
|
|
|
-int dm_flush_maps (int need_suspend, int retries)
|
|
+int dm_flush_maps (int retries)
|
|
{
|
|
int r = 1;
|
|
struct dm_task *dmt;
|
|
@@ -1170,10 +1170,7 @@ int dm_flush_maps (int need_suspend, int retries)
|
|
goto out;
|
|
|
|
do {
|
|
- if (need_suspend)
|
|
- r |= dm_suspend_and_flush_map(names->name, retries);
|
|
- else
|
|
- r |= dm_flush_map(names->name);
|
|
+ r |= dm_suspend_and_flush_map(names->name, retries);
|
|
next = names->next;
|
|
names = (void *) names + next;
|
|
} while (next);
|
|
diff --git a/libmultipath/devmapper.h b/libmultipath/devmapper.h
|
|
index 45a676de..808da28d 100644
|
|
--- a/libmultipath/devmapper.h
|
|
+++ b/libmultipath/devmapper.h
|
|
@@ -55,7 +55,7 @@ int dm_flush_map_nopaths(const char * mapname, int deferred_remove);
|
|
#define dm_suspend_and_flush_map(mapname, retries) \
|
|
_dm_flush_map(mapname, 1, 0, 1, retries)
|
|
int dm_cancel_deferred_remove(struct multipath *mpp);
|
|
-int dm_flush_maps (int need_suspend, int retries);
|
|
+int dm_flush_maps (int retries);
|
|
int dm_fail_path(const char * mapname, char * path);
|
|
int dm_reinstate_path(const char * mapname, char * path);
|
|
int dm_queue_if_no_path(const char *mapname, int enable);
|
|
diff --git a/multipath/main.c b/multipath/main.c
|
|
index f1077421..e296be6e 100644
|
|
--- a/multipath/main.c
|
|
+++ b/multipath/main.c
|
|
@@ -1126,7 +1126,7 @@ main (int argc, char *argv[])
|
|
goto out;
|
|
}
|
|
else if (cmd == CMD_FLUSH_ALL) {
|
|
- r = dm_flush_maps(1, retries) ? RTVL_FAIL : RTVL_OK;
|
|
+ r = dm_flush_maps(retries) ? RTVL_FAIL : RTVL_OK;
|
|
goto out;
|
|
}
|
|
while ((r = configure(conf, cmd, dev_type, dev)) == RTVL_RETRY)
|
|
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
|
index f04fb558..aca8e2df 100644
|
|
--- a/multipathd/cli_handlers.c
|
|
+++ b/multipathd/cli_handlers.c
|
|
@@ -802,7 +802,7 @@ cli_del_maps (void *v, char **reply, int *len, void *data)
|
|
i--;
|
|
}
|
|
/* flush any multipath maps that aren't currently known by multipathd */
|
|
- ret |= dm_flush_maps(0, 0);
|
|
+ ret |= dm_flush_maps(0);
|
|
return ret;
|
|
}
|
|
|