* [PATCH] Allow level migration only for single-array container
@ 2016-10-12 12:29 Mariusz Dabrowski
2016-10-19 15:26 ` Jes Sorensen
0 siblings, 1 reply; 2+ messages in thread
From: Mariusz Dabrowski @ 2016-10-12 12:29 UTC (permalink / raw)
To: linux-raid
Cc: Jes.Sorensen, tomasz.majchrzak, aleksey.obitotskiy,
pawel.baldysiak, artur.paszkiewicz, maksymilian.kunt,
Mariusz Dabrowski
IMSM doesn't allow to change RAID level of array in container with two
arrays but array count check is being done too late (after removing disks)
and in some cases (e. g. RAID 0 and RAID 1 migrated to RAID 0) both arrays
become degraded. This patch adds array count check before disks are being
removed.
Signed-off-by: Mariusz Dabrowski <mariusz.dabrowski@intel.com>
---
Grow.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/Grow.c b/Grow.c
index 628f0e7..bcd27f5 100755
--- a/Grow.c
+++ b/Grow.c
@@ -777,6 +777,25 @@ int remove_disks_for_takeover(struct supertype *st,
struct mdinfo *remaining;
int slot;
+ if (st->ss->external) {
+ int rv = 0;
+ struct mdinfo *arrays = st->ss->container_content(st, NULL);
+ /* containter_content returns list of arrays in container
+ * If arrays->next is not NULL it means that there are 2 arrays in
+ * container and operation should be blocked
+ */
+ if (arrays) {
+ if (arrays->next)
+ rv = 1;
+ sysfs_free(arrays);
+ if (rv) {
+ pr_err("Error. Cannot perform operation on /dev/%s\n", st->devnm);
+ pr_err("For this operation it MUST be single array in container\n");
+ return rv;
+ }
+ }
+ }
+
if (sra->array.level == 10)
nr_of_copies = layout & 0xff;
else if (sra->array.level == 1)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] Allow level migration only for single-array container
2016-10-12 12:29 [PATCH] Allow level migration only for single-array container Mariusz Dabrowski
@ 2016-10-19 15:26 ` Jes Sorensen
0 siblings, 0 replies; 2+ messages in thread
From: Jes Sorensen @ 2016-10-19 15:26 UTC (permalink / raw)
To: Mariusz Dabrowski
Cc: linux-raid, tomasz.majchrzak, aleksey.obitotskiy, pawel.baldysiak,
artur.paszkiewicz, maksymilian.kunt
Mariusz Dabrowski <mariusz.dabrowski@intel.com> writes:
> IMSM doesn't allow to change RAID level of array in container with two
> arrays but array count check is being done too late (after removing disks)
> and in some cases (e. g. RAID 0 and RAID 1 migrated to RAID 0) both arrays
> become degraded. This patch adds array count check before disks are being
> removed.
>
> Signed-off-by: Mariusz Dabrowski <mariusz.dabrowski@intel.com>
> ---
> Grow.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/Grow.c b/Grow.c
> index 628f0e7..bcd27f5 100755
> --- a/Grow.c
> +++ b/Grow.c
> @@ -777,6 +777,25 @@ int remove_disks_for_takeover(struct supertype *st,
> struct mdinfo *remaining;
> int slot;
>
> + if (st->ss->external) {
> + int rv = 0;
> + struct mdinfo *arrays = st->ss->container_content(st, NULL);
> + /* containter_content returns list of arrays in container
> + * If arrays->next is not NULL it means that there are 2 arrays in
> + * container and operation should be blocked
> + */
> + if (arrays) {
> + if (arrays->next)
> + rv = 1;
> + sysfs_free(arrays);
> + if (rv) {
> + pr_err("Error. Cannot perform operation on /dev/%s\n", st->devnm);
> + pr_err("For this operation it MUST be single array in container\n");
> + return rv;
> + }
> + }
> + }
> +
Applied, but do remember code is 80 characters wide - except for print
statements. I will fixup that comment line as part of applying it.
Thanks,
Jes
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-10-19 15:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-12 12:29 [PATCH] Allow level migration only for single-array container Mariusz Dabrowski
2016-10-19 15:26 ` Jes Sorensen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).