[ndctl] namespace-action: Don't act on any seed namespaces
diff mbox series

Message ID 20200705041519.3263863-1-santosh@fossix.org
State New
Headers show
Series
  • [ndctl] namespace-action: Don't act on any seed namespaces
Related show

Commit Message

Santosh Sivaraj July 5, 2020, 4:15 a.m. UTC
Catch seed namespaces early on. This will prevent checking for sizes in enable,
disable and destroy namespace code path, which in turn prevents the inconsistent
reporting in count of enabled/disabled namespaces.

Signed-off-by: Santosh Sivaraj <santosh@fossix.org>
---
 ndctl/lib/libndctl.c |  5 -----
 ndctl/namespace.c    | 14 ++------------
 2 files changed, 2 insertions(+), 17 deletions(-)

Comments

Harish July 6, 2020, 9:29 a.m. UTC | #1
Tested-by: Harish <harish@linux.ibm.com>

- Harish

On 7/5/20 9:45 AM, Santosh Sivaraj wrote:
> Catch seed namespaces early on. This will prevent checking for sizes in enable,
> disable and destroy namespace code path, which in turn prevents the inconsistent
> reporting in count of enabled/disabled namespaces.
>
> Signed-off-by: Santosh Sivaraj <santosh@fossix.org>
> ---
>   ndctl/lib/libndctl.c |  5 -----
>   ndctl/namespace.c    | 14 ++------------
>   2 files changed, 2 insertions(+), 17 deletions(-)
>
> diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
> index ee737cb..d0599f7 100644
> --- a/ndctl/lib/libndctl.c
> +++ b/ndctl/lib/libndctl.c
> @@ -4130,16 +4130,11 @@ NDCTL_EXPORT int ndctl_namespace_enable(struct ndctl_namespace *ndns)
>   	const char *devname = ndctl_namespace_get_devname(ndns);
>   	struct ndctl_ctx *ctx = ndctl_namespace_get_ctx(ndns);
>   	struct ndctl_region *region = ndns->region;
> -	unsigned long long size = ndctl_namespace_get_size(ndns);
>   	int rc;
>   
>   	if (ndctl_namespace_is_enabled(ndns))
>   		return 0;
>   
> -	/* Don't try to enable idle namespace (no capacity allocated) */
> -	if (size == 0)
> -		return -ENXIO;
> -
>   	rc = ndctl_bind(ctx, ndns->module, devname);
>   
>   	/*
> diff --git a/ndctl/namespace.c b/ndctl/namespace.c
> index 0550580..5a086d0 100644
> --- a/ndctl/namespace.c
> +++ b/ndctl/namespace.c
> @@ -1102,7 +1102,6 @@ static int namespace_destroy(struct ndctl_region *region,
>   		struct ndctl_namespace *ndns)
>   {
>   	const char *devname = ndctl_namespace_get_devname(ndns);
> -	unsigned long long size;
>   	bool did_zero = false;
>   	int rc;
>   
> @@ -1147,19 +1146,9 @@ static int namespace_destroy(struct ndctl_region *region,
>   		goto out;
>   	}
>   
> -	size = ndctl_namespace_get_size(ndns);
> -
>   	rc = ndctl_namespace_delete(ndns);
>   	if (rc)
>   		debug("%s: failed to reclaim\n", devname);
> -
> -	/*
> -	 * Don't report a destroyed namespace when no capacity was
> -	 * allocated.
> -	 */
> -	if (size == 0 && rc == 0)
> -		rc = 1;
> -
>   out:
>   	return rc;
>   }
> @@ -2128,8 +2117,9 @@ static int do_xaction_namespace(const char *namespace,
>   			ndctl_namespace_foreach_safe(region, ndns, _n) {
>   				ndns_name = ndctl_namespace_get_devname(ndns);
>   
> -				if (strcmp(namespace, "all") != 0
> +				if ((strcmp(namespace, "all") != 0
>   						&& strcmp(namespace, ndns_name) != 0)
> +				    || ndctl_namespace_get_size(ndns) == 0)
>   					continue;
>   				switch (action) {
>   				case ACTION_DISABLE:

Patch
diff mbox series

diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
index ee737cb..d0599f7 100644
--- a/ndctl/lib/libndctl.c
+++ b/ndctl/lib/libndctl.c
@@ -4130,16 +4130,11 @@  NDCTL_EXPORT int ndctl_namespace_enable(struct ndctl_namespace *ndns)
 	const char *devname = ndctl_namespace_get_devname(ndns);
 	struct ndctl_ctx *ctx = ndctl_namespace_get_ctx(ndns);
 	struct ndctl_region *region = ndns->region;
-	unsigned long long size = ndctl_namespace_get_size(ndns);
 	int rc;
 
 	if (ndctl_namespace_is_enabled(ndns))
 		return 0;
 
-	/* Don't try to enable idle namespace (no capacity allocated) */
-	if (size == 0)
-		return -ENXIO;
-
 	rc = ndctl_bind(ctx, ndns->module, devname);
 
 	/*
diff --git a/ndctl/namespace.c b/ndctl/namespace.c
index 0550580..5a086d0 100644
--- a/ndctl/namespace.c
+++ b/ndctl/namespace.c
@@ -1102,7 +1102,6 @@  static int namespace_destroy(struct ndctl_region *region,
 		struct ndctl_namespace *ndns)
 {
 	const char *devname = ndctl_namespace_get_devname(ndns);
-	unsigned long long size;
 	bool did_zero = false;
 	int rc;
 
@@ -1147,19 +1146,9 @@  static int namespace_destroy(struct ndctl_region *region,
 		goto out;
 	}
 
-	size = ndctl_namespace_get_size(ndns);
-
 	rc = ndctl_namespace_delete(ndns);
 	if (rc)
 		debug("%s: failed to reclaim\n", devname);
-
-	/*
-	 * Don't report a destroyed namespace when no capacity was
-	 * allocated.
-	 */
-	if (size == 0 && rc == 0)
-		rc = 1;
-
 out:
 	return rc;
 }
@@ -2128,8 +2117,9 @@  static int do_xaction_namespace(const char *namespace,
 			ndctl_namespace_foreach_safe(region, ndns, _n) {
 				ndns_name = ndctl_namespace_get_devname(ndns);
 
-				if (strcmp(namespace, "all") != 0
+				if ((strcmp(namespace, "all") != 0
 						&& strcmp(namespace, ndns_name) != 0)
+				    || ndctl_namespace_get_size(ndns) == 0)
 					continue;
 				switch (action) {
 				case ACTION_DISABLE: