FAILED: patch "[PATCH] libnvdimm/region: Fix label activation vs errors" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d9cee9f85b22fab88d2b76d2e92b18e3d0e6aa8c Mon Sep 17 00:00:00 2001
From: Dan Williams <[email protected]>
Date: Fri, 30 Jul 2021 09:46:04 -0700
Subject: [PATCH] libnvdimm/region: Fix label activation vs errors
There are a few scenarios where init_active_labels() can return without registering deactivate_labels() to run when the region is disabled. In particular label error injection creates scenarios where a DIMM is disabled, but labels on other DIMMs in the region become activated.
Arrange for init_active_labels() to always register deactivate_labels().
drivers/nvdimm/namespace_devs.c +11 -6
@@ -2527,7 +2527,7 @@ static void deactivate_labels(void *region)static int init_active_labels (struct nd_region *nd_region) { -int i; +int i, rc =0 ;for (i =0 ; i < nd_region->ndr_mappings; i++) {struct nd_mapping *nd_mapping = &nd_region->mapping[i];
@@ -2546,13 +2546,14 @@ static int init_active_labels(struct nd_region *nd_region)else if (test_bit (NDD_LABELING , &nvdimm->flags))/* fail, labels needed to disambiguate dpa */ ;else -return 0 ; +continue ;dev_err (&nd_region->dev,"%s: is %s, failing probe\n" ,dev_name (&nd_mapping->nvdimm->dev),test_bit (NDD_LOCKED , &nvdimm->flags) ?"locked" :"disabled" ); -return -ENXIO ; + rc = -ENXIO ; + goto out; } nd_mapping->ndd = ndd;atomic_inc (&nvdimm->busy);
@@ -2586,13 +2587,17 @@ static int init_active_labels(struct nd_region *nd_region)break ; } -if (i < nd_region->ndr_mappings) { +if (i < nd_region->ndr_mappings) + rc = -ENOMEM ; + +out: +if (rc) {deactivate_labels (nd_region); -return -ENOMEM ; +return rc; }return devm_add_action_or_reset (&nd_region->dev, deactivate_labels, - nd_region); + nd_region); }int nd_region_register_namespaces (struct nd_region *nd_region,int *err)