When "multipath -f" is run on a device that doesn't exist or isn't a
multipath device, the command will not remove any device, but it will
still return success.  Multiple functions rely on _dm_flush_map()
returning success when called with name that doesn't match any
multipath device. So before calling _dm_flush_map(), call dm_is_mpath(),
to check if the device exists and is a multipath device, and return
failure if it's not.

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

diff --git a/multipath/main.c b/multipath/main.c
index d09f62db..e865309d 100644
--- a/multipath/main.c
+++ b/multipath/main.c
@@ -1060,6 +1060,11 @@ main (int argc, char *argv[])
        if (retries < 0)
                retries = conf->remove_retries;
        if (cmd == CMD_FLUSH_ONE) {
+               if (dm_is_mpath(dev) != 1) {
+                       condlog(0, "failed removing \"%s\"", dev);
+                       r = RTVL_FAIL;
+                       goto out;
+               }
                r = dm_suspend_and_flush_map(dev, retries) ?
                    RTVL_FAIL : RTVL_OK;
                goto out;
-- 
2.17.2

--
dm-devel mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to