A common confusion with ndctl is that 'create-namespace' does not work
in the label-less case. In the label-less case there is no capacity to
allocate as the size if already hard-coded by the region boundary.

However, users typically do something like the following in the
label-less case:

    # ndctl list
    {
      "dev":"namespace1.0",
      "mode":"raw",
      "size":"127.00 GiB (136.37 GB)",
      "sector_size":512,
      "blockdev":"pmem1"
    }

    # ndctl destroy-namespace namespace1.0 -f
    destroyed 1 namespace

    # ndctl create-namespace
    failed to create namespace: Resource temporarily unavailable

In other words they destroy the raw mode namespace that they don't want,
and seek to create a new default configuration namespace. Since there is
no "available_capacity" in the label-less case the 'create' attempt
fails.

Fix this by recognizing that the user wants a default sized namespace
and just reconfigure the raw namespace.

Signed-off-by: Dan Williams <[email protected]>
---
 ndctl/namespace.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/ndctl/namespace.c b/ndctl/namespace.c
index 58fec194ab94..e5a2b1341cdb 100644
--- a/ndctl/namespace.c
+++ b/ndctl/namespace.c
@@ -837,9 +837,13 @@ static int namespace_create(struct ndctl_region *region)
                return -EAGAIN;
        }
 
-       available = ndctl_region_get_max_available_extent(region);
-       if (available == ULLONG_MAX)
-               available = ndctl_region_get_available_size(region);
+       if (ndctl_region_get_nstype(region) == ND_DEVICE_NAMESPACE_IO)
+               available = ndctl_region_get_size(region);
+       else {
+               available = ndctl_region_get_max_available_extent(region);
+               if (available == ULLONG_MAX)
+                       available = ndctl_region_get_available_size(region);
+       }
        if (!available || p.size > available) {
                debug("%s: insufficient capacity size: %llx avail: %llx\n",
                        devname, p.size, available);

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to