diff options
Diffstat (limited to '0167-RHBZ-1335176-fix-show-cmds.patch')
-rw-r--r-- | 0167-RHBZ-1335176-fix-show-cmds.patch | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/0167-RHBZ-1335176-fix-show-cmds.patch b/0167-RHBZ-1335176-fix-show-cmds.patch new file mode 100644 index 0000000..55154b6 --- /dev/null +++ b/0167-RHBZ-1335176-fix-show-cmds.patch @@ -0,0 +1,138 @@ +--- + libmultipath/print.c | 7 +++++++ + libmultipath/structs.h | 1 + + libmultipath/structs_vec.c | 24 ++++++++++++++---------- + multipathd/cli_handlers.c | 11 ++++++++++- + multipathd/main.c | 2 ++ + 5 files changed, 34 insertions(+), 11 deletions(-) + +Index: multipath-tools-130222/libmultipath/print.c +=================================================================== +--- multipath-tools-130222.orig/libmultipath/print.c ++++ multipath-tools-130222/libmultipath/print.c +@@ -248,6 +248,12 @@ snprint_q_timeouts (char * buff, size_t + } + + static int ++snprint_map_failures (char * buff, size_t len, struct multipath * mpp) ++{ ++ return snprint_uint(buff, len, mpp->stat_map_failures); ++} ++ ++static int + snprint_multipath_uuid (char * buff, size_t len, struct multipath * mpp) + { + return snprint_str(buff, len, mpp->wwid); +@@ -546,6 +552,7 @@ struct multipath_data mpd[] = { + {'t', "dm-st", 0, snprint_dm_map_state}, + {'S', "size", 0, snprint_multipath_size}, + {'f', "features", 0, snprint_features}, ++ {'x', "failures", 0, snprint_map_failures}, + {'h', "hwhandler", 0, snprint_hwhandler}, + {'A', "action", 0, snprint_action}, + {'0', "path_faults", 0, snprint_path_faults}, +Index: multipath-tools-130222/libmultipath/structs.h +=================================================================== +--- multipath-tools-130222.orig/libmultipath/structs.h ++++ multipath-tools-130222/libmultipath/structs.h +@@ -270,6 +270,7 @@ struct multipath { + unsigned int stat_map_loads; + unsigned int stat_total_queueing_time; + unsigned int stat_queueing_timeouts; ++ unsigned int stat_map_failures; + + /* checkers shared data */ + void * mpcontext; +Index: multipath-tools-130222/libmultipath/structs_vec.c +=================================================================== +--- multipath-tools-130222.orig/libmultipath/structs_vec.c ++++ multipath-tools-130222/libmultipath/structs_vec.c +@@ -579,16 +579,20 @@ int update_multipath (struct vectors *ve + */ + void update_queue_mode_del_path(struct multipath *mpp) + { +- if (--mpp->nr_active == 0 && mpp->no_path_retry > 0) { +- /* +- * Enter retry mode. +- * meaning of +1: retry_tick may be decremented in +- * checkerloop before starting retry. +- */ +- mpp->stat_queueing_timeouts++; +- mpp->retry_tick = mpp->no_path_retry * conf->checkint + 1; +- condlog(1, "%s: Entering recovery mode: max_retries=%d", +- mpp->alias, mpp->no_path_retry); ++ if (--mpp->nr_active == 0) { ++ if (mpp->no_path_retry > 0) { ++ /* ++ * Enter retry mode. ++ * meaning of +1: retry_tick may be decremented in ++ * checkerloop before starting retry. ++ */ ++ mpp->stat_queueing_timeouts++; ++ mpp->retry_tick = mpp->no_path_retry * ++ conf->checkint + 1; ++ condlog(1, "%s: Entering recovery mode: max_retries=%d", ++ mpp->alias, mpp->no_path_retry); ++ } else if (mpp->no_path_retry != NO_PATH_RETRY_QUEUE) ++ mpp->stat_map_failures++; + } + condlog(2, "%s: remaining active paths: %d", mpp->alias, mpp->nr_active); + } +Index: multipath-tools-130222/multipathd/cli_handlers.c +=================================================================== +--- multipath-tools-130222.orig/multipathd/cli_handlers.c ++++ multipath-tools-130222/multipathd/cli_handlers.c +@@ -319,9 +319,14 @@ show_maps (char ** r, int *len, struct v + c += snprint_multipath_header(c, reply + maxlen - c, + style); + +- vector_foreach_slot(vecs->mpvec, mpp, i) ++ vector_foreach_slot(vecs->mpvec, mpp, i) { ++ if (update_multipath(vecs, mpp->alias, 0)) { ++ i--; ++ continue; ++ } + c += snprint_multipath(c, reply + maxlen - c, + style, mpp, pretty); ++ } + + again = ((c - reply) == (maxlen - 1)); + +@@ -742,6 +747,8 @@ cli_disable_queueing(void *v, char **rep + return 1; + } + ++ if (mpp->nr_active == 0) ++ mpp->stat_map_failures++; + mpp->retry_tick = 0; + dm_queue_if_no_path(mpp->alias, 0); + return 0; +@@ -756,6 +763,8 @@ cli_disable_all_queueing(void *v, char * + + condlog(2, "disable queueing (operator)"); + vector_foreach_slot(vecs->mpvec, mpp, i) { ++ if (mpp->nr_active == 0) ++ mpp->stat_map_failures++; + mpp->retry_tick = 0; + dm_queue_if_no_path(mpp->alias, 0); + } +Index: multipath-tools-130222/multipathd/main.c +=================================================================== +--- multipath-tools-130222.orig/multipathd/main.c ++++ multipath-tools-130222/multipathd/main.c +@@ -716,6 +716,7 @@ ev_remove_path (struct path *pp, struct + mpp->retry_tick = 0; + mpp->no_path_retry = NO_PATH_RETRY_FAIL; + mpp->flush_on_last_del = FLUSH_IN_PROGRESS; ++ mpp->stat_map_failures++; + dm_queue_if_no_path(mpp->alias, 0); + } + if (!flush_map(mpp, vecs, 1)) { +@@ -1184,6 +1185,7 @@ retry_count_tick(vector mpvec) + mpp->stat_total_queueing_time++; + condlog(4, "%s: Retrying.. No active path", mpp->alias); + if(--mpp->retry_tick == 0) { ++ mpp->stat_map_failures++; + dm_queue_if_no_path(mpp->alias, 0); + condlog(2, "%s: Disable queueing", mpp->alias); + } |