Make device-special files for partitions when using --incremental
This commit is contained in:
parent
95b79df03e
commit
9a02c62af9
|
@ -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 ||
|
||||
|
|
2
mdadm.h
2
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)
|
||||
|
|
10
mdopen.c
10
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;
|
||||
|
|
Loading…
Reference in New Issue