static bool has_uuid_at_pos()

in namespace_devs.c [1836:1883]


static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid,
			    u64 cookie, u16 pos)
{
	struct nd_namespace_label *found = NULL;
	int i;

	for (i = 0; i < nd_region->ndr_mappings; i++) {
		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
		struct nd_interleave_set *nd_set = nd_region->nd_set;
		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
		struct nd_label_ent *label_ent;
		bool found_uuid = false;

		list_for_each_entry(label_ent, &nd_mapping->labels, list) {
			struct nd_namespace_label *nd_label = label_ent->label;
			u16 position;

			if (!nd_label)
				continue;
			position = nsl_get_position(ndd, nd_label);

			if (!nsl_validate_isetcookie(ndd, nd_label, cookie))
				continue;

			if (!nsl_uuid_equal(ndd, nd_label, uuid))
				continue;

			if (!nsl_validate_type_guid(ndd, nd_label,
						    &nd_set->type_guid))
				continue;

			if (found_uuid) {
				dev_dbg(ndd->dev, "duplicate entry for uuid\n");
				return false;
			}
			found_uuid = true;
			if (!nsl_validate_nlabel(nd_region, ndd, nd_label))
				continue;
			if (position != pos)
				continue;
			found = nd_label;
			break;
		}
		if (found)
			break;
	}
	return found != NULL;
}