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 <bmarzins@xxxxxxxxxx> Reviewed-by: Martin Wilck <mwilck@xxxxxxxx> --- 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