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