static dev_t choose_spare(struct state *from, struct state *to, struct domainlist *domlist, unsigned long long min_size) { int d; dev_t dev = 0; for (d = from->raid; !dev && d < MAX_DISKS; d++) { if (from->devid[d] > 0 && from->devstate[d] == 0) { struct dev_policy *pol; unsigned long long dev_size; if (to->metadata->ss->external && test_partition_from_id(from->devid[d])) continue; if (min_size && dev_size_from_id(from->devid[d], &dev_size) && dev_size < min_size) continue; pol = devid_policy(from->devid[d]); if (from->spare_group) pol_add(&pol, pol_domain, from->spare_group, NULL); if (domain_test(domlist, pol, to->metadata->ss->name) == 1) dev = from->devid[d]; dev_policy_free(pol); } } return dev; }
int disk_action_allows(struct mdinfo *disk, const char *metadata, enum policy_action want) { struct dev_policy *pol = disk_policy(disk); int rv = policy_action_allows(pol, metadata, want); dev_policy_free(pol); return rv; }