]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Factor out add-disk code
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index 181a0a3c9193b11dc4a64a723c53436b1dd0b2f6..7469fca4111e0f0a577c4c36766d5b2333a54acc 100644 (file)
--- a/util.c
+++ b/util.c
@@ -999,6 +999,27 @@ int open_container(int fd)
        return -1;
 }
 
+int add_disk(int mdfd, struct supertype *st,
+            struct mdinfo *sra, struct mdinfo *info)
+{
+       /* Add a device to an array, in one of 2 ways. */
+       int rv;
+#ifndef MDASSEMBLE
+       if (st->ss->external) {
+               rv = sysfs_add_disk(sra, info);
+               if (! rv) {
+                       struct mdinfo *sd2;
+                       sd2 = malloc(sizeof(*sd2));
+                       *sd2 = *info;
+                       sd2->next = sra->devs;
+                       sra->devs = sd2;
+               }
+       } else
+#endif
+               rv = ioctl(mdfd, ADD_NEW_DISK, &info->disk);
+       return rv;
+}
+
 char *devnum2devname(int num)
 {
        char name[100];