]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Manage: check device policies in manage_add_external()
authorMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Thu, 29 Feb 2024 11:52:13 +0000 (12:52 +0100)
committerMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Mon, 11 Mar 2024 10:08:59 +0000 (11:08 +0100)
Only IMSM is going to use device policies so it is added to
manage_add_external(). Test policies before adding the drive to
container.

The change blocks adding new device to the container which already
contains not matching devices

Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Manage.c

index 969d0ea9d81fa7b12805ae144cf9ab5a5cfb6fab..96e5ee5427a243bd70ca6d11c2e77a54f2362838 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -704,6 +704,7 @@ mdadm_status_t manage_add_external(struct supertype *st, int fd, char *disk_name
 {
        mdadm_status_t rv = MDADM_STATUS_ERROR;
        char container_devpath[MD_NAME_MAX];
+       struct dev_policy *pols = NULL;
        struct mdinfo new_mdi;
        struct mdinfo *sra = NULL;
        int container_fd;
@@ -722,6 +723,9 @@ mdadm_status_t manage_add_external(struct supertype *st, int fd, char *disk_name
                                       0, 1))
                goto out;
 
+       if (mddev_test_and_add_drive_policies(st, &pols, container_fd, 1))
+               goto out;
+
        Kill(disk_name, NULL, 0, -1, 0);
 
        disk_fd = dev_open(disk_name, O_RDWR | O_EXCL | O_DIRECT);
@@ -730,6 +734,9 @@ mdadm_status_t manage_add_external(struct supertype *st, int fd, char *disk_name
                goto out;
        }
 
+       if (drive_test_and_add_policies(st, &pols, disk_fd, 1))
+               goto out;
+
        if (st->ss->add_to_super(st, disc, disk_fd, disk_name, INVALID_SECTORS))
                goto out;
 
@@ -760,6 +767,7 @@ mdadm_status_t manage_add_external(struct supertype *st, int fd, char *disk_name
 
 out:
        close(container_fd);
+       dev_policy_free(pols);
 
        if (sra)
                sysfs_free(sra);