If no_path_retry was greater than 0, multipathd was counting a map
failure when recovery mode was entered, and again when queueing was
disabled. The first one is incorrect, since the map is still queueing.

Signed-off-by: Benjamin Marzinski <[email protected]>
---
 libmultipath/structs_vec.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
index c0c5cc90..ccc4efc7 100644
--- a/libmultipath/structs_vec.c
+++ b/libmultipath/structs_vec.c
@@ -844,10 +844,13 @@ int verify_paths(struct multipath *mpp)
 void update_queue_mode_del_path(struct multipath *mpp)
 {
        int active = count_active_paths(mpp);
+       bool is_queueing = mpp->features &&
+                          strstr(mpp->features, "queue_if_no_path");
 
        if (active == 0) {
                enter_recovery_mode(mpp);
-               if (mpp->no_path_retry != NO_PATH_RETRY_QUEUE)
+               if (mpp->no_path_retry == NO_PATH_RETRY_FAIL ||
+                   (mpp->no_path_retry == NO_PATH_RETRY_UNDEF && !is_queueing))
                        mpp->stat_map_failures++;
        }
        condlog(2, "%s: remaining active paths: %d", mpp->alias, active);
-- 
2.45.0


Reply via email to