Skip to content

Commit

Permalink
libnvdimm: fix devm_nvdimm_memremap() error path
Browse files Browse the repository at this point in the history
The internal alloc_nvdimm_map() helper might fail, particularly if the
memory region is already busy.  Report request_mem_region() failures and
check for the failure.

Reported-by: Ryan Chen <ryan.chan105@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
  • Loading branch information
Dan Williams committed Sep 21, 2016
1 parent 9d15ce9 commit ecfb6d8
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/nvdimm/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,11 @@ static struct nvdimm_map *alloc_nvdimm_map(struct device *dev,
nvdimm_map->size = size;
kref_init(&nvdimm_map->kref);

if (!request_mem_region(offset, size, dev_name(&nvdimm_bus->dev)))
if (!request_mem_region(offset, size, dev_name(&nvdimm_bus->dev))) {
dev_err(&nvdimm_bus->dev, "failed to request %pa + %zd for %s\n",
&offset, size, dev_name(dev));
goto err_request_region;
}

if (flags)
nvdimm_map->mem = memremap(offset, size, flags);
Expand Down Expand Up @@ -171,6 +174,9 @@ void *devm_nvdimm_memremap(struct device *dev, resource_size_t offset,
kref_get(&nvdimm_map->kref);
nvdimm_bus_unlock(dev);

if (!nvdimm_map)
return NULL;

if (devm_add_action_or_reset(dev, nvdimm_map_put, nvdimm_map))
return NULL;

Expand Down

0 comments on commit ecfb6d8

Please sign in to comment.