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,
|
mdfd = open_mddev_devnum(match ? match->devname : NULL,
|
||||||
devnum,
|
devnum,
|
||||||
info.name,
|
info.name,
|
||||||
chosen_name);
|
chosen_name, autof >> 3);
|
||||||
if (mdfd < 0) {
|
if (mdfd < 0) {
|
||||||
fprintf(stderr, Name ": failed to open %s: %s.\n",
|
fprintf(stderr, Name ": failed to open %s: %s.\n",
|
||||||
chosen_name, strerror(errno));
|
chosen_name, strerror(errno));
|
||||||
|
@ -652,7 +652,8 @@ int IncrementalScan(int verbose)
|
||||||
mdu_array_info_t array;
|
mdu_array_info_t array;
|
||||||
mdu_bitmap_file_t bmf;
|
mdu_bitmap_file_t bmf;
|
||||||
struct mdinfo *sra;
|
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)
|
if (mdfd < 0)
|
||||||
continue;
|
continue;
|
||||||
if (ioctl(mdfd, GET_ARRAY_INFO, &array) == 0 ||
|
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(char *dev, int autof);
|
||||||
extern int open_mddev_devnum(char *devname, int devnum, char *name,
|
extern int open_mddev_devnum(char *devname, int devnum, char *name,
|
||||||
char *chosen_name);
|
char *chosen_name, int parts);
|
||||||
|
|
||||||
|
|
||||||
#define LEVEL_MULTIPATH (-4)
|
#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',
|
/* Open the md device with number 'devnum', possibly using 'devname',
|
||||||
* possibly constructing a name with 'name', but in any case, copying
|
* 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;
|
int major_num, minor_num;
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
int i;
|
int i;
|
||||||
|
struct createinfo *ci = conf_get_create_info();
|
||||||
|
|
||||||
if (devname)
|
if (devname)
|
||||||
strcpy(chosen_name, 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.
|
* in /dev/md/, we make sure the directory exists.
|
||||||
*/
|
*/
|
||||||
if (strncmp(chosen_name, "/dev/md/", 8) == 0) {
|
if (strncmp(chosen_name, "/dev/md/", 8) == 0) {
|
||||||
struct createinfo *ci = conf_get_create_info();
|
|
||||||
if (mkdir("/dev/md",0700)==0) {
|
if (mkdir("/dev/md",0700)==0) {
|
||||||
if (chown("/dev/md", ci->uid, ci->gid))
|
if (chown("/dev/md", ci->uid, ci->gid))
|
||||||
perror("chown /dev/md");
|
perror("chown /dev/md");
|
||||||
|
@ -336,8 +337,11 @@ int open_mddev_devnum(char *devname, int devnum, char *name, char *chosen_name)
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
fd = open(chosen_name, O_RDWR|O_EXCL);
|
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;
|
return fd;
|
||||||
|
}
|
||||||
usleep(200000);
|
usleep(200000);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue