Blame SOURCES/0010-Create-Build-use-default_layout.patch

fdf7c0
From 913f07d1db4a0078acc26d6ccabe1c315cf9273c Mon Sep 17 00:00:00 2001
fdf7c0
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
fdf7c0
Date: Thu, 20 Jan 2022 13:18:32 +0100
01ff50
Subject: [PATCH 10/83] Create, Build: use default_layout()
fdf7c0
fdf7c0
This code is duplicated for Build mode so make default_layout() extern
fdf7c0
and use it. Simplify the function structure.
fdf7c0
fdf7c0
It introduced change for Build mode, now for raid0 RAID0_ORIG_LAYOUT
fdf7c0
will be returned same as for Create.
fdf7c0
fdf7c0
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
fdf7c0
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
fdf7c0
---
fdf7c0
 Build.c  | 23 +------------------
fdf7c0
 Create.c | 67 ++++++++++++++++++++++++++++++++++----------------------
fdf7c0
 mdadm.h  |  1 +
fdf7c0
 3 files changed, 43 insertions(+), 48 deletions(-)
fdf7c0
fdf7c0
diff --git a/Build.c b/Build.c
fdf7c0
index 962c2e37..8d6f6f58 100644
fdf7c0
--- a/Build.c
fdf7c0
+++ b/Build.c
fdf7c0
@@ -71,28 +71,7 @@ int Build(char *mddev, struct mddev_dev *devlist,
fdf7c0
 	}
fdf7c0
 
fdf7c0
 	if (s->layout == UnSet)
fdf7c0
-		switch(s->level) {
fdf7c0
-		default: /* no layout */
fdf7c0
-			s->layout = 0;
fdf7c0
-			break;
fdf7c0
-		case 10:
fdf7c0
-			s->layout = 0x102; /* near=2, far=1 */
fdf7c0
-			if (c->verbose > 0)
fdf7c0
-				pr_err("layout defaults to n1\n");
fdf7c0
-			break;
fdf7c0
-		case 5:
fdf7c0
-		case 6:
fdf7c0
-			s->layout = map_name(r5layout, "default");
fdf7c0
-			if (c->verbose > 0)
fdf7c0
-				pr_err("layout defaults to %s\n", map_num(r5layout, s->layout));
fdf7c0
-			break;
fdf7c0
-		case LEVEL_FAULTY:
fdf7c0
-			s->layout = map_name(faultylayout, "default");
fdf7c0
-
fdf7c0
-			if (c->verbose > 0)
fdf7c0
-				pr_err("layout defaults to %s\n", map_num(faultylayout, s->layout));
fdf7c0
-			break;
fdf7c0
-		}
fdf7c0
+		s->layout = default_layout(NULL, s->level, c->verbose);
fdf7c0
 
fdf7c0
 	/* We need to create the device.  It can have no name. */
fdf7c0
 	map_lock(&map);
fdf7c0
diff --git a/Create.c b/Create.c
fdf7c0
index 0ff1922d..9ea19de0 100644
fdf7c0
--- a/Create.c
fdf7c0
+++ b/Create.c
fdf7c0
@@ -39,39 +39,54 @@ static int round_size_and_verify(unsigned long long *size, int chunk)
fdf7c0
 	return 0;
fdf7c0
 }
fdf7c0
 
fdf7c0
-static int default_layout(struct supertype *st, int level, int verbose)
fdf7c0
+/**
fdf7c0
+ * default_layout() - Get default layout for level.
fdf7c0
+ * @st: metadata requested, could be NULL.
fdf7c0
+ * @level: raid level requested.
fdf7c0
+ * @verbose: verbose level.
fdf7c0
+ *
fdf7c0
+ * Try to ask metadata handler first, otherwise use global defaults.
fdf7c0
+ *
fdf7c0
+ * Return: Layout or &UnSet, return value meaning depends of level used.
fdf7c0
+ */
fdf7c0
+int default_layout(struct supertype *st, int level, int verbose)
fdf7c0
 {
fdf7c0
 	int layout = UnSet;
fdf7c0
+	mapping_t *layout_map = NULL;
fdf7c0
+	char *layout_name = NULL;
fdf7c0
 
fdf7c0
 	if (st && st->ss->default_geometry)
fdf7c0
 		st->ss->default_geometry(st, &level, &layout, NULL);
fdf7c0
 
fdf7c0
-	if (layout == UnSet)
fdf7c0
-		switch(level) {
fdf7c0
-		default: /* no layout */
fdf7c0
-			layout = 0;
fdf7c0
-			break;
fdf7c0
-		case 0:
fdf7c0
-			layout = RAID0_ORIG_LAYOUT;
fdf7c0
-			break;
fdf7c0
-		case 10:
fdf7c0
-			layout = 0x102; /* near=2, far=1 */
fdf7c0
-			if (verbose > 0)
fdf7c0
-				pr_err("layout defaults to n2\n");
fdf7c0
-			break;
fdf7c0
-		case 5:
fdf7c0
-		case 6:
fdf7c0
-			layout = map_name(r5layout, "default");
fdf7c0
-			if (verbose > 0)
fdf7c0
-				pr_err("layout defaults to %s\n", map_num(r5layout, layout));
fdf7c0
-			break;
fdf7c0
-		case LEVEL_FAULTY:
fdf7c0
-			layout = map_name(faultylayout, "default");
fdf7c0
+	if (layout != UnSet)
fdf7c0
+		return layout;
fdf7c0
 
fdf7c0
-			if (verbose > 0)
fdf7c0
-				pr_err("layout defaults to %s\n", map_num(faultylayout, layout));
fdf7c0
-			break;
fdf7c0
-		}
fdf7c0
+	switch (level) {
fdf7c0
+	default: /* no layout */
fdf7c0
+		layout = 0;
fdf7c0
+		break;
fdf7c0
+	case 0:
fdf7c0
+		layout = RAID0_ORIG_LAYOUT;
fdf7c0
+		break;
fdf7c0
+	case 10:
fdf7c0
+		layout = 0x102; /* near=2, far=1 */
fdf7c0
+		layout_name = "n2";
fdf7c0
+		break;
fdf7c0
+	case 5:
fdf7c0
+	case 6:
fdf7c0
+		layout_map = r5layout;
fdf7c0
+		break;
fdf7c0
+	case LEVEL_FAULTY:
fdf7c0
+		layout_map = faultylayout;
fdf7c0
+		break;
fdf7c0
+	}
fdf7c0
+
fdf7c0
+	if (layout_map) {
fdf7c0
+		layout = map_name(layout_map, "default");
fdf7c0
+		layout_name = map_num(layout_map, layout);
fdf7c0
+	}
fdf7c0
+	if (layout_name && verbose > 0)
fdf7c0
+		pr_err("layout defaults to %s\n", layout_name);
fdf7c0
 
fdf7c0
 	return layout;
fdf7c0
 }
fdf7c0
diff --git a/mdadm.h b/mdadm.h
fdf7c0
index 26e7e5cd..cd72e711 100644
fdf7c0
--- a/mdadm.h
fdf7c0
+++ b/mdadm.h
fdf7c0
@@ -1512,6 +1512,7 @@ extern int get_linux_version(void);
fdf7c0
 extern int mdadm_version(char *version);
fdf7c0
 extern unsigned long long parse_size(char *size);
fdf7c0
 extern int parse_uuid(char *str, int uuid[4]);
fdf7c0
+int default_layout(struct supertype *st, int level, int verbose);
fdf7c0
 extern int is_near_layout_10(int layout);
fdf7c0
 extern int parse_layout_10(char *layout);
fdf7c0
 extern int parse_layout_faulty(char *layout);
fdf7c0
-- 
01ff50
2.38.1
fdf7c0