Neil Brown: Make device-special files for partitions when using --incremental

Martin F. Krafft madduck at alioth.debian.org
Tue Jun 24 22:02:10 UTC 2008


Module: mdadm
Branch: master
Commit: 9a02c62af93879d7fe4f3740bcde2e01fbccc960
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=9a02c62af93879d7fe4f3740bcde2e01fbccc960

Author: Neil Brown <neilb at suse.de>
Date:   Mon May  5 21:55:39 2008 +1000

Make device-special files for partitions when using --incremental

---

 Incremental.c |    5 +++--
 mdadm.h       |    2 +-
 mdopen.c      |   10 +++++++---
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/Incremental.c b/Incremental.c
index b54c4fc..0fb9afd 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -259,7 +259,7 @@ int Incremental(char *devname, int verbose, int runstop,
 	mdfd = open_mddev_devnum(match ? match->devname : NULL,
 				 devnum,
 				 info.name,
-				 chosen_name);
+				 chosen_name, autof >> 3);
 	if (mdfd < 0) {
 		fprintf(stderr, Name ": failed to open %s: %s.\n",
 			chosen_name, strerror(errno));
@@ -652,7 +652,8 @@ int IncrementalScan(int verbose)
 		mdu_array_info_t array;
 		mdu_bitmap_file_t bmf;
 		struct mdinfo *sra;
-		int mdfd = open_mddev_devnum(me->path, me->devnum, NULL, path);
+		int mdfd = open_mddev_devnum(me->path, me->devnum,
+					     NULL, path, 0);
 		if (mdfd < 0)
 			continue;
 		if (ioctl(mdfd, GET_ARRAY_INFO, &array) == 0 ||
diff --git a/mdadm.h b/mdadm.h
index 2f62c41..0d73c17 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -523,7 +523,7 @@ extern char DefaultConfFile[];
 
 extern int open_mddev(char *dev, int autof);
 extern int open_mddev_devnum(char *devname, int devnum, char *name,
-			     char *chosen_name);
+			     char *chosen_name, int parts);
 
 
 #define	LEVEL_MULTIPATH		(-4)
diff --git a/mdopen.c b/mdopen.c
index fe98370..448a9eb 100644
--- a/mdopen.c
+++ b/mdopen.c
@@ -268,7 +268,8 @@ int open_mddev(char *dev, int autof)
 }
 
 
-int open_mddev_devnum(char *devname, int devnum, char *name, char *chosen_name)
+int open_mddev_devnum(char *devname, int devnum, char *name,
+		      char *chosen_name, int parts)
 {
 	/* Open the md device with number 'devnum', possibly using 'devname',
 	 * possibly constructing a name with 'name', but in any case, copying
@@ -277,6 +278,7 @@ int open_mddev_devnum(char *devname, int devnum, char *name, char *chosen_name)
 	int major_num, minor_num;
 	struct stat stb;
 	int i;
+	struct createinfo *ci = conf_get_create_info();
 
 	if (devname)
 		strcpy(chosen_name, devname);
@@ -312,7 +314,6 @@ int open_mddev_devnum(char *devname, int devnum, char *name, char *chosen_name)
 		 * in /dev/md/, we make sure the directory exists.
 		 */
 		if (strncmp(chosen_name, "/dev/md/", 8) == 0) {
-			struct createinfo *ci = conf_get_create_info();
 			if (mkdir("/dev/md",0700)==0) {
 				if (chown("/dev/md", ci->uid, ci->gid))
 					perror("chown /dev/md");
@@ -336,8 +337,11 @@ int open_mddev_devnum(char *devname, int devnum, char *name, char *chosen_name)
 		int fd;
 
 		fd = open(chosen_name, O_RDWR|O_EXCL);
-		if (fd >= 0 || errno != EBUSY)
+		if (fd >= 0 || errno != EBUSY) {
+			if (devnum < 0)
+				make_parts(chosen_name, parts, ci->symlinks);
 			return fd;
+		}
 		usleep(200000);
 	}
 	return -1;




More information about the pkg-mdadm-commits mailing list