On Fri, Apr 27, 2018 at 11:18 AM, Dave Jiang <[email protected]> wrote:
> util_filter_walk() does the looping through of busses and regions. Removing
> duplicate code in namespace ops and provide filter functions so we can
> utilize util_filter_walk() and share common code.
>
> Signed-off-by: Dave Jiang <[email protected]>
> ---
>  ndctl/namespace.c |  164 
> ++++++++++++++++++++++++++++++-----------------------
>  test/btt-check.sh |    2 -
>  util/filter.c     |    5 +-
>  util/filter.h     |    8 +++
>  4 files changed, 105 insertions(+), 74 deletions(-)
>
> diff --git a/ndctl/namespace.c b/ndctl/namespace.c
> index e61f500c..404d6761 100644
> --- a/ndctl/namespace.c
> +++ b/ndctl/namespace.c
> @@ -983,14 +983,92 @@ static int namespace_reconfig(struct ndctl_region 
> *region,
>  int namespace_check(struct ndctl_namespace *ndns, bool verbose, bool force,
>                 bool repair, bool logfix);
>
> +static bool filter_bus(struct ndctl_bus *bus, struct util_filter_ctx *ctx)
> +{
> +       return true;
> +}
> +
> +static bool filter_region(struct ndctl_region *region,
> +               struct util_filter_ctx *ctx)
> +{
> +       struct nsaction_filter_arg *nfa = ctx->nsaction;
> +       int rc = 0;
> +       bool out = true;
> +
> +       if (nfa->action == ACTION_CREATE && !nfa->namespace) {
> +               if (nfa->rc == 1)
> +                       return false;
> +
> +               rc = namespace_create(region);
> +               if (rc != -EAGAIN) {
> +                       if (rc == 0)
> +                               rc = 1;
> +                       /* don't proceed in the filter loop */
> +                       out = false;
> +               }
> +               nfa->rc = rc;
> +       }
> +
> +       return out;
> +}
> +
> +static void filter_namespace(struct ndctl_namespace *ndns,
> +               struct util_filter_ctx *ctx)
> +{
> +       struct ndctl_region *region = ndctl_namespace_get_region(ndns);
> +       struct nsaction_filter_arg *nfa = ctx->nsaction;
> +       const char *ndns_name;
> +       int rc;
> +
> +       /* we have an error, don't do anything else */
> +       if (nfa->rc < 0)
> +               return;

Why do we need to stop here? This seems like a behavior regression.

For example:

    ndctl disable-namespace all

Should continue to disable subsequent namespaces even if a previous
namespace attempt fails.
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to