diff options
Diffstat (limited to 'Manage.c')
-rw-r--r-- | Manage.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -796,7 +796,7 @@ int Manage_subdevs(char *devname, int fd, disc.minor = minor(stb.st_rdev); disc.number =j; disc.state = 0; - if (array.not_persistent==0 || tst->ss->external) { + if (array.not_persistent==0) { int dfd; if (dv->writemostly == 1) disc.state |= 1 << MD_DISK_WRITEMOSTLY; @@ -852,6 +852,7 @@ int Manage_subdevs(char *devname, int fd, struct mdinfo *sra; int container_fd; int devnum = fd2devnum(fd); + int dfd; container_fd = open_dev_excl(devnum); if (container_fd < 0) { @@ -862,6 +863,15 @@ int Manage_subdevs(char *devname, int fd, return 1; } + dfd = dev_open(dv->devname, O_RDWR | O_EXCL|O_DIRECT); + if (tst->ss->add_to_super(tst, &disc, dfd, + dv->devname)) { + close(dfd); + close(container_fd); + return 1; + } + close(dfd); + sra = sysfs_read(container_fd, -1, 0); if (!sra) { fprintf(stderr, Name ": add failed for %s: sysfs_read failed\n", |