libmultipath: cleanup features handling code
authorBenjamin Marzinski <bmarzins@redhat.com>
Thu, 7 Dec 2017 18:48:58 +0000 (12:48 -0600)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sat, 13 Jan 2018 09:13:27 +0000 (10:13 +0100)
commite393d5fce67775db012a8aedc2ed806ba0e46e35
tree1d9e196a1cfc04f874f7ae640b98c139136cde3d
parent59f4d76656944d2cdf100276235053b94c4faca1
libmultipath: cleanup features handling code

Right now multipath does some extra work to set the values for
no_path_retry and retain_hwhandler on existing maps it reads in from the
kernel.  This is so that select_action() can use these values to see if
it needs to reload the devices. However, the way it works, the
queue_if_no_path feature isn't always set correctly, and multipath has
to go back afterwards and reset the value anyways.

It's simpler for select_action to just look at the values in the
features line it read in from the kernel and the features line it would
like the new map to have.  By comparing these, it also avoids the
problem where the no_path_retry values match, so it doesn't reload, but
the actual queue_if_no_path feature value is incorrect, so it has to go
back and reset it. It can also skip calling setup_feature() entirely.

To do this, assemble_map() needs to update mp->features. This would
otherwise partially happen when it had to reset the queue_if_no_path
value.  retain_attached_hw_handler was never getting updated before, so
the output when you created a map was incorrect.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
libmultipath/configure.c
libmultipath/dmparser.c
libmultipath/structs.c
libmultipath/structs.h