diff options
author | Dan Williams <dan.j.williams@intel.com> | 2016-09-30 17:28:58 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2016-10-07 09:20:53 -0700 |
commit | a1f3e4d6a0c322eb3e7fdfcc9facdcdf19130434 (patch) | |
tree | c737905cc17b5dd0f5b6015f1e0a0fcee0301a73 /drivers/nvdimm/region_devs.c | |
parent | 6ff3e912d32ece4e9cf8708da796e9e2e7979ffe (diff) | |
download | op-kernel-dev-a1f3e4d6a0c322eb3e7fdfcc9facdcdf19130434.zip op-kernel-dev-a1f3e4d6a0c322eb3e7fdfcc9facdcdf19130434.tar.gz |
libnvdimm, region: update nd_region_available_dpa() for multi-pmem support
The free dpa (dimm-physical-address) space calculation reports how much
free space is available with consideration for aliased BLK + PMEM
regions. Recall that BLK capacity is allocated from high addresses and
PMEM is allocated from low addresses in their respective regions.
nd_region_available_dpa() accounts for the fact that the largest
encroachment (lowest starting address) into PMEM capacity by a BLK
allocation limits the available capacity to that point, regardless if
there is BLK allocation hole at a higher address. Similarly, for the
multi-pmem case we need to track the largest encroachment (highest
ending address) of a PMEM allocation in BLK capacity regardless of
whether there is an allocation hole that a BLK allocation could fill at
a lower address.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/nvdimm/region_devs.c')
-rw-r--r-- | drivers/nvdimm/region_devs.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c index 19bcd68..3ac534a 100644 --- a/drivers/nvdimm/region_devs.c +++ b/drivers/nvdimm/region_devs.c @@ -294,9 +294,8 @@ resource_size_t nd_region_available_dpa(struct nd_region *nd_region) blk_max_overlap = overlap; goto retry; } - } else if (is_nd_blk(&nd_region->dev)) { - available += nd_blk_available_dpa(nd_mapping); - } + } else if (is_nd_blk(&nd_region->dev)) + available += nd_blk_available_dpa(nd_region); } return available; |