From: "Verma, Vishal L" <vishal.l.verma@intel.com>
To: "Busch, Keith" <keith.busch@intel.com>,
"Jiang, Dave" <dave.jiang@intel.com>,
"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>
Subject: Re: [ndctl PATCH] ndctl: Add reconfigure-namespace command
Date: Fri, 10 Aug 2018 23:20:24 +0000 [thread overview]
Message-ID: <1533943222.6054.32.camel@intel.com> (raw)
In-Reply-To: <20180808224045.16667-1-keith.busch@intel.com>
On Wed, 2018-08-08 at 16:40 -0600, Keith Busch wrote:
> Namespace reconfiguration was the only utility 'verb' in ndctl that
> did not have its own command. This patch provides a new command,
> "reconfigure-namespace <namespace>".
>
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Keith Busch <keith.busch@intel.com>
> ---
> Documentation/ndctl/Makefile.am | 1 +
> Documentation/ndctl/ndctl-create-namespace.txt | 1 +
> .../ndctl/ndctl-reconfigure-namespace.txt | 199 +++++++++++++++++++++
> builtin.h | 1 +
> ndctl/action.h | 1 +
> ndctl/namespace.c | 44 +++++
> ndctl/ndctl.c | 1 +
> 7 files changed, 248 insertions(+)
> create mode 100644 Documentation/ndctl/ndctl-reconfigure-namespace.txt
This mostly looks good, just a couple of cleanup items below -
>
> diff --git a/Documentation/ndctl/Makefile.am b/Documentation/ndctl/Makefile.am
> index a30b139..d1ec67c 100644
> --- a/Documentation/ndctl/Makefile.am
> +++ b/Documentation/ndctl/Makefile.am
> @@ -41,6 +41,7 @@ man1_MANS = \
> ndctl-enable-namespace.1 \
> ndctl-disable-namespace.1 \
> ndctl-create-namespace.1 \
> + ndctl-reconfigure-namespace.1 \
> ndctl-destroy-namespace.1 \
> ndctl-check-namespace.1 \
> ndctl-inject-error.1 \
> diff --git a/Documentation/ndctl/ndctl-create-namespace.txt b/Documentation/ndctl/ndctl-create-namespace.txt
> index 343733d..9250a76 100644
> --- a/Documentation/ndctl/ndctl-create-namespace.txt
> +++ b/Documentation/ndctl/ndctl-create-namespace.txt
> @@ -219,5 +219,6 @@ linkndctl:ndctl-zero-labels[1],
> linkndctl:ndctl-init-labels[1],
> linkndctl:ndctl-disable-namespace[1],
> linkndctl:ndctl-enable-namespace[1],
> +linkndctl:ndctl-reconfigure-namespace[1],
> http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_7.pdf[UEFI NVDIMM Label Protocol]
> https://nvdimm.wiki.kernel.org[Linux Persistent Memory Wiki]
> diff --git a/Documentation/ndctl/ndctl-reconfigure-namespace.txt b/Documentation/ndctl/ndctl-reconfigure-namespace.txt
> new file mode 100644
> index 0000000..dcd9fa8
> --- /dev/null
> +++ b/Documentation/ndctl/ndctl-reconfigure-namespace.txt
> @@ -0,0 +1,199 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +ndctl-reconfigure-namespace(1)
> +==============================
> +
> +NAME
> +----
> +ndctl-reconfigure-namespace - reconfigure a namespace
> +
> +SYNOPSIS
> +--------
> +[verse]
> +'ndctl reconfigure-namespace' namespace [<options>]
> +
> +include::namespace-description.txt[]
> +
> +EXAMPLES
> +--------
> +
> +Convert namespace0.0 to mapping to 'mem'
> +[verse]
> +ndctl reconfigure-namespace namespace0.0 -f --map=mem
> +
> +Convert namespace0.0 size to 10G
> +[verse]
> +ndctl reconfigure-namespace namespace0.0 -f --size=10G
> +
> +OPTIONS
> +-------
> +-m::
> +--mode=::
> + - "raw": expose the namespace capacity directly with
[..]
Instead of duplicating all this text, lets 'refactor' it into a common
namespace-create-options.txt file, and include it in both the reconfig
and create man pages.
> +
> +include::../copyright.txt[]
> +
> +SEE ALSO
> +--------
> +linkndctl:ndctl-zero-labels[1],
> +linkndctl:ndctl-init-labels[1],
> +linkndctl:ndctl-disable-namespace[1],
> +linkndctl:ndctl-enable-namespace[1],
> +linkndctl:ndctl-create-namespace[1],
> +http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_7.pdf[UEFI NVDIMM Label Protocol]
> +https://nvdimm.wiki.kernel.org[Linux Persistent Memory Wiki]
> diff --git a/builtin.h b/builtin.h
> index 675a6ce..0cfd96f 100644
> --- a/builtin.h
> +++ b/builtin.h
> @@ -23,6 +23,7 @@ struct cmd_struct {
> int cmd_create_nfit(int argc, const char **argv, void *ctx);
> int cmd_enable_namespace(int argc, const char **argv, void *ctx);
> int cmd_create_namespace(int argc, const char **argv, void *ctx);
> +int cmd_reconfigure_namespace(int argc, const char **argv, void *ctx);
> int cmd_destroy_namespace(int argc, const char **argv, void *ctx);
> int cmd_disable_namespace(int argc, const char **argv, void *ctx);
> int cmd_check_namespace(int argc, const char **argv, void *ctx);
> diff --git a/ndctl/action.h b/ndctl/action.h
> index 1ecad49..44e141e 100644
> --- a/ndctl/action.h
> +++ b/ndctl/action.h
> @@ -9,6 +9,7 @@ enum device_action {
> ACTION_ENABLE,
> ACTION_DISABLE,
> ACTION_CREATE,
> + ACTION_RECONFIGURE,
> ACTION_DESTROY,
> ACTION_CHECK,
> ACTION_WAIT,
> diff --git a/ndctl/namespace.c b/ndctl/namespace.c
> index 510553c..cd01a1f 100644
> --- a/ndctl/namespace.c
> +++ b/ndctl/namespace.c
> @@ -115,6 +115,23 @@ OPT_STRING('a', "align", ¶m.align, "align", \
> OPT_BOOLEAN('f', "force", &force, "reconfigure namespace even if currently active"), \
> OPT_BOOLEAN('L', "autolabel", ¶m.autolabel, "automatically initialize labels")
>
> +#define RECONFIGURE_OPTIONS() \
> +OPT_STRING('u', "uuid", ¶m.uuid, "uuid", \
> + "specify the uuid for the namespace (default: autogenerate)"), \
> +OPT_STRING('n', "name", ¶m.name, "name", \
> + "specify an optional free form name for the namespace"), \
> +OPT_STRING('s', "size", ¶m.size, "size", \
> + "specify the namespace size in bytes (default: available capacity)"), \
> +OPT_STRING('m', "mode", ¶m.mode, "operation-mode", \
> + "specify a mode for the namespace, 'sector', 'fsdax', 'devdax' or 'raw'"), \
> +OPT_STRING('M', "map", ¶m.map, "memmap-location", \
> + "specify 'mem' or 'dev' for the location of the memmap"), \
> +OPT_STRING('a', "align", ¶m.align, "align", \
> + "specify the namespace alignment in bytes (default: 2M)"), \
> +OPT_BOOLEAN('f', "force", &force, "reconfigure namespace even if currently active"), \
> +OPT_BOOLEAN('L', "autolabel", ¶m.autolabel, "automatically initialize labels")
Similarly, instead of copying these, lets create a common subset and
include it along with CREATE_ and RECONFIG_
> +
> +
> #define CHECK_OPTIONS() \
> OPT_BOOLEAN('R', "repair", &repair, "perform metadata repairs"), \
> OPT_BOOLEAN('L', "rewrite-log", &logfix, "regenerate the log"), \
> @@ -138,6 +155,12 @@ static const struct option create_options[] = {
> OPT_END(),
> };
>
> +static const struct option reconfigure_options[] = {
> + BASE_OPTIONS(),
> + RECONFIGURE_OPTIONS(),
> + OPT_END(),
> +};
> +
> static const struct option check_options[] = {
> BASE_OPTIONS(),
> CHECK_OPTIONS(),
> @@ -270,6 +293,9 @@ static const char *parse_namespace_options(int argc, const char **argv,
> param.do_scan = argc == 1;
> argc = parse_options(argc, argv, options, u, 0);
>
> + if (mode == ACTION_RECONFIGURE)
> + param.reconfig = argv[0];
> +
> rc = set_defaults(mode);
>
> if (argc == 0 && mode != ACTION_CREATE) {
> @@ -288,6 +314,9 @@ static const char *parse_namespace_options(int argc, const char **argv,
> case ACTION_CHECK:
> action_string = "check";
> break;
> + case ACTION_RECONFIGURE:
> + action_string = "reconfigure";
> + break;
> default:
> action_string = "<>";
> break;
> @@ -1053,6 +1082,7 @@ static int do_xaction_namespace(const char *namespace,
> return rc;
> break;
> case ACTION_CREATE:
> + case ACTION_RECONFIGURE:
> rc = namespace_reconfig(region, ndns);
> if (rc < 0)
> return rc;
> @@ -1114,6 +1144,20 @@ int cmd_enable_namespace(int argc, const char **argv, void *ctx)
> }
> }
>
> +int cmd_reconfigure_namespace(int argc, const char **argv, void *ctx)
> +{
> + char *xable_usage = "ndctl reconfigure-namespace <namespace> [<options>]";
> + char *namespace = parse_namespace_options(argc, argv,
> + ACTION_RECONFIGURE, reconfigure_options, xable_usage);
> + int reconfigured = do_xaction_namespace(namespace, ACTION_RECONFIGURE,
> + ctx);
> +
> + if (reconfigured < 1)
> + fprintf(stderr, "failed to reconfigure namespace:%s %s\n",
> + namespace, strerror(-reconfigured));
> + return reconfigured;
> +}
> +
> int cmd_create_namespace(int argc, const char **argv, void *ctx)
> {
> char *xable_usage = "ndctl create-namespace [<options>]";
> diff --git a/ndctl/ndctl.c b/ndctl/ndctl.c
> index 73dabfa..b4d252c 100644
> --- a/ndctl/ndctl.c
> +++ b/ndctl/ndctl.c
> @@ -72,6 +72,7 @@ static struct cmd_struct commands[] = {
> { "enable-namespace", cmd_enable_namespace },
> { "disable-namespace", cmd_disable_namespace },
> { "create-namespace", cmd_create_namespace },
> + { "reconfigure-namespace", cmd_reconfigure_namespace },
> { "destroy-namespace", cmd_destroy_namespace },
> { "check-namespace", cmd_check_namespace },
> { "enable-region", cmd_enable_region },
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
prev parent reply other threads:[~2018-08-10 23:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-08 22:40 [ndctl PATCH] ndctl: Add reconfigure-namespace command Keith Busch
2018-08-09 8:36 ` Johannes Thumshirn
2018-08-10 23:20 ` Verma, Vishal L [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1533943222.6054.32.camel@intel.com \
--to=vishal.l.verma@intel.com \
--cc=dave.jiang@intel.com \
--cc=keith.busch@intel.com \
--cc=linux-nvdimm@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox