Add option [-V|--version] to emit version string
Add the 'zfs version' and 'zpool version' subcommands to display the version of the user space utilities and loaded zfs kernel module. For example: $ zfs version zfs-0.8.0-rc3_169_g67e0366b88 zfs-kmod-0.8.0-rc3_169_g67e0366b88 The '-V' and '--version' aliases were added to support the common convention of using 'zfs --version` to obtain the version information. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Richard Laager <rlaager@wiktel.com> Signed-off-by: TerraTech <1118433+TerraTech@users.noreply.github.com> Closes #2501 Closes #8567
This commit is contained in:
parent
8750edf1f7
commit
50478c6dad
|
@ -117,6 +117,7 @@ static int zfs_do_load_key(int argc, char **argv);
|
|||
static int zfs_do_unload_key(int argc, char **argv);
|
||||
static int zfs_do_change_key(int argc, char **argv);
|
||||
static int zfs_do_project(int argc, char **argv);
|
||||
static int zfs_do_version(int argc, char **argv);
|
||||
|
||||
/*
|
||||
* Enable a reasonable set of defaults for libumem debugging on DEBUG builds.
|
||||
|
@ -171,6 +172,7 @@ typedef enum {
|
|||
HELP_LOAD_KEY,
|
||||
HELP_UNLOAD_KEY,
|
||||
HELP_CHANGE_KEY,
|
||||
HELP_VERSION
|
||||
} zfs_help_t;
|
||||
|
||||
typedef struct zfs_command {
|
||||
|
@ -189,6 +191,8 @@ typedef struct zfs_command {
|
|||
* the generic usage message.
|
||||
*/
|
||||
static zfs_command_t command_table[] = {
|
||||
{ "version", zfs_do_version, HELP_VERSION },
|
||||
{ NULL },
|
||||
{ "create", zfs_do_create, HELP_CREATE },
|
||||
{ "destroy", zfs_do_destroy, HELP_DESTROY },
|
||||
{ NULL },
|
||||
|
@ -379,6 +383,8 @@ get_usage(zfs_help_t idx)
|
|||
"\t [-o keylocation=<value>] [-o pbkfd2iters=<value>]\n"
|
||||
"\t <filesystem|volume>\n"
|
||||
"\tchange-key -i [-l] <filesystem|volume>\n"));
|
||||
case HELP_VERSION:
|
||||
return (gettext("\tversion\n"));
|
||||
}
|
||||
|
||||
abort();
|
||||
|
@ -8059,6 +8065,18 @@ zfs_do_project(int argc, char **argv)
|
|||
return (ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Display version message
|
||||
*/
|
||||
static int
|
||||
zfs_do_version(int argc, char **argv)
|
||||
{
|
||||
if (zfs_version_print() == -1)
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
@ -8114,6 +8132,12 @@ main(int argc, char **argv)
|
|||
(strcmp(cmdname, "--help") == 0))
|
||||
usage(B_TRUE);
|
||||
|
||||
/*
|
||||
* Special case '-V|--version'
|
||||
*/
|
||||
if ((strcmp(cmdname, "-V") == 0) || (strcmp(cmdname, "--version") == 0))
|
||||
return (zfs_do_version(argc, argv));
|
||||
|
||||
if ((g_zfs = libzfs_init()) == NULL) {
|
||||
(void) fprintf(stderr, "%s", libzfs_error_init(errno));
|
||||
return (1);
|
||||
|
|
|
@ -115,6 +115,8 @@ static int zpool_do_set(int, char **);
|
|||
|
||||
static int zpool_do_sync(int, char **);
|
||||
|
||||
static int zpool_do_version(int, char **);
|
||||
|
||||
/*
|
||||
* These libumem hooks provide a reasonable set of defaults for the allocator's
|
||||
* debugging facilities.
|
||||
|
@ -164,7 +166,8 @@ typedef enum {
|
|||
HELP_SPLIT,
|
||||
HELP_SYNC,
|
||||
HELP_REGUID,
|
||||
HELP_REOPEN
|
||||
HELP_REOPEN,
|
||||
HELP_VERSION
|
||||
} zpool_help_t;
|
||||
|
||||
|
||||
|
@ -263,6 +266,8 @@ typedef struct zpool_command {
|
|||
* the generic usage message.
|
||||
*/
|
||||
static zpool_command_t command_table[] = {
|
||||
{ "version", zpool_do_version, HELP_VERSION },
|
||||
{ NULL },
|
||||
{ "create", zpool_do_create, HELP_CREATE },
|
||||
{ "destroy", zpool_do_destroy, HELP_DESTROY },
|
||||
{ NULL },
|
||||
|
@ -404,6 +409,8 @@ get_usage(zpool_help_t idx)
|
|||
return (gettext("\treguid <pool>\n"));
|
||||
case HELP_SYNC:
|
||||
return (gettext("\tsync [pool] ...\n"));
|
||||
case HELP_VERSION:
|
||||
return (gettext("\tversion\n"));
|
||||
}
|
||||
|
||||
abort();
|
||||
|
@ -9222,6 +9229,18 @@ find_command_idx(char *command, int *idx)
|
|||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Display version message
|
||||
*/
|
||||
static int
|
||||
zpool_do_version(int argc, char **argv)
|
||||
{
|
||||
if (zfs_version_print() == -1)
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
@ -9252,6 +9271,12 @@ main(int argc, char **argv)
|
|||
if ((strcmp(cmdname, "-?") == 0) || strcmp(cmdname, "--help") == 0)
|
||||
usage(B_TRUE);
|
||||
|
||||
/*
|
||||
* Special case '-V|--version'
|
||||
*/
|
||||
if ((strcmp(cmdname, "-V") == 0) || (strcmp(cmdname, "--version") == 0))
|
||||
return (zpool_do_version(argc, argv));
|
||||
|
||||
if ((g_zfs = libzfs_init()) == NULL) {
|
||||
(void) fprintf(stderr, "%s", libzfs_error_init(errno));
|
||||
return (1);
|
||||
|
|
|
@ -815,6 +815,13 @@ void libzfs_free_str_array(char **strs, int count);
|
|||
|
||||
int libzfs_envvar_is_set(char *envvar);
|
||||
|
||||
/*
|
||||
* Utility functions for zfs version
|
||||
*/
|
||||
extern void zfs_version_userland(char *, int);
|
||||
extern int zfs_version_kernel(char *, int);
|
||||
extern int zfs_version_print(void);
|
||||
|
||||
/*
|
||||
* Given a device or file, determine if it is part of a pool.
|
||||
*/
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#include "zfeature_common.h"
|
||||
#include <zfs_fletcher.h>
|
||||
#include <libzutil.h>
|
||||
#include <sys/zfs_sysfs.h>
|
||||
|
||||
int
|
||||
libzfs_errno(libzfs_handle_t *hdl)
|
||||
|
@ -1940,3 +1941,66 @@ zprop_iter(zprop_func func, void *cb, boolean_t show_all, boolean_t ordered,
|
|||
{
|
||||
return (zprop_iter_common(func, cb, show_all, ordered, type));
|
||||
}
|
||||
|
||||
/*
|
||||
* Fill given version buffer with zfs userland version
|
||||
*/
|
||||
void
|
||||
zfs_version_userland(char *version, int len)
|
||||
{
|
||||
(void) strlcpy(version, ZFS_META_ALIAS, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Fill given version buffer with zfs kernel version read from ZFS_SYSFS_DIR
|
||||
* Returns 0 on success, and -1 on error (with errno set)
|
||||
*/
|
||||
int
|
||||
zfs_version_kernel(char *version, int len)
|
||||
{
|
||||
int _errno;
|
||||
int fd;
|
||||
int rlen;
|
||||
|
||||
if ((fd = open(ZFS_SYSFS_DIR "/version", O_RDONLY)) == -1)
|
||||
return (-1);
|
||||
|
||||
if ((rlen = read(fd, version, len)) == -1) {
|
||||
version[0] = '\0';
|
||||
_errno = errno;
|
||||
(void) close(fd);
|
||||
errno = _errno;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
version[rlen-1] = '\0'; /* discard '\n' */
|
||||
|
||||
if (close(fd) == -1)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Prints both zfs userland and kernel versions
|
||||
* Returns 0 on success, and -1 on error (with errno set)
|
||||
*/
|
||||
int
|
||||
zfs_version_print(void)
|
||||
{
|
||||
char zver_userland[128];
|
||||
char zver_kernel[128];
|
||||
|
||||
if (zfs_version_kernel(zver_kernel, sizeof (zver_kernel)) == -1) {
|
||||
fprintf(stderr, "zfs_version_kernel() failed: %s\n",
|
||||
strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
zfs_version_userland(zver_userland, sizeof (zver_userland));
|
||||
|
||||
(void) printf("%s\n", zver_userland);
|
||||
(void) printf("zfs-kmod-%s\n", zver_kernel);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
.Nd configures ZFS file systems
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Fl ?
|
||||
.Fl ?V
|
||||
.Nm
|
||||
.Cm create
|
||||
.Op Fl p
|
||||
|
@ -327,6 +327,8 @@
|
|||
.Fl i
|
||||
.Op Fl l
|
||||
.Ar filesystem
|
||||
.Nm
|
||||
.Cm version
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
|
@ -2453,6 +2455,13 @@ original form.
|
|||
Displays a help message.
|
||||
.It Xo
|
||||
.Nm
|
||||
.Fl V, -version
|
||||
.Xc
|
||||
An alias for the
|
||||
.Nm zfs Cm version
|
||||
subcommand.
|
||||
.It Xo
|
||||
.Nm
|
||||
.Cm create
|
||||
.Op Fl p
|
||||
.Oo Fl o Ar property Ns = Ns Ar value Oc Ns ...
|
||||
|
@ -4624,6 +4633,13 @@ Indicates that zfs should make
|
|||
inherit the key of its parent. Note that this command can only be run on an
|
||||
encryption root that has an encrypted parent.
|
||||
.El
|
||||
.It Xo
|
||||
.Nm
|
||||
.Cm version
|
||||
.Xc
|
||||
Displays the software version of the
|
||||
.Nm
|
||||
userland utility and the zfs kernel module.
|
||||
.El
|
||||
.Sh EXIT STATUS
|
||||
The
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
.Nd configure ZFS storage pools
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Fl ?
|
||||
.Fl ?V
|
||||
.Nm
|
||||
.Cm add
|
||||
.Op Fl fgLnP
|
||||
|
@ -210,6 +210,8 @@
|
|||
.Cm upgrade
|
||||
.Op Fl V Ar version
|
||||
.Fl a Ns | Ns Ar pool Ns ...
|
||||
.Nm
|
||||
.Cm version
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
|
@ -933,6 +935,13 @@ The following subcommands are supported:
|
|||
Displays a help message.
|
||||
.It Xo
|
||||
.Nm
|
||||
.Fl V, -version
|
||||
.Xc
|
||||
An alias for the
|
||||
.Nm zpool Cm version
|
||||
subcommand.
|
||||
.It Xo
|
||||
.Nm
|
||||
.Cm add
|
||||
.Op Fl fgLnP
|
||||
.Oo Fl o Ar property Ns = Ns Ar value Oc
|
||||
|
@ -2465,6 +2474,13 @@ flag is specified, no features will be enabled on the pool.
|
|||
This option can only be used to increase the version number up to the last
|
||||
supported legacy version number.
|
||||
.El
|
||||
.It Xo
|
||||
.Nm
|
||||
.Cm version
|
||||
.Xc
|
||||
Displays the software version of the
|
||||
.Nm
|
||||
userland utility and the zfs kernel module.
|
||||
.El
|
||||
.Sh EXIT STATUS
|
||||
The following exit values are returned:
|
||||
|
|
Loading…
Reference in New Issue