From 8e3c6debb3ed286f94af230f59a0fb9f6a449687 Mon Sep 17 00:00:00 2001 From: Lixiaokeng Date: Tue, 23 Nov 2021 20:14:23 +0800 Subject: [PATCH] fix multipathd resize when not all paths size are equal --- 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 44bf43d..8b59d88 100644 --- a/multipathd/cli_handlers.c +++ b/multipathd/cli_handlers.c @@ -845,9 +845,10 @@ cli_resize(void *v, struct strbuf *reply, void *data) char * mapname = get_keyparam(v, KEY_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); @@ -885,6 +886,22 @@ cli_resize(void *v, struct strbuf *reply, 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); -- 2.33.0