summaryrefslogtreecommitdiffstats
path: root/drivers/nvdimm
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2016-03-31 18:37:11 +0200
committerDan Williams <dan.j.williams@intel.com>2016-05-10 00:35:42 +0200
commit52ac23b25eb26511f8dea2382534eeada2fa8244 (patch)
tree6ecbcf8dbdb426016fb8cb6839154e9f6f20f431 /drivers/nvdimm
parentlibnvdimm, dax: introduce device-dax infrastructure (diff)
downloadlinux-52ac23b25eb26511f8dea2382534eeada2fa8244.tar.xz
linux-52ac23b25eb26511f8dea2382534eeada2fa8244.zip
libnvdimm, dax: reserve space to store labels for device-dax
We may want to subdivide a device-dax range into multiple devices so that each can have separate permissions or naming. Reserve 128K of label space by default so we have the capability of making allocation decisions persistent. This reservation is not something we can add later since it would result in the default size of a device-dax range changing between kernel versions. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/nvdimm')
-rw-r--r--drivers/nvdimm/pfn_devs.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
index 6ade2eb7615d..ca396c8f2cd5 100644
--- a/drivers/nvdimm/pfn_devs.c
+++ b/drivers/nvdimm/pfn_devs.c
@@ -540,6 +540,7 @@ static struct vmem_altmap *__nvdimm_setup_pfn(struct nd_pfn *nd_pfn,
static int nd_pfn_init(struct nd_pfn *nd_pfn)
{
+ u32 dax_label_reserve = is_nd_dax(&nd_pfn->dev) ? SZ_128K : 0;
struct nd_namespace_common *ndns = nd_pfn->ndns;
u32 start_pad = 0, end_trunc = 0;
resource_size_t start, size;
@@ -606,10 +607,11 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
size = resource_size(&nsio->res);
npfns = (size - start_pad - end_trunc - SZ_8K) / SZ_4K;
if (nd_pfn->mode == PFN_MODE_PMEM)
- offset = ALIGN(start + SZ_8K + 64 * npfns, nd_pfn->align)
- - start;
+ offset = ALIGN(start + SZ_8K + 64 * npfns + dax_label_reserve,
+ nd_pfn->align) - start;
else if (nd_pfn->mode == PFN_MODE_RAM)
- offset = ALIGN(start + SZ_8K, nd_pfn->align) - start;
+ offset = ALIGN(start + SZ_8K + dax_label_reserve,
+ nd_pfn->align) - start;
else
return -ENXIO;