Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}