mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
zpool: correctly align columns with -p
zpool_expand_proplist() now ignores pl_fixed if its new literal argument is true. The rest is a consequence of needing to pass that down. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiao?=~Dska <nabijaczleweli@nabijaczleweli.xyz> Closes #11202
This commit is contained in:
parent
fd654e412e
commit
e6c59cd171
@ -56,6 +56,7 @@ typedef struct zpool_node {
|
|||||||
|
|
||||||
struct zpool_list {
|
struct zpool_list {
|
||||||
boolean_t zl_findall;
|
boolean_t zl_findall;
|
||||||
|
boolean_t zl_literal;
|
||||||
uu_avl_t *zl_avl;
|
uu_avl_t *zl_avl;
|
||||||
uu_avl_pool_t *zl_pool;
|
uu_avl_pool_t *zl_pool;
|
||||||
zprop_list_t **zl_proplist;
|
zprop_list_t **zl_proplist;
|
||||||
@ -88,7 +89,9 @@ add_pool(zpool_handle_t *zhp, void *data)
|
|||||||
uu_avl_node_init(node, &node->zn_avlnode, zlp->zl_pool);
|
uu_avl_node_init(node, &node->zn_avlnode, zlp->zl_pool);
|
||||||
if (uu_avl_find(zlp->zl_avl, node, NULL, &idx) == NULL) {
|
if (uu_avl_find(zlp->zl_avl, node, NULL, &idx) == NULL) {
|
||||||
if (zlp->zl_proplist &&
|
if (zlp->zl_proplist &&
|
||||||
zpool_expand_proplist(zhp, zlp->zl_proplist) != 0) {
|
zpool_expand_proplist(zhp, zlp->zl_proplist,
|
||||||
|
zlp->zl_literal)
|
||||||
|
!= 0) {
|
||||||
zpool_close(zhp);
|
zpool_close(zhp);
|
||||||
free(node);
|
free(node);
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -110,7 +113,8 @@ add_pool(zpool_handle_t *zhp, void *data)
|
|||||||
* line.
|
* line.
|
||||||
*/
|
*/
|
||||||
zpool_list_t *
|
zpool_list_t *
|
||||||
pool_list_get(int argc, char **argv, zprop_list_t **proplist, int *err)
|
pool_list_get(int argc, char **argv, zprop_list_t **proplist,
|
||||||
|
boolean_t literal, int *err)
|
||||||
{
|
{
|
||||||
zpool_list_t *zlp;
|
zpool_list_t *zlp;
|
||||||
|
|
||||||
@ -128,6 +132,8 @@ pool_list_get(int argc, char **argv, zprop_list_t **proplist, int *err)
|
|||||||
|
|
||||||
zlp->zl_proplist = proplist;
|
zlp->zl_proplist = proplist;
|
||||||
|
|
||||||
|
zlp->zl_literal = literal;
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
(void) zpool_iter(g_zfs, add_pool, zlp);
|
(void) zpool_iter(g_zfs, add_pool, zlp);
|
||||||
zlp->zl_findall = B_TRUE;
|
zlp->zl_findall = B_TRUE;
|
||||||
@ -242,12 +248,12 @@ pool_list_count(zpool_list_t *zlp)
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
for_each_pool(int argc, char **argv, boolean_t unavail,
|
for_each_pool(int argc, char **argv, boolean_t unavail,
|
||||||
zprop_list_t **proplist, zpool_iter_f func, void *data)
|
zprop_list_t **proplist, boolean_t literal, zpool_iter_f func, void *data)
|
||||||
{
|
{
|
||||||
zpool_list_t *list;
|
zpool_list_t *list;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if ((list = pool_list_get(argc, argv, proplist, &ret)) == NULL)
|
if ((list = pool_list_get(argc, argv, proplist, literal, &ret)) == NULL)
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
if (pool_list_iter(list, unavail, func, data) != 0)
|
if (pool_list_iter(list, unavail, func, data) != 0)
|
||||||
@ -711,7 +717,7 @@ all_pools_for_each_vdev_run(int argc, char **argv, char *cmd,
|
|||||||
vcdl->g_zfs = g_zfs;
|
vcdl->g_zfs = g_zfs;
|
||||||
|
|
||||||
/* Gather our list of all vdevs in all pools */
|
/* Gather our list of all vdevs in all pools */
|
||||||
for_each_pool(argc, argv, B_TRUE, NULL,
|
for_each_pool(argc, argv, B_TRUE, NULL, B_FALSE,
|
||||||
all_pools_for_each_vdev_gather_cb, vcdl);
|
all_pools_for_each_vdev_gather_cb, vcdl);
|
||||||
|
|
||||||
/* Run command on all vdevs in all pools */
|
/* Run command on all vdevs in all pools */
|
||||||
|
@ -1762,7 +1762,7 @@ zpool_do_export(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (for_each_pool(argc, argv, B_TRUE, NULL,
|
return (for_each_pool(argc, argv, B_TRUE, NULL,
|
||||||
zpool_export_one, &cb));
|
B_FALSE, zpool_export_one, &cb));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check arguments */
|
/* check arguments */
|
||||||
@ -1771,7 +1771,8 @@ zpool_do_export(int argc, char **argv)
|
|||||||
usage(B_FALSE);
|
usage(B_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = for_each_pool(argc, argv, B_TRUE, NULL, zpool_export_one, &cb);
|
ret = for_each_pool(argc, argv, B_TRUE, NULL, B_FALSE, zpool_export_one,
|
||||||
|
&cb);
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
@ -3613,7 +3614,8 @@ zpool_do_sync(int argc, char **argv)
|
|||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
/* if argc == 0 we will execute zpool_sync_one on all pools */
|
/* if argc == 0 we will execute zpool_sync_one on all pools */
|
||||||
ret = for_each_pool(argc, argv, B_FALSE, NULL, zpool_sync_one, &force);
|
ret = for_each_pool(argc, argv, B_FALSE, NULL, B_FALSE, zpool_sync_one,
|
||||||
|
&force);
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
@ -4958,7 +4960,7 @@ are_vdevs_in_pool(int argc, char **argv, char *pool_name,
|
|||||||
|
|
||||||
/* Is this name a vdev in our pools? */
|
/* Is this name a vdev in our pools? */
|
||||||
ret = for_each_pool(pool_count, &pool_name, B_TRUE, NULL,
|
ret = for_each_pool(pool_count, &pool_name, B_TRUE, NULL,
|
||||||
is_vdev, cb);
|
B_FALSE, is_vdev, cb);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
/* No match */
|
/* No match */
|
||||||
break;
|
break;
|
||||||
@ -4986,7 +4988,8 @@ is_pool_cb(zpool_handle_t *zhp, void *data)
|
|||||||
static int
|
static int
|
||||||
is_pool(char *name)
|
is_pool(char *name)
|
||||||
{
|
{
|
||||||
return (for_each_pool(0, NULL, B_TRUE, NULL, is_pool_cb, name));
|
return (for_each_pool(0, NULL, B_TRUE, NULL, B_FALSE, is_pool_cb,
|
||||||
|
name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Are all our argv[] strings pool names? If so return 1, 0 otherwise. */
|
/* Are all our argv[] strings pool names? If so return 1, 0 otherwise. */
|
||||||
@ -5438,7 +5441,7 @@ zpool_do_iostat(int argc, char **argv)
|
|||||||
* Construct the list of all interesting pools.
|
* Construct the list of all interesting pools.
|
||||||
*/
|
*/
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if ((list = pool_list_get(argc, argv, NULL, &ret)) == NULL)
|
if ((list = pool_list_get(argc, argv, NULL, parsable, &ret)) == NULL)
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
if (pool_list_count(list) == 0 && argc != 0) {
|
if (pool_list_count(list) == 0 && argc != 0) {
|
||||||
@ -6112,7 +6115,7 @@ zpool_do_list(int argc, char **argv)
|
|||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if ((list = pool_list_get(argc, argv, &cb.cb_proplist,
|
if ((list = pool_list_get(argc, argv, &cb.cb_proplist,
|
||||||
&ret)) == NULL)
|
cb.cb_literal, &ret)) == NULL)
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
if (pool_list_count(list) == 0)
|
if (pool_list_count(list) == 0)
|
||||||
@ -6864,7 +6867,7 @@ zpool_do_reopen(int argc, char **argv)
|
|||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
/* if argc == 0 we will execute zpool_reopen_one on all pools */
|
/* if argc == 0 we will execute zpool_reopen_one on all pools */
|
||||||
ret = for_each_pool(argc, argv, B_TRUE, NULL, zpool_reopen_one,
|
ret = for_each_pool(argc, argv, B_TRUE, NULL, B_FALSE, zpool_reopen_one,
|
||||||
&scrub_restart);
|
&scrub_restart);
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
@ -6994,12 +6997,13 @@ zpool_do_scrub(int argc, char **argv)
|
|||||||
usage(B_FALSE);
|
usage(B_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
error = for_each_pool(argc, argv, B_TRUE, NULL, scrub_callback, &cb);
|
error = for_each_pool(argc, argv, B_TRUE, NULL, B_FALSE,
|
||||||
|
scrub_callback, &cb);
|
||||||
|
|
||||||
if (wait && !error) {
|
if (wait && !error) {
|
||||||
zpool_wait_activity_t act = ZPOOL_WAIT_SCRUB;
|
zpool_wait_activity_t act = ZPOOL_WAIT_SCRUB;
|
||||||
error = for_each_pool(argc, argv, B_TRUE, NULL, wait_callback,
|
error = for_each_pool(argc, argv, B_TRUE, NULL, B_FALSE,
|
||||||
&act);
|
wait_callback, &act);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (error);
|
return (error);
|
||||||
@ -7037,7 +7041,8 @@ zpool_do_resilver(int argc, char **argv)
|
|||||||
usage(B_FALSE);
|
usage(B_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (for_each_pool(argc, argv, B_TRUE, NULL, scrub_callback, &cb));
|
return (for_each_pool(argc, argv, B_TRUE, NULL, B_FALSE,
|
||||||
|
scrub_callback, &cb));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -8431,7 +8436,7 @@ zpool_do_status(int argc, char **argv)
|
|||||||
cb.vcdl = all_pools_for_each_vdev_run(argc, argv, cmd,
|
cb.vcdl = all_pools_for_each_vdev_run(argc, argv, cmd,
|
||||||
NULL, NULL, 0, 0);
|
NULL, NULL, 0, 0);
|
||||||
|
|
||||||
ret = for_each_pool(argc, argv, B_TRUE, NULL,
|
ret = for_each_pool(argc, argv, B_TRUE, NULL, cb.cb_literal,
|
||||||
status_callback, &cb);
|
status_callback, &cb);
|
||||||
|
|
||||||
if (cb.vcdl != NULL)
|
if (cb.vcdl != NULL)
|
||||||
@ -8950,7 +8955,7 @@ zpool_do_upgrade(int argc, char **argv)
|
|||||||
(void) printf(gettext("\n"));
|
(void) printf(gettext("\n"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = for_each_pool(argc, argv, B_FALSE, NULL,
|
ret = for_each_pool(argc, argv, B_FALSE, NULL, B_FALSE,
|
||||||
upgrade_one, &cb);
|
upgrade_one, &cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9139,7 +9144,7 @@ zpool_do_history(int argc, char **argv)
|
|||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
ret = for_each_pool(argc, argv, B_FALSE, NULL, get_history_one,
|
ret = for_each_pool(argc, argv, B_FALSE, NULL, B_FALSE, get_history_one,
|
||||||
&cbdata);
|
&cbdata);
|
||||||
|
|
||||||
if (argc == 0 && cbdata.first == B_TRUE) {
|
if (argc == 0 && cbdata.first == B_TRUE) {
|
||||||
@ -9702,7 +9707,7 @@ zpool_do_get(int argc, char **argv)
|
|||||||
cb.cb_proplist = &fake_name;
|
cb.cb_proplist = &fake_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = for_each_pool(argc, argv, B_TRUE, &cb.cb_proplist,
|
ret = for_each_pool(argc, argv, B_TRUE, &cb.cb_proplist, cb.cb_literal,
|
||||||
get_callback, &cb);
|
get_callback, &cb);
|
||||||
|
|
||||||
if (cb.cb_proplist == &fake_name)
|
if (cb.cb_proplist == &fake_name)
|
||||||
@ -9772,7 +9777,7 @@ zpool_do_set(int argc, char **argv)
|
|||||||
*(cb.cb_value) = '\0';
|
*(cb.cb_value) = '\0';
|
||||||
cb.cb_value++;
|
cb.cb_value++;
|
||||||
|
|
||||||
error = for_each_pool(argc - 2, argv + 2, B_TRUE, NULL,
|
error = for_each_pool(argc - 2, argv + 2, B_TRUE, NULL, B_FALSE,
|
||||||
set_callback, &cb);
|
set_callback, &cb);
|
||||||
|
|
||||||
return (error);
|
return (error);
|
||||||
|
@ -64,7 +64,7 @@ nvlist_t *split_mirror_vdev(zpool_handle_t *zhp, char *newname,
|
|||||||
* Pool list functions
|
* Pool list functions
|
||||||
*/
|
*/
|
||||||
int for_each_pool(int, char **, boolean_t unavail, zprop_list_t **,
|
int for_each_pool(int, char **, boolean_t unavail, zprop_list_t **,
|
||||||
zpool_iter_f, void *);
|
boolean_t, zpool_iter_f, void *);
|
||||||
|
|
||||||
/* Vdev list functions */
|
/* Vdev list functions */
|
||||||
typedef int (*pool_vdev_iter_f)(zpool_handle_t *, nvlist_t *, void *);
|
typedef int (*pool_vdev_iter_f)(zpool_handle_t *, nvlist_t *, void *);
|
||||||
@ -72,7 +72,7 @@ int for_each_vdev(zpool_handle_t *zhp, pool_vdev_iter_f func, void *data);
|
|||||||
|
|
||||||
typedef struct zpool_list zpool_list_t;
|
typedef struct zpool_list zpool_list_t;
|
||||||
|
|
||||||
zpool_list_t *pool_list_get(int, char **, zprop_list_t **, int *);
|
zpool_list_t *pool_list_get(int, char **, zprop_list_t **, boolean_t, int *);
|
||||||
void pool_list_update(zpool_list_t *);
|
void pool_list_update(zpool_list_t *);
|
||||||
int pool_list_iter(zpool_list_t *, int unavail, zpool_iter_f, void *);
|
int pool_list_iter(zpool_list_t *, int unavail, zpool_iter_f, void *);
|
||||||
void pool_list_free(zpool_list_t *);
|
void pool_list_free(zpool_list_t *);
|
||||||
|
@ -557,7 +557,7 @@ extern void zfs_prune_proplist(zfs_handle_t *, uint8_t *);
|
|||||||
/*
|
/*
|
||||||
* zpool property management
|
* zpool property management
|
||||||
*/
|
*/
|
||||||
extern int zpool_expand_proplist(zpool_handle_t *, zprop_list_t **);
|
extern int zpool_expand_proplist(zpool_handle_t *, zprop_list_t **, boolean_t);
|
||||||
extern int zpool_prop_get_feature(zpool_handle_t *, const char *, char *,
|
extern int zpool_prop_get_feature(zpool_handle_t *, const char *, char *,
|
||||||
size_t);
|
size_t);
|
||||||
extern const char *zpool_prop_default_string(zpool_prop_t);
|
extern const char *zpool_prop_default_string(zpool_prop_t);
|
||||||
|
@ -784,7 +784,8 @@ zpool_set_prop(zpool_handle_t *zhp, const char *propname, const char *propval)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
zpool_expand_proplist(zpool_handle_t *zhp, zprop_list_t **plp)
|
zpool_expand_proplist(zpool_handle_t *zhp, zprop_list_t **plp,
|
||||||
|
boolean_t literal)
|
||||||
{
|
{
|
||||||
libzfs_handle_t *hdl = zhp->zpool_hdl;
|
libzfs_handle_t *hdl = zhp->zpool_hdl;
|
||||||
zprop_list_t *entry;
|
zprop_list_t *entry;
|
||||||
@ -863,13 +864,12 @@ zpool_expand_proplist(zpool_handle_t *zhp, zprop_list_t **plp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (entry = *plp; entry != NULL; entry = entry->pl_next) {
|
for (entry = *plp; entry != NULL; entry = entry->pl_next) {
|
||||||
|
if (entry->pl_fixed && !literal)
|
||||||
if (entry->pl_fixed)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (entry->pl_prop != ZPROP_INVAL &&
|
if (entry->pl_prop != ZPROP_INVAL &&
|
||||||
zpool_get_prop(zhp, entry->pl_prop, buf, sizeof (buf),
|
zpool_get_prop(zhp, entry->pl_prop, buf, sizeof (buf),
|
||||||
NULL, B_FALSE) == 0) {
|
NULL, literal) == 0) {
|
||||||
if (strlen(buf) > entry->pl_width)
|
if (strlen(buf) > entry->pl_width)
|
||||||
entry->pl_width = strlen(buf);
|
entry->pl_width = strlen(buf);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user