Blame SOURCES/0007-Manage-Call-validate_geometry-when-adding-drive-to-e.patch

7140c6
From 1f5d54a06df01ca3032ca2d29159584cab7d7509 Mon Sep 17 00:00:00 2001
7140c6
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
7140c6
Date: Mon, 17 May 2021 16:39:03 +0200
7140c6
Subject: [PATCH 07/15] Manage: Call validate_geometry when adding drive to
7140c6
 external container
7140c6
7140c6
When adding drive to container call validate_geometry to verify whether
7140c6
drive is supported and can be addded to container.
7140c6
7140c6
Remove unused parameters from validate_geometry_imsm_container().
7140c6
There is no need to pass them.
7140c6
Don't calculate freesize if it is not mandatory. Make it configurable.
7140c6
7140c6
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
7140c6
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
7140c6
---
7140c6
 Manage.c      |  7 +++++++
7140c6
 super-ddf.c   |  9 +++++----
7140c6
 super-intel.c | 19 +++++++------------
7140c6
 3 files changed, 19 insertions(+), 16 deletions(-)
7140c6
7140c6
diff --git a/Manage.c b/Manage.c
7140c6
index 0a5f09b..f789e0c 100644
7140c6
--- a/Manage.c
7140c6
+++ b/Manage.c
7140c6
@@ -992,6 +992,13 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv,
7140c6
 			return -1;
7140c6
 		}
7140c6
 
7140c6
+		/* Check if metadata handler is able to accept the drive */
7140c6
+		if (!tst->ss->validate_geometry(tst, LEVEL_CONTAINER, 0, 1, NULL,
7140c6
+		    0, 0, dv->devname, NULL, 0, 1)) {
7140c6
+			close(container_fd);
7140c6
+			return -1;
7140c6
+		}
7140c6
+
7140c6
 		Kill(dv->devname, NULL, 0, -1, 0);
7140c6
 		dfd = dev_open(dv->devname, O_RDWR | O_EXCL|O_DIRECT);
7140c6
 		if (tst->ss->add_to_super(tst, &disc, dfd,
7140c6
diff --git a/super-ddf.c b/super-ddf.c
7140c6
index 2314762..80a40f8 100644
7140c6
--- a/super-ddf.c
7140c6
+++ b/super-ddf.c
7140c6
@@ -3475,10 +3475,11 @@ validate_geometry_ddf_container(struct supertype *st,
7140c6
 		return 0;
7140c6
 	}
7140c6
 	close(fd);
7140c6
-
7140c6
-	*freesize = avail_size_ddf(st, ldsize >> 9, INVALID_SECTORS);
7140c6
-	if (*freesize == 0)
7140c6
-		return 0;
7140c6
+	if (freesize) {
7140c6
+		*freesize = avail_size_ddf(st, ldsize >> 9, INVALID_SECTORS);
7140c6
+		if (*freesize == 0)
7140c6
+			return 0;
7140c6
+	}
7140c6
 
7140c6
 	return 1;
7140c6
 }
7140c6
diff --git a/super-intel.c b/super-intel.c
7140c6
index fdcefb6..fe45d93 100644
7140c6
--- a/super-intel.c
7140c6
+++ b/super-intel.c
7140c6
@@ -6652,8 +6652,7 @@ static int store_super_imsm(struct supertype *st, int fd)
7140c6
 }
7140c6
 
7140c6
 static int validate_geometry_imsm_container(struct supertype *st, int level,
7140c6
-					    int layout, int raiddisks, int chunk,
7140c6
-					    unsigned long long size,
7140c6
+					    int raiddisks,
7140c6
 					    unsigned long long data_offset,
7140c6
 					    char *dev,
7140c6
 					    unsigned long long *freesize,
7140c6
@@ -6725,8 +6724,8 @@ static int validate_geometry_imsm_container(struct supertype *st, int level,
7140c6
 			}
7140c6
 		}
7140c6
 	}
7140c6
-
7140c6
-	*freesize = avail_size_imsm(st, ldsize >> 9, data_offset);
7140c6
+	if (freesize)
7140c6
+		*freesize = avail_size_imsm(st, ldsize >> 9, data_offset);
7140c6
 	rv = 1;
7140c6
 exit:
7140c6
 	if (super)
7140c6
@@ -7586,15 +7585,11 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
7140c6
 	 * if given unused devices create a container
7140c6
 	 * if given given devices in a container create a member volume
7140c6
 	 */
7140c6
-	if (level == LEVEL_CONTAINER) {
7140c6
+	if (level == LEVEL_CONTAINER)
7140c6
 		/* Must be a fresh device to add to a container */
7140c6
-		return validate_geometry_imsm_container(st, level, layout,
7140c6
-							raiddisks,
7140c6
-							*chunk,
7140c6
-							size, data_offset,
7140c6
-							dev, freesize,
7140c6
-							verbose);
7140c6
-	}
7140c6
+		return validate_geometry_imsm_container(st, level, raiddisks,
7140c6
+							data_offset, dev,
7140c6
+							freesize, verbose);
7140c6
 
7140c6
 	/*
7140c6
 	 * Size is given in sectors.
7140c6
-- 
7140c6
2.7.5
7140c6