libnvdimm: pmem label sets and namespace instantiation.
A complete label set is a PMEM-label per-dimm per-interleave-set where all the UUIDs match and the interleave set cookie matches the hosting interleave set. Present sysfs attributes for manipulation of a PMEM-namespace's 'alt_name', 'uuid', and 'size' attributes. A later patch will make these settings persistent by writing back the label. Note that PMEM allocations grow forwards from the start of an interleave set (lowest dimm-physical-address (DPA)). BLK-namespaces that alias with a PMEM interleave set will grow allocations backward from the highest DPA. Cc: Greg KH <gregkh@linuxfoundation.org> Cc: Neil Brown <neilb@suse.de> Acked-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
@@ -203,6 +203,23 @@ static int nd_pmem_probe(struct device *dev)
|
||||
struct nd_namespace_io *nsio = to_nd_namespace_io(dev);
|
||||
struct pmem_device *pmem;
|
||||
|
||||
if (resource_size(&nsio->res) < ND_MIN_NAMESPACE_SIZE) {
|
||||
resource_size_t size = resource_size(&nsio->res);
|
||||
|
||||
dev_dbg(dev, "%s: size: %pa, too small must be at least %#x\n",
|
||||
__func__, &size, ND_MIN_NAMESPACE_SIZE);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (nd_region_to_nstype(nd_region) == ND_DEVICE_NAMESPACE_PMEM) {
|
||||
struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
|
||||
|
||||
if (!nspm->uuid) {
|
||||
dev_dbg(dev, "%s: uuid not set\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
pmem = pmem_alloc(dev, &nsio->res, nd_region->id);
|
||||
if (IS_ERR(pmem))
|
||||
return PTR_ERR(pmem);
|
||||
@@ -222,13 +239,14 @@ static int nd_pmem_remove(struct device *dev)
|
||||
|
||||
MODULE_ALIAS("pmem");
|
||||
MODULE_ALIAS_ND_DEVICE(ND_DEVICE_NAMESPACE_IO);
|
||||
MODULE_ALIAS_ND_DEVICE(ND_DEVICE_NAMESPACE_PMEM);
|
||||
static struct nd_device_driver nd_pmem_driver = {
|
||||
.probe = nd_pmem_probe,
|
||||
.remove = nd_pmem_remove,
|
||||
.drv = {
|
||||
.name = "nd_pmem",
|
||||
},
|
||||
.type = ND_DRIVER_NAMESPACE_IO,
|
||||
.type = ND_DRIVER_NAMESPACE_IO | ND_DRIVER_NAMESPACE_PMEM,
|
||||
};
|
||||
|
||||
static int __init pmem_init(void)
|
||||
|
Reference in New Issue
Block a user