SHA256
1
0
forked from pool/mdadm

Accepting request 542977 from home:gqjiang:branches:Base:System

For fate 323171: To support clustered raid10

OBS-URL: https://build.opensuse.org/request/show/542977
OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=152
This commit is contained in:
Neil Brown 2017-11-21 22:02:35 +00:00 committed by Git OBS Bridge
parent 850cf2857b
commit 108637af2d
3 changed files with 102 additions and 1 deletions

View File

@ -0,0 +1,93 @@
From 5339f99606f19ce1eeadebf3c0849933dc0c6fd5 Mon Sep 17 00:00:00 2001
From: Guoqing Jiang <gqjiang@suse.com>
Date: Mon, 30 Oct 2017 17:09:51 +0800
Subject: [PATCH] To support clustered raid10
We are now considering to extend clustered raid to
support raid10. But only near layout is supported,
so make the check when create the array or switch
the bitmap from internal to clustered.
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
---
Grow.c | 6 ++++++
mdadm.c | 9 +++++++--
mdadm.h | 1 +
util.c | 11 +++++++++++
4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/Grow.c b/Grow.c
index 0f9e89bcc5ba..80176e32c52f 100644
--- a/Grow.c
+++ b/Grow.c
@@ -359,6 +359,12 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s)
ncopies = (array.layout & 255) * ((array.layout >> 8) & 255);
bitmapsize = bitmapsize * array.raid_disks / ncopies;
+
+ if (strcmp(s->bitmap_file, "clustered") == 0 &&
+ !is_near_layout_10(array.layout)) {
+ pr_err("only near layout is supported with clustered raid10\n");
+ return 1;
+ }
}
st = super_by_fd(fd, &subarray);
diff --git a/mdadm.c b/mdadm.c
index 7cdcdba7c652..87cb33f84ac2 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1542,8 +1542,13 @@ int main(int argc, char *argv[])
break;
}
- if (s.level != 1) {
- pr_err("--bitmap=clustered is currently supported with RAID mirror only\n");
+ if (s.level != 1 && s.level != 10) {
+ pr_err("--bitmap=clustered is currently supported with raid1/10 only\n");
+ rv = 1;
+ break;
+ }
+ if (s.level == 10 && !is_near_layout_10(s.layout)) {
+ pr_err("only near layout is supported with clustered raid10\n");
rv = 1;
break;
}
diff --git a/mdadm.h b/mdadm.h
index 85947bf62ff0..3cbf82f18d9e 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -1434,6 +1434,7 @@ extern int get_linux_version(void);
extern int mdadm_version(char *version);
extern unsigned long long parse_size(char *size);
extern int parse_uuid(char *str, int uuid[4]);
+extern int is_near_layout_10(int layout);
extern int parse_layout_10(char *layout);
extern int parse_layout_faulty(char *layout);
extern long parse_num(char *num);
diff --git a/util.c b/util.c
index c11729e3260e..543ec6cf46ef 100644
--- a/util.c
+++ b/util.c
@@ -397,6 +397,17 @@ unsigned long long parse_size(char *size)
return s;
}
+int is_near_layout_10(int layout)
+{
+ int fc, fo;
+
+ fc = (layout >> 8) & 255;
+ fo = layout & (1 << 16);
+ if (fc > 1 || fo > 0)
+ return 0;
+ return 1;
+}
+
int parse_layout_10(char *layout)
{
int copies, rv;
--
2.10.0

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Wed Nov 15 01:27:06 UTC 2017 - gqjiang@suse.com
- Add one mdadm patch to support clustered raid10 (fate#323171)
0059-To-support-clustered-raid10.patch
-------------------------------------------------------------------
Mon Aug 21 16:44:54 UTC 2017 - colyli@suse.com

View File

@ -1,7 +1,7 @@
#
# spec file for package mdadm
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2017 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -97,6 +97,7 @@ Patch55: 0055-Allow-more-spare-selection-criteria.patch
Patch56: 0056-Add-sector-size-as-spare-selection-criterion.patch
Patch57: 0057-super1-fix-sb-max_dev-when-adding-a-new-disk-in-line.patch
Patch58: 0058-super1-only-set-clustered-flag-when-bitmap-is-presen.patch
Patch59: 0059-To-support-clustered-raid10.patch
Patch1000: 1000-The-mdcheck-script-now-adds-messages-to-the-system.patch
%define _udevdir %(pkg-config --variable=udevdir udev)
@ -167,6 +168,7 @@ programs but with a very different interface.
%patch56 -p1
%patch57 -p1
%patch58 -p1
%patch59 -p1
%patch1000 -p1
%build