]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Monitor.c
Add sector size as spare selection criterion
[thirdparty/mdadm.git] / Monitor.c
index 9a2baad02e1193c11228eedf0293b9d587af7e51..c96f8e8a78be2c2392a02369bb6c40875c14dd51 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -731,6 +731,7 @@ static int get_required_spare_criteria(struct state *st,
        if (!st->metadata ||
            !st->metadata->ss->get_spare_criteria) {
                sc->min_size = 0;
+               sc->sector_size = 0;
                return 0;
        }
 
@@ -787,6 +788,7 @@ static dev_t choose_spare(struct state *from, struct state *to,
                    from->devstate[d] == 0) {
                        struct dev_policy *pol;
                        unsigned long long dev_size;
+                       unsigned int dev_sector_size;
 
                        if (to->metadata->ss->external &&
                            test_partition_from_id(from->devid[d]))
@@ -797,6 +799,12 @@ static dev_t choose_spare(struct state *from, struct state *to,
                            dev_size < sc->min_size)
                                continue;
 
+                       if (sc->sector_size &&
+                           dev_sector_size_from_id(from->devid[d],
+                                                   &dev_sector_size) &&
+                           sc->sector_size != dev_sector_size)
+                               continue;
+
                        pol = devid_policy(from->devid[d]);
                        if (from->spare_group)
                                pol_add(&pol, pol_domain,