Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1710165

[PATCH 3/3] libnvdimm, pfn, dax: limit namespace alignments to the supported set

From Dan Williams <dan.j.williams@intel.com>
Newsgroups linux.kernel
Subject [PATCH 3/3] libnvdimm, pfn, dax: limit namespace alignments to the supported set
Date 2017-08-12 07:20 +0200
Message-ID <udx06-4QR-7@gated-at.bofh.it> (permalink)
References <udx06-4QR-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Now that we properly advertise the supported pte, pmd, and pud sizes,
restrict the supported alignments that can be set on a namespace. This
assumes that userspace was not previously relying on the ability to set
odd alignments. At least ndctl only ever supported setting the namespace
alignment to 4K, 2M, or 1G.

Cc: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 drivers/nvdimm/pfn_devs.c |   23 ++---------------------
 1 file changed, 2 insertions(+), 21 deletions(-)

diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
index 610dd17a17f6..f447a1eb919d 100644
--- a/drivers/nvdimm/pfn_devs.c
+++ b/drivers/nvdimm/pfn_devs.c
@@ -131,26 +131,6 @@ static const unsigned long *nd_pfn_supported_alignments(void)
 	return supported_alignments;
 }
 
-static ssize_t __align_store(struct nd_pfn *nd_pfn, const char *buf)
-{
-	unsigned long val;
-	int rc;
-
-	rc = kstrtoul(buf, 0, &val);
-	if (rc)
-		return rc;
-
-	if (!is_power_of_2(val) || val < PAGE_SIZE || val > SZ_1G)
-		return -EINVAL;
-
-	if (nd_pfn->dev.driver)
-		return -EBUSY;
-	else
-		nd_pfn->align = val;
-
-	return 0;
-}
-
 static ssize_t align_store(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t len)
 {
@@ -159,7 +139,8 @@ static ssize_t align_store(struct device *dev,
 
 	device_lock(dev);
 	nvdimm_bus_lock(dev);
-	rc = __align_store(nd_pfn, buf);
+	rc = nd_size_select_store(dev, buf, &nd_pfn->align,
+			nd_pfn_supported_alignments());
 	dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__,
 			rc, buf, buf[len - 1] == '\n' ? "" : "\n");
 	nvdimm_bus_unlock(dev);

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/3] libnvdimm: export supported page size alignments Dan Williams <dan.j.williams@intel.com> - 2017-08-12 07:20 +0200
  [PATCH 3/3] libnvdimm, pfn,  dax: limit namespace alignments to the supported set Dan Williams <dan.j.williams@intel.com> - 2017-08-12 07:20 +0200
  [PATCH 2/3] libnvdimm, pfn,  dax: show supported dax/pfn region alignments in sysfs Dan Williams <dan.j.williams@intel.com> - 2017-08-12 07:20 +0200
    Re: [PATCH 2/3] libnvdimm, pfn, dax: show supported dax/pfn region  alignments in sysfs Oliver <oohall@gmail.com> - 2017-08-15 08:50 +0200
      Re: [PATCH 2/3] libnvdimm, pfn, dax: show supported dax/pfn region  alignments in sysfs Dan Williams <dan.j.williams@intel.com> - 2017-08-15 17:50 +0200
        Re: [PATCH 2/3] libnvdimm, pfn, dax: show supported dax/pfn region  alignments in sysfs Oliver <oohall@gmail.com> - 2017-08-16 07:30 +0200

csiph-web