Merge tag 'io_uring-5.15-2021-09-11' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / drivers / nvdimm / label.c
index 7188675..7f473f9 100644 (file)
@@ -724,7 +724,7 @@ static unsigned long nd_label_offset(struct nvdimm_drvdata *ndd,
                - (unsigned long) to_namespace_index(ndd, 0);
 }
 
-enum nvdimm_claim_class to_nvdimm_cclass(guid_t *guid)
+static enum nvdimm_claim_class to_nvdimm_cclass(guid_t *guid)
 {
        if (guid_equal(guid, &nvdimm_btt_guid))
                return NVDIMM_CCLASS_BTT;
@@ -772,6 +772,45 @@ static void reap_victim(struct nd_mapping *nd_mapping,
        victim->label = NULL;
 }
 
+static void nsl_set_type_guid(struct nvdimm_drvdata *ndd,
+                             struct nd_namespace_label *nd_label, guid_t *guid)
+{
+       if (namespace_label_has(ndd, type_guid))
+               guid_copy(&nd_label->type_guid, guid);
+}
+
+bool nsl_validate_type_guid(struct nvdimm_drvdata *ndd,
+                           struct nd_namespace_label *nd_label, guid_t *guid)
+{
+       if (!namespace_label_has(ndd, type_guid))
+               return true;
+       if (!guid_equal(&nd_label->type_guid, guid)) {
+               dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n", guid,
+                       &nd_label->type_guid);
+               return false;
+       }
+       return true;
+}
+
+static void nsl_set_claim_class(struct nvdimm_drvdata *ndd,
+                               struct nd_namespace_label *nd_label,
+                               enum nvdimm_claim_class claim_class)
+{
+       if (!namespace_label_has(ndd, abstraction_guid))
+               return;
+       guid_copy(&nd_label->abstraction_guid,
+                 to_abstraction_guid(claim_class,
+                                     &nd_label->abstraction_guid));
+}
+
+enum nvdimm_claim_class nsl_get_claim_class(struct nvdimm_drvdata *ndd,
+                                           struct nd_namespace_label *nd_label)
+{
+       if (!namespace_label_has(ndd, abstraction_guid))
+               return NVDIMM_CCLASS_NONE;
+       return to_nvdimm_cclass(&nd_label->abstraction_guid);
+}
+
 static int __pmem_label_update(struct nd_region *nd_region,
                struct nd_mapping *nd_mapping, struct nd_namespace_pmem *nspm,
                int pos, unsigned long flags)
@@ -822,12 +861,8 @@ static int __pmem_label_update(struct nd_region *nd_region,
        nsl_set_lbasize(ndd, nd_label, nspm->lbasize);
        nsl_set_dpa(ndd, nd_label, res->start);
        nsl_set_slot(ndd, nd_label, slot);
-       if (namespace_label_has(ndd, type_guid))
-               guid_copy(&nd_label->type_guid, &nd_set->type_guid);
-       if (namespace_label_has(ndd, abstraction_guid))
-               guid_copy(&nd_label->abstraction_guid,
-                               to_abstraction_guid(ndns->claim_class,
-                                       &nd_label->abstraction_guid));
+       nsl_set_type_guid(ndd, nd_label, &nd_set->type_guid);
+       nsl_set_claim_class(ndd, nd_label, ndns->claim_class);
        nsl_calculate_checksum(ndd, nd_label);
        nd_dbg_dpa(nd_region, ndd, res, "\n");
 
@@ -1091,12 +1126,8 @@ static int __blk_label_update(struct nd_region *nd_region,
                nsl_set_rawsize(ndd, nd_label, resource_size(res));
                nsl_set_lbasize(ndd, nd_label, nsblk->lbasize);
                nsl_set_slot(ndd, nd_label, slot);
-               if (namespace_label_has(ndd, type_guid))
-                       guid_copy(&nd_label->type_guid, &nd_set->type_guid);
-               if (namespace_label_has(ndd, abstraction_guid))
-                       guid_copy(&nd_label->abstraction_guid,
-                                       to_abstraction_guid(ndns->claim_class,
-                                               &nd_label->abstraction_guid));
+               nsl_set_type_guid(ndd, nd_label, &nd_set->type_guid);
+               nsl_set_claim_class(ndd, nd_label, ndns->claim_class);
                nsl_calculate_checksum(ndd, nd_label);
 
                /* update label */