Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.0:Ports
mdadm
0202-To-support-clustered-raid10.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0202-To-support-clustered-raid10.patch of Package mdadm
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 Git-commit: 5339f99606f19ce1eeadebf3c0849933dc0c6fd5 Patch-mainline: mdadm-4.0+ References: bsc#1069165, bsc#1069167, bsc#1068030 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> Signed-off-by: Coly Li <colyli@suse.de> --- 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 0f9e89b..80176e3 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 7cdcdba..87cb33f 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 85947bf..3cbf82f 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 c11729e..543ec6c 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.13.6
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor