nvdimm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [ndctl PATCHv4] ndctl: Use max_available_extent for namespace
@ 2018-07-24 22:31 Keith Busch
  2018-08-02 19:49 ` Masayoshi Mizuma
  0 siblings, 1 reply; 6+ messages in thread
From: Keith Busch @ 2018-07-24 22:31 UTC (permalink / raw)
  To: Vishal Verma, Dave Jiang, linux-nvdimm

The available_size attribute returns all the unused regions, but a
memory namespace has to use contiguous free regions. This patch uses the
max_available_extent attribute, which reports the largest capacity that
can be created when determining what size to allocate.

If the attribute is available, this patch will also report the max
available extent in the region list output.

Signed-off-by: Keith Busch <keith.busch@intel.com>
---
v3 -> v4:

  Moved the symbol to the appropriate version section of the symbols
  script.

  Report the max available extent in the region list if the attribute
  exists.

 ndctl/lib/libndctl.c   | 33 +++++++++++++++++++++++++++++++++
 ndctl/lib/libndctl.sym |  1 +
 ndctl/libndctl.h       |  2 ++
 ndctl/list.c           |  9 +++++++++
 ndctl/namespace.c      |  4 +++-
 5 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
index 969e4aa..e911ea2 100644
--- a/ndctl/lib/libndctl.c
+++ b/ndctl/lib/libndctl.c
@@ -2107,6 +2107,39 @@ NDCTL_EXPORT unsigned long long ndctl_region_get_available_size(
 	return strtoull(buf, NULL, 0);
 }
 
+NDCTL_EXPORT unsigned long long ndctl_region_get_max_available_extent(
+		struct ndctl_region *region)
+{
+	unsigned int nstype = ndctl_region_get_nstype(region);
+	struct ndctl_ctx *ctx = ndctl_region_get_ctx(region);
+	char *path = region->region_buf;
+	int len = region->buf_len;
+	char buf[SYSFS_ATTR_SIZE];
+
+	switch (nstype) {
+	case ND_DEVICE_NAMESPACE_PMEM:
+	case ND_DEVICE_NAMESPACE_BLK:
+		break;
+	default:
+		return 0;
+	}
+
+	if (snprintf(path, len,
+		     "%s/max_available_extent", region->region_path) >= len) {
+		err(ctx, "%s: buffer too small!\n",
+				ndctl_region_get_devname(region));
+		return ULLONG_MAX;
+	}
+
+	/* fall back to legacy behavior if max extents is not exported */
+	if (sysfs_read_attr(ctx, path, buf) < 0) {
+		dbg(ctx, "max extents attribute not exported on older kernels\n");
+		return ULLONG_MAX;
+	}
+
+	return strtoull(buf, NULL, 0);
+}
+
 NDCTL_EXPORT unsigned int ndctl_region_get_range_index(struct ndctl_region *region)
 {
 	return region->range_index;
diff --git a/ndctl/lib/libndctl.sym b/ndctl/lib/libndctl.sym
index 9b36960..2bc312d 100644
--- a/ndctl/lib/libndctl.sym
+++ b/ndctl/lib/libndctl.sym
@@ -375,4 +375,5 @@ global:
 	ndctl_dimm_get_flags;
 	ndctl_dimm_get_event_flags;
 	ndctl_dimm_is_flag_supported;
+	ndctl_region_get_max_available_extent;
 } LIBNDCTL_16;
diff --git a/ndctl/libndctl.h b/ndctl/libndctl.h
index 6a6bb0d..a146502 100644
--- a/ndctl/libndctl.h
+++ b/ndctl/libndctl.h
@@ -350,6 +350,8 @@ unsigned int ndctl_region_get_interleave_ways(struct ndctl_region *region);
 unsigned int ndctl_region_get_mappings(struct ndctl_region *region);
 unsigned long long ndctl_region_get_size(struct ndctl_region *region);
 unsigned long long ndctl_region_get_available_size(struct ndctl_region *region);
+unsigned long long ndctl_region_get_max_available_extent(
+		struct ndctl_region *region);
 unsigned int ndctl_region_get_range_index(struct ndctl_region *region);
 unsigned int ndctl_region_get_type(struct ndctl_region *region);
 struct ndctl_namespace *ndctl_region_get_namespace_seed(
diff --git a/ndctl/list.c b/ndctl/list.c
index a06edc9..82e88bb 100644
--- a/ndctl/list.c
+++ b/ndctl/list.c
@@ -72,6 +72,7 @@ static struct json_object *region_to_json(struct ndctl_region *region,
 	struct ndctl_interleave_set *iset;
 	struct ndctl_mapping *mapping;
 	unsigned int bb_count = 0;
+	unsigned long long extent;
 	enum ndctl_persistence_domain pd;
 	int numa;
 
@@ -94,6 +95,14 @@ static struct json_object *region_to_json(struct ndctl_region *region,
 		goto err;
 	json_object_object_add(jregion, "available_size", jobj);
 
+	extent = ndctl_region_get_max_available_extent(region);
+	if (extent != ULLONG_MAX) {
+		jobj = util_json_object_size(extent, flags);
+		if (!jobj)
+			goto err;
+		json_object_object_add(jregion, "max_available_extent", jobj);
+	}
+
 	switch (ndctl_region_get_type(region)) {
 	case ND_DEVICE_REGION_PMEM:
 		jobj = json_object_new_string("pmem");
diff --git a/ndctl/namespace.c b/ndctl/namespace.c
index fe86d82..cfe0559 100644
--- a/ndctl/namespace.c
+++ b/ndctl/namespace.c
@@ -764,7 +764,9 @@ static int namespace_create(struct ndctl_region *region)
 		return -EAGAIN;
 	}
 
-	available = ndctl_region_get_available_size(region);
+	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);
-- 
2.14.4

_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [ndctl PATCHv4] ndctl: Use max_available_extent for namespace
  2018-07-24 22:31 [ndctl PATCHv4] ndctl: Use max_available_extent for namespace Keith Busch
@ 2018-08-02 19:49 ` Masayoshi Mizuma
  2018-08-02 19:53   ` Verma, Vishal L
  0 siblings, 1 reply; 6+ messages in thread
From: Masayoshi Mizuma @ 2018-08-02 19:49 UTC (permalink / raw)
  To: keith.busch, vishal.l.verma, dave.jiang, linux-nvdimm

Hi Keith,

I tested your patch with the following test script.
The result is good to me. 

Please feel free to add:

   Tested-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>

Test script:
---
#!/bin/bash -Ex

NDCTL=./ndctl/ndctl

modprobe nfit_test
region=$($NDCTL list -b nfit_test.0 -R -t pmem | jq -r .[].dev | head -1)

available_sz=$($NDCTL list -r $region | jq -r .[].available_size)
size=$(( available_sz/4 ))

NS1=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
NS2=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
NS3=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)

$NDCTL disable-namespace $NS2
$NDCTL destroy-namespace $NS2

$NDCTL list -r $region

$NDCTL create-namespace -r $region -t pmem 
ret=$?

$NDCTL disable-region all
modprobe -r nfit_test

exit $ret
---

Thanks,
Masa

On 07/24/2018 06:31 PM, Keith Busch wrote:
> The available_size attribute returns all the unused regions, but a
> memory namespace has to use contiguous free regions. This patch uses the
> max_available_extent attribute, which reports the largest capacity that
> can be created when determining what size to allocate.
> 
> If the attribute is available, this patch will also report the max
> available extent in the region list output.
> 
> Signed-off-by: Keith Busch <keith.busch@intel.com>
> ---
> v3 -> v4:
> 
>   Moved the symbol to the appropriate version section of the symbols
>   script.
> 
>   Report the max available extent in the region list if the attribute
>   exists.
> 
>  ndctl/lib/libndctl.c   | 33 +++++++++++++++++++++++++++++++++
>  ndctl/lib/libndctl.sym |  1 +
>  ndctl/libndctl.h       |  2 ++
>  ndctl/list.c           |  9 +++++++++
>  ndctl/namespace.c      |  4 +++-
>  5 files changed, 48 insertions(+), 1 deletion(-)
> 
> diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
> index 969e4aa..e911ea2 100644
> --- a/ndctl/lib/libndctl.c
> +++ b/ndctl/lib/libndctl.c
> @@ -2107,6 +2107,39 @@ NDCTL_EXPORT unsigned long long ndctl_region_get_available_size(
>  	return strtoull(buf, NULL, 0);
>  }
>  
> +NDCTL_EXPORT unsigned long long ndctl_region_get_max_available_extent(
> +		struct ndctl_region *region)
> +{
> +	unsigned int nstype = ndctl_region_get_nstype(region);
> +	struct ndctl_ctx *ctx = ndctl_region_get_ctx(region);
> +	char *path = region->region_buf;
> +	int len = region->buf_len;
> +	char buf[SYSFS_ATTR_SIZE];
> +
> +	switch (nstype) {
> +	case ND_DEVICE_NAMESPACE_PMEM:
> +	case ND_DEVICE_NAMESPACE_BLK:
> +		break;
> +	default:
> +		return 0;
> +	}
> +
> +	if (snprintf(path, len,
> +		     "%s/max_available_extent", region->region_path) >= len) {
> +		err(ctx, "%s: buffer too small!\n",
> +				ndctl_region_get_devname(region));
> +		return ULLONG_MAX;
> +	}
> +
> +	/* fall back to legacy behavior if max extents is not exported */
> +	if (sysfs_read_attr(ctx, path, buf) < 0) {
> +		dbg(ctx, "max extents attribute not exported on older kernels\n");
> +		return ULLONG_MAX;
> +	}
> +
> +	return strtoull(buf, NULL, 0);
> +}
> +
>  NDCTL_EXPORT unsigned int ndctl_region_get_range_index(struct ndctl_region *region)
>  {
>  	return region->range_index;
> diff --git a/ndctl/lib/libndctl.sym b/ndctl/lib/libndctl.sym
> index 9b36960..2bc312d 100644
> --- a/ndctl/lib/libndctl.sym
> +++ b/ndctl/lib/libndctl.sym
> @@ -375,4 +375,5 @@ global:
>  	ndctl_dimm_get_flags;
>  	ndctl_dimm_get_event_flags;
>  	ndctl_dimm_is_flag_supported;
> +	ndctl_region_get_max_available_extent;
>  } LIBNDCTL_16;
> diff --git a/ndctl/libndctl.h b/ndctl/libndctl.h
> index 6a6bb0d..a146502 100644
> --- a/ndctl/libndctl.h
> +++ b/ndctl/libndctl.h
> @@ -350,6 +350,8 @@ unsigned int ndctl_region_get_interleave_ways(struct ndctl_region *region);
>  unsigned int ndctl_region_get_mappings(struct ndctl_region *region);
>  unsigned long long ndctl_region_get_size(struct ndctl_region *region);
>  unsigned long long ndctl_region_get_available_size(struct ndctl_region *region);
> +unsigned long long ndctl_region_get_max_available_extent(
> +		struct ndctl_region *region);
>  unsigned int ndctl_region_get_range_index(struct ndctl_region *region);
>  unsigned int ndctl_region_get_type(struct ndctl_region *region);
>  struct ndctl_namespace *ndctl_region_get_namespace_seed(
> diff --git a/ndctl/list.c b/ndctl/list.c
> index a06edc9..82e88bb 100644
> --- a/ndctl/list.c
> +++ b/ndctl/list.c
> @@ -72,6 +72,7 @@ static struct json_object *region_to_json(struct ndctl_region *region,
>  	struct ndctl_interleave_set *iset;
>  	struct ndctl_mapping *mapping;
>  	unsigned int bb_count = 0;
> +	unsigned long long extent;
>  	enum ndctl_persistence_domain pd;
>  	int numa;
>  
> @@ -94,6 +95,14 @@ static struct json_object *region_to_json(struct ndctl_region *region,
>  		goto err;
>  	json_object_object_add(jregion, "available_size", jobj);
>  
> +	extent = ndctl_region_get_max_available_extent(region);
> +	if (extent != ULLONG_MAX) {
> +		jobj = util_json_object_size(extent, flags);
> +		if (!jobj)
> +			goto err;
> +		json_object_object_add(jregion, "max_available_extent", jobj);
> +	}
> +
>  	switch (ndctl_region_get_type(region)) {
>  	case ND_DEVICE_REGION_PMEM:
>  		jobj = json_object_new_string("pmem");
> diff --git a/ndctl/namespace.c b/ndctl/namespace.c
> index fe86d82..cfe0559 100644
> --- a/ndctl/namespace.c
> +++ b/ndctl/namespace.c
> @@ -764,7 +764,9 @@ static int namespace_create(struct ndctl_region *region)
>  		return -EAGAIN;
>  	}
>  
> -	available = ndctl_region_get_available_size(region);
> +	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
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ndctl PATCHv4] ndctl: Use max_available_extent for namespace
  2018-08-02 19:49 ` Masayoshi Mizuma
@ 2018-08-02 19:53   ` Verma, Vishal L
  2018-08-02 20:42     ` Masayoshi Mizuma
  0 siblings, 1 reply; 6+ messages in thread
From: Verma, Vishal L @ 2018-08-02 19:53 UTC (permalink / raw)
  To: Busch, Keith, Jiang, Dave, linux-nvdimm, msys.mizuma


On Thu, 2018-08-02 at 15:49 -0400, Masayoshi Mizuma wrote:
> Hi Keith,
> 
> I tested your patch with the following test script.
> The result is good to me. 
> 
> Please feel free to add:
> 
>    Tested-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
> 
> Test script:
> ---
> #!/bin/bash -Ex
> 
> NDCTL=./ndctl/ndctl
> 
> modprobe nfit_test
> region=$($NDCTL list -b nfit_test.0 -R -t pmem | jq -r .[].dev | head
> -1)
> 
> available_sz=$($NDCTL list -r $region | jq -r .[].available_size)
> size=$(( available_sz/4 ))
> 
> NS1=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r
> .dev)
> NS2=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r
> .dev)
> NS3=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r
> .dev)
> 
> $NDCTL disable-namespace $NS2
> $NDCTL destroy-namespace $NS2
> 
> $NDCTL list -r $region
> 
> $NDCTL create-namespace -r $region -t pmem 
> ret=$?
> 
> $NDCTL disable-region all
> modprobe -r nfit_test
> 
> exit $ret

Hi Masa,

Thanks for the testing, I will add the Tested-by.

If you also wanted to package up this script as a unit test, I'd be
happy to include it. Would be gated on KVER=4.19

Thanks,
	-Vishal

> ---
> 
> Thanks,
> Masa
> 
> On 07/24/2018 06:31 PM, Keith Busch wrote:
> > The available_size attribute returns all the unused regions, but a
> > memory namespace has to use contiguous free regions. This patch
> > uses the
> > max_available_extent attribute, which reports the largest capacity
> > that
> > can be created when determining what size to allocate.
> > 
> > If the attribute is available, this patch will also report the max
> > available extent in the region list output.
> > 
> > Signed-off-by: Keith Busch <keith.busch@intel.com>
> > ---
> > v3 -> v4:
> > 
> >   Moved the symbol to the appropriate version section of the
> > symbols
> >   script.
> > 
> >   Report the max available extent in the region list if the
> > attribute
> >   exists.
> > 
> >  ndctl/lib/libndctl.c   | 33 +++++++++++++++++++++++++++++++++
> >  ndctl/lib/libndctl.sym |  1 +
> >  ndctl/libndctl.h       |  2 ++
> >  ndctl/list.c           |  9 +++++++++
> >  ndctl/namespace.c      |  4 +++-
> >  5 files changed, 48 insertions(+), 1 deletion(-)
> > 
> > diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
> > index 969e4aa..e911ea2 100644
> > --- a/ndctl/lib/libndctl.c
> > +++ b/ndctl/lib/libndctl.c
> > @@ -2107,6 +2107,39 @@ NDCTL_EXPORT unsigned long long
> > ndctl_region_get_available_size(
> >  	return strtoull(buf, NULL, 0);
> >  }
> >  
> > +NDCTL_EXPORT unsigned long long
> > ndctl_region_get_max_available_extent(
> > +		struct ndctl_region *region)
> > +{
> > +	unsigned int nstype = ndctl_region_get_nstype(region);
> > +	struct ndctl_ctx *ctx = ndctl_region_get_ctx(region);
> > +	char *path = region->region_buf;
> > +	int len = region->buf_len;
> > +	char buf[SYSFS_ATTR_SIZE];
> > +
> > +	switch (nstype) {
> > +	case ND_DEVICE_NAMESPACE_PMEM:
> > +	case ND_DEVICE_NAMESPACE_BLK:
> > +		break;
> > +	default:
> > +		return 0;
> > +	}
> > +
> > +	if (snprintf(path, len,
> > +		     "%s/max_available_extent", region-
> > >region_path) >= len) {
> > +		err(ctx, "%s: buffer too small!\n",
> > +				ndctl_region_get_devname(region));
> > +		return ULLONG_MAX;
> > +	}
> > +
> > +	/* fall back to legacy behavior if max extents is not
> > exported */
> > +	if (sysfs_read_attr(ctx, path, buf) < 0) {
> > +		dbg(ctx, "max extents attribute not exported on
> > older kernels\n");
> > +		return ULLONG_MAX;
> > +	}
> > +
> > +	return strtoull(buf, NULL, 0);
> > +}
> > +
> >  NDCTL_EXPORT unsigned int ndctl_region_get_range_index(struct
> > ndctl_region *region)
> >  {
> >  	return region->range_index;
> > diff --git a/ndctl/lib/libndctl.sym b/ndctl/lib/libndctl.sym
> > index 9b36960..2bc312d 100644
> > --- a/ndctl/lib/libndctl.sym
> > +++ b/ndctl/lib/libndctl.sym
> > @@ -375,4 +375,5 @@ global:
> >  	ndctl_dimm_get_flags;
> >  	ndctl_dimm_get_event_flags;
> >  	ndctl_dimm_is_flag_supported;
> > +	ndctl_region_get_max_available_extent;
> >  } LIBNDCTL_16;
> > diff --git a/ndctl/libndctl.h b/ndctl/libndctl.h
> > index 6a6bb0d..a146502 100644
> > --- a/ndctl/libndctl.h
> > +++ b/ndctl/libndctl.h
> > @@ -350,6 +350,8 @@ unsigned int
> > ndctl_region_get_interleave_ways(struct ndctl_region *region);
> >  unsigned int ndctl_region_get_mappings(struct ndctl_region
> > *region);
> >  unsigned long long ndctl_region_get_size(struct ndctl_region
> > *region);
> >  unsigned long long ndctl_region_get_available_size(struct
> > ndctl_region *region);
> > +unsigned long long ndctl_region_get_max_available_extent(
> > +		struct ndctl_region *region);
> >  unsigned int ndctl_region_get_range_index(struct ndctl_region
> > *region);
> >  unsigned int ndctl_region_get_type(struct ndctl_region *region);
> >  struct ndctl_namespace *ndctl_region_get_namespace_seed(
> > diff --git a/ndctl/list.c b/ndctl/list.c
> > index a06edc9..82e88bb 100644
> > --- a/ndctl/list.c
> > +++ b/ndctl/list.c
> > @@ -72,6 +72,7 @@ static struct json_object *region_to_json(struct
> > ndctl_region *region,
> >  	struct ndctl_interleave_set *iset;
> >  	struct ndctl_mapping *mapping;
> >  	unsigned int bb_count = 0;
> > +	unsigned long long extent;
> >  	enum ndctl_persistence_domain pd;
> >  	int numa;
> >  
> > @@ -94,6 +95,14 @@ static struct json_object *region_to_json(struct
> > ndctl_region *region,
> >  		goto err;
> >  	json_object_object_add(jregion, "available_size", jobj);
> >  
> > +	extent = ndctl_region_get_max_available_extent(region);
> > +	if (extent != ULLONG_MAX) {
> > +		jobj = util_json_object_size(extent, flags);
> > +		if (!jobj)
> > +			goto err;
> > +		json_object_object_add(jregion,
> > "max_available_extent", jobj);
> > +	}
> > +
> >  	switch (ndctl_region_get_type(region)) {
> >  	case ND_DEVICE_REGION_PMEM:
> >  		jobj = json_object_new_string("pmem");
> > diff --git a/ndctl/namespace.c b/ndctl/namespace.c
> > index fe86d82..cfe0559 100644
> > --- a/ndctl/namespace.c
> > +++ b/ndctl/namespace.c
> > @@ -764,7 +764,9 @@ static int namespace_create(struct ndctl_region
> > *region)
> >  		return -EAGAIN;
> >  	}
> >  
> > -	available = ndctl_region_get_available_size(region);
> > +	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
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ndctl PATCHv4] ndctl: Use max_available_extent for namespace
  2018-08-02 19:53   ` Verma, Vishal L
@ 2018-08-02 20:42     ` Masayoshi Mizuma
  2018-08-03 16:26       ` Masayoshi Mizuma
  0 siblings, 1 reply; 6+ messages in thread
From: Masayoshi Mizuma @ 2018-08-02 20:42 UTC (permalink / raw)
  To: vishal.l.verma, keith.busch, dave.jiang, linux-nvdimm

Hi Vishal,

On 08/02/2018 03:53 PM, Verma, Vishal L wrote:
> 
> On Thu, 2018-08-02 at 15:49 -0400, Masayoshi Mizuma wrote:
>> Hi Keith,
>>
>> I tested your patch with the following test script.
>> The result is good to me. 
>>
>> Please feel free to add:
>>
>>    Tested-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
>>
>> Test script:
>> ---
>> #!/bin/bash -Ex
>>
>> NDCTL=./ndctl/ndctl
>>
>> modprobe nfit_test
>> region=$($NDCTL list -b nfit_test.0 -R -t pmem | jq -r .[].dev | head
>> -1)
>>
>> available_sz=$($NDCTL list -r $region | jq -r .[].available_size)
>> size=$(( available_sz/4 ))
>>
>> NS1=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r
>> .dev)
>> NS2=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r
>> .dev)
>> NS3=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r
>> .dev)
>>
>> $NDCTL disable-namespace $NS2
>> $NDCTL destroy-namespace $NS2
>>
>> $NDCTL list -r $region
>>
>> $NDCTL create-namespace -r $region -t pmem 
>> ret=$?
>>
>> $NDCTL disable-region all
>> modprobe -r nfit_test
>>
>> exit $ret
> 
> Hi Masa,
> 
> Thanks for the testing, I will add the Tested-by.
> 
> If you also wanted to package up this script as a unit test, I'd be
> happy to include it. Would be gated on KVER=4.19

Sounds great :-) 
Here is the patch for unit test:

--------
From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
Date: Thu, 2 Aug 2018 16:20:45 -0400
Subject: [PATCH] ndctl, test: add a new unit test for max_available_extent
 namespace

Add a new unit test to test max_available_extent namespace.
This function is implemented by the following patches.

  kernel side:
    https://lists.01.org/pipermail/linux-nvdimm/2018-July/016731.html
    https://lists.01.org/pipermail/linux-nvdimm/2018-July/016732.html

  ndctl side:
    https://lists.01.org/pipermail/linux-nvdimm/2018-July/017176.html

Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
---
 test/Makefile.am                |  3 ++-
 test/max_available_extent_ns.sh | 43 +++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100755 test/max_available_extent_ns.sh

diff --git a/test/Makefile.am b/test/Makefile.am
index 8c55056..9af2464 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -22,7 +22,8 @@ TESTS =\
 	firmware-update.sh \
 	ack-shutdown-count-set \
 	rescan-partitions.sh \
-	monitor.sh
+	monitor.sh \
+	max_available_extent_ns.sh
 
 check_PROGRAMS =\
 	libndctl \
diff --git a/test/max_available_extent_ns.sh b/test/max_available_extent_ns.sh
new file mode 100755
index 0000000..4a44625
--- /dev/null
+++ b/test/max_available_extent_ns.sh
@@ -0,0 +1,43 @@
+#!/bin/bash -Ex
+
+# SPDX-License-Identifier: GPL-2.0
+# Copyright(c) 2018, FUJITSU LIMITED. All rights reserved.
+
+rc=77
+
+. ./common
+
+trap 'err $LINENO' ERR
+
+check_min_kver "4.19" || do_skip "kernel $KVER may not support max_available_size"
+
+init()
+{
+	$NDCTL disable-region -b $NFIT_TEST_BUS0 all
+	$NDCTL zero-labels -b $NFIT_TEST_BUS0 all
+	$NDCTL enable-region -b $NFIT_TEST_BUS0 all
+}
+
+do_test()
+{
+	region=$($NDCTL list -b nfit_test.0 -R -t pmem | jq -r .[].dev | head -1)
+
+	available_sz=$($NDCTL list -r $region | jq -r .[].available_size)
+	size=$(( available_sz/4 ))
+
+	NS1=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
+	NS2=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
+	NS3=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
+
+	$NDCTL disable-namespace $NS2
+	$NDCTL destroy-namespace $NS2
+
+	$NDCTL create-namespace -r $region -t pmem
+}
+
+modprobe nfit_test
+rc=1
+init
+do_test
+_cleanup
+exit 0
-- 
2.18.0

Thanks,
Masa

_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [ndctl PATCHv4] ndctl: Use max_available_extent for namespace
  2018-08-02 20:42     ` Masayoshi Mizuma
@ 2018-08-03 16:26       ` Masayoshi Mizuma
  2018-08-03 17:09         ` Verma, Vishal L
  0 siblings, 1 reply; 6+ messages in thread
From: Masayoshi Mizuma @ 2018-08-03 16:26 UTC (permalink / raw)
  To: vishal.l.verma; +Cc: linux-nvdimm

Hi Vishal,

On 08/02/2018 04:42 PM, Masayoshi Mizuma wrote:
...
>> If you also wanted to package up this script as a unit test, I'd be
>> happy to include it. Would be gated on KVER=4.19
> 
> Sounds great :-) 
> Here is the patch for unit test:
> 
> --------
> From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
> Date: Thu, 2 Aug 2018 16:20:45 -0400
> Subject: [PATCH] ndctl, test: add a new unit test for max_available_extent
>  namespace
> 
> Add a new unit test to test max_available_extent namespace.
> This function is implemented by the following patches.
> 
>   kernel side:
>     https://lists.01.org/pipermail/linux-nvdimm/2018-July/016731.html
>     https://lists.01.org/pipermail/linux-nvdimm/2018-July/016732.html
> 
>   ndctl side:
>     https://lists.01.org/pipermail/linux-nvdimm/2018-July/017176.html
> 
> Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
> ---
>  test/Makefile.am                |  3 ++-
>  test/max_available_extent_ns.sh | 43 +++++++++++++++++++++++++++++++++
>  2 files changed, 45 insertions(+), 1 deletion(-)
>  create mode 100755 test/max_available_extent_ns.sh
> 
> diff --git a/test/Makefile.am b/test/Makefile.am
> index 8c55056..9af2464 100644
> --- a/test/Makefile.am
> +++ b/test/Makefile.am
> @@ -22,7 +22,8 @@ TESTS =\
>  	firmware-update.sh \
>  	ack-shutdown-count-set \
>  	rescan-partitions.sh \
> -	monitor.sh
> +	monitor.sh \
> +	max_available_extent_ns.sh
>  
>  check_PROGRAMS =\
>  	libndctl \
> diff --git a/test/max_available_extent_ns.sh b/test/max_available_extent_ns.sh
> new file mode 100755
> index 0000000..4a44625
> --- /dev/null
> +++ b/test/max_available_extent_ns.sh
> @@ -0,0 +1,43 @@
> +#!/bin/bash -Ex
> +
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright(c) 2018, FUJITSU LIMITED. All rights reserved.
> +
> +rc=77
> +
> +. ./common
> +
> +trap 'err $LINENO' ERR
> +
> +check_min_kver "4.19" || do_skip "kernel $KVER may not support max_available_size"
> +
> +init()
> +{
> +	$NDCTL disable-region -b $NFIT_TEST_BUS0 all
> +	$NDCTL zero-labels -b $NFIT_TEST_BUS0 all
> +	$NDCTL enable-region -b $NFIT_TEST_BUS0 all
> +}
> +
> +do_test()
> +{

> +	region=$($NDCTL list -b nfit_test.0 -R -t pmem | jq -r .[].dev | head -1)

nfit_test.0 here should be changed to $NFIT_TEST_BUS0.
Please let me know if I should send the v2 patch.

Thanks!
Masa

> +
> +	available_sz=$($NDCTL list -r $region | jq -r .[].available_size)
> +	size=$(( available_sz/4 ))
> +
> +	NS1=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
> +	NS2=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
> +	NS3=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
> +
> +	$NDCTL disable-namespace $NS2
> +	$NDCTL destroy-namespace $NS2
> +
> +	$NDCTL create-namespace -r $region -t pmem
> +}
> +
> +modprobe nfit_test
> +rc=1
> +init
> +do_test
> +_cleanup
> +exit 0
> 
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ndctl PATCHv4] ndctl: Use max_available_extent for namespace
  2018-08-03 16:26       ` Masayoshi Mizuma
@ 2018-08-03 17:09         ` Verma, Vishal L
  0 siblings, 0 replies; 6+ messages in thread
From: Verma, Vishal L @ 2018-08-03 17:09 UTC (permalink / raw)
  To: msys.mizuma; +Cc: linux-nvdimm


On Fri, 2018-08-03 at 12:26 -0400, Masayoshi Mizuma wrote:
> Hi Vishal,
> 
> On 08/02/2018 04:42 PM, Masayoshi Mizuma wrote:
> ...
> > > If you also wanted to package up this script as a unit test, I'd be
> > > happy to include it. Would be gated on KVER=4.19
> > 
> > Sounds great :-) 
> > Here is the patch for unit test:
> > 
> > --------
> > From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
> > Date: Thu, 2 Aug 2018 16:20:45 -0400
> > Subject: [PATCH] ndctl, test: add a new unit test for max_available_extent
> >  namespace
> > 
> > Add a new unit test to test max_available_extent namespace.
> > This function is implemented by the following patches.
> > 
> >   kernel side:
> >     https://lists.01.org/pipermail/linux-nvdimm/2018-July/016731.html
> >     https://lists.01.org/pipermail/linux-nvdimm/2018-July/016732.html
> > 
> >   ndctl side:
> >     https://lists.01.org/pipermail/linux-nvdimm/2018-July/017176.html
> > 
> > Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
> > ---
> >  test/Makefile.am                |  3 ++-
> >  test/max_available_extent_ns.sh | 43 +++++++++++++++++++++++++++++++++
> >  2 files changed, 45 insertions(+), 1 deletion(-)
> >  create mode 100755 test/max_available_extent_ns.sh
> > 
> > diff --git a/test/Makefile.am b/test/Makefile.am
> > index 8c55056..9af2464 100644
> > --- a/test/Makefile.am
> > +++ b/test/Makefile.am
> > @@ -22,7 +22,8 @@ TESTS =\
> >  	firmware-update.sh \
> >  	ack-shutdown-count-set \
> >  	rescan-partitions.sh \
> > -	monitor.sh
> > +	monitor.sh \
> > +	max_available_extent_ns.sh
> >  
> >  check_PROGRAMS =\
> >  	libndctl \
> > diff --git a/test/max_available_extent_ns.sh b/test/max_available_extent_ns.sh
> > new file mode 100755
> > index 0000000..4a44625
> > --- /dev/null
> > +++ b/test/max_available_extent_ns.sh
> > @@ -0,0 +1,43 @@
> > +#!/bin/bash -Ex
> > +
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright(c) 2018, FUJITSU LIMITED. All rights reserved.
> > +
> > +rc=77
> > +
> > +. ./common
> > +
> > +trap 'err $LINENO' ERR
> > +
> > +check_min_kver "4.19" || do_skip "kernel $KVER may not support max_available_size"
> > +
> > +init()
> > +{
> > +	$NDCTL disable-region -b $NFIT_TEST_BUS0 all
> > +	$NDCTL zero-labels -b $NFIT_TEST_BUS0 all
> > +	$NDCTL enable-region -b $NFIT_TEST_BUS0 all
> > +}
> > +
> > +do_test()
> > +{
> > +	region=$($NDCTL list -b nfit_test.0 -R -t pmem | jq -r .[].dev | head -1)
> 
> nfit_test.0 here should be changed to $NFIT_TEST_BUS0.
> Please let me know if I should send the v2 patch.

Ah yes good catch. I hadn't gotten around to applying it yet, so yeah
please send a v2

Thanks,
	-Vishal

> 
> Thanks!
> Masa
> 
> > +
> > +	available_sz=$($NDCTL list -r $region | jq -r .[].available_size)
> > +	size=$(( available_sz/4 ))
> > +
> > +	NS1=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
> > +	NS2=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
> > +	NS3=$($NDCTL create-namespace -r $region -t pmem -s $size | jq -r .dev)
> > +
> > +	$NDCTL disable-namespace $NS2
> > +	$NDCTL destroy-namespace $NS2
> > +
> > +	$NDCTL create-namespace -r $region -t pmem
> > +}
> > +
> > +modprobe nfit_test
> > +rc=1
> > +init
> > +do_test
> > +_cleanup
> > +exit 0
> > 
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-08-03 17:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-24 22:31 [ndctl PATCHv4] ndctl: Use max_available_extent for namespace Keith Busch
2018-08-02 19:49 ` Masayoshi Mizuma
2018-08-02 19:53   ` Verma, Vishal L
2018-08-02 20:42     ` Masayoshi Mizuma
2018-08-03 16:26       ` Masayoshi Mizuma
2018-08-03 17:09         ` Verma, Vishal L

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).