libmultipath: drop mpp->nr_active field" patch v1 to v2
authorMartin Wilck <mwilck@suse.com>
Sat, 7 Mar 2020 10:57:53 +0000 (11:57 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sat, 7 Mar 2020 10:57:53 +0000 (11:57 +0100)
commitd2cf050588e2eae49d3f59fe2cce011be1e4cba5
tree3b734f675c2ed3a01f88517f21d97f4800dd3bba
parent96ecfec4c2dfb07a495fd2e3f870e6a42f9d9f1e
libmultipath: drop mpp->nr_active field" patch v1 to v2

v1 was merged accidentally as commit 60711766.  This patch merges
v1 to v2 changes.

Follow the v2 commit message, more detailled than v1's.

The tracking of nr_active has turned out to be error prone and hard
to verify. Calculating it on the fly is a quick operation, so
do this rather than trying to track nr_active. Use a boolean
field instead to track whether a map is currently in recovery mode.

Moreover, clean up the recovery logic by making set_no_path_retry()
the place that checks the current configuration and state, sets
"queue_if_no_path" if necessary, and enters or leaves recovery
mode if necessary. This ensures that consistent logic is applied.

In the client handlers, we can't be sure that mpp->features is
up-to-date. Also, users that change the queuing mode expect that
the requested action is performed, regardless of state. Therefore,
transform set_no_path_retry() into __set_no_path_retry(), which takes
an additional parameter indicating whether the current state should
be checked, and set this parameter to false when calling the function
from the client handler code, true otherwise. Moreover, in the very
unlikely case mpp->features is NULL, don't assume that queuing is off,
just make no assumption about the current state.
libmultipath/structs_vec.c
libmultipath/structs_vec.h