In history, the "multipathd resize" may fail without failed
messages because of there are different sizes paths in mpp.
Here we check every path size in cli_resize, fail and print
messages if there are some different size paths. This patch
was made in 12 Oct 2017.

Signed-off-by: Lixiaokeng <lixiaok...@huawei.com>
---
 multipathd/cli_handlers.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
index 235e2a2e..18b51875 100644
--- a/multipathd/cli_handlers.c
+++ b/multipathd/cli_handlers.c
@@ -981,9 +981,10 @@ cli_resize(void *v, char **reply, int *len, void *data)
        char * mapname = get_keyparam(v, MAP);
        struct multipath *mpp;
        int minor;
-       unsigned long long size;
+       unsigned long long size, sz;
        struct pathgroup *pgp;
        struct path *pp;
+       int i,j;

        mapname = convert_dev(mapname, 0);
        condlog(2, "%s: resize map (operator)", mapname);
@@ -1021,6 +1022,22 @@ cli_resize(void *v, char **reply, int *len, void *data)
                        mapname);
                return 1;
        }
+
+       vector_foreach_slot (mpp->pg, pgp, i) {
+               vector_foreach_slot (pgp->paths, pp, j) {
+                       if (!pp->udev || sysfs_get_size(pp, &sz)) {
+                               condlog(0, "%s: couldn't get size for sysfs. 
cannot resize",
+                                       mapname);
+                               return 1;
+                       }
+                       if (size != sz) {
+                               condlog(0, "%s: not all path sizes are equal, 
please check. cannot resize",
+                                       mapname);
+                               return 1;
+                       }
+               }
+       }
+
        if (size == mpp->size) {
                condlog(0, "%s: map is still the same size (%llu)", mapname,
                        mpp->size);
-- 

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to