From f3c11af226bcbb36da7c2802774c6128dd88b5b4 Mon Sep 17 00:00:00 2001 From: Lixiaokeng Date: Tue, 23 Nov 2021 20:14:23 +0800 Subject: [PATCH 05/15] 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 6d3a0ae..aeb2be5 100644 --- a/multipathd/cli_handlers.c +++ b/multipathd/cli_handlers.c @@ -866,9 +866,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); @@ -906,6 +907,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); -- 1.8.3.1