summaryrefslogtreecommitdiff
path: root/mdopen.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2008-05-05 21:55:39 +1000
committerNeil Brown <neilb@suse.de>2008-05-05 21:55:39 +1000
commit9a02c62af93879d7fe4f3740bcde2e01fbccc960 (patch)
treef29b06daaaad516d4c002445b67a0ab74eddbffe /mdopen.c
parent95b79df03ebbb2c80b6a3bbe317b983d7cebe9cc (diff)
Make device-special files for partitions when using --incremental
Diffstat (limited to 'mdopen.c')
-rw-r--r--mdopen.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/mdopen.c b/mdopen.c
index fe983708..448a9eb8 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;