Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/cmd/zpool/zpool_util.h
48288 views
1
// SPDX-License-Identifier: CDDL-1.0
2
/*
3
* CDDL HEADER START
4
*
5
* The contents of this file are subject to the terms of the
6
* Common Development and Distribution License (the "License").
7
* You may not use this file except in compliance with the License.
8
*
9
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10
* or https://opensource.org/licenses/CDDL-1.0.
11
* See the License for the specific language governing permissions
12
* and limitations under the License.
13
*
14
* When distributing Covered Code, include this CDDL HEADER in each
15
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16
* If applicable, add the following below this CDDL HEADER, with the
17
* fields enclosed by brackets "[]" replaced with your own identifying
18
* information: Portions Copyright [yyyy] [name of copyright owner]
19
*
20
* CDDL HEADER END
21
*/
22
/*
23
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
24
*/
25
26
#ifndef ZPOOL_UTIL_H
27
#define ZPOOL_UTIL_H
28
29
#include <libnvpair.h>
30
#include <libzfs.h>
31
#include <libzutil.h>
32
33
#ifdef __cplusplus
34
extern "C" {
35
#endif
36
37
/* Path to scripts you can run with "zpool status/iostat -c" */
38
#define ZPOOL_SCRIPTS_DIR SYSCONFDIR"/zfs/zpool.d"
39
40
/*
41
* Basic utility functions
42
*/
43
void *safe_malloc(size_t);
44
void *safe_realloc(void *, size_t);
45
void zpool_no_memory(void);
46
uint_t num_logs(nvlist_t *nv);
47
uint64_t array64_max(uint64_t array[], unsigned int len);
48
int highbit64(uint64_t i);
49
int lowbit64(uint64_t i);
50
51
/*
52
* Misc utility functions
53
*/
54
char *zpool_get_cmd_search_path(void);
55
56
/*
57
* Virtual device functions
58
*/
59
60
nvlist_t *make_root_vdev(zpool_handle_t *zhp, nvlist_t *props, int force,
61
int check_rep, boolean_t replacing, boolean_t dryrun, int argc,
62
char **argv);
63
nvlist_t *split_mirror_vdev(zpool_handle_t *zhp, char *newname,
64
nvlist_t *props, splitflags_t flags, int argc, char **argv);
65
66
/*
67
* Pool list functions
68
*/
69
int for_each_pool(int, char **, boolean_t unavail, zprop_list_t **, zfs_type_t,
70
boolean_t, zpool_iter_f, void *);
71
72
/* Vdev list functions */
73
int for_each_vdev(zpool_handle_t *zhp, pool_vdev_iter_f func, void *data);
74
75
typedef struct zpool_list zpool_list_t;
76
77
zpool_list_t *pool_list_get(int, char **, zprop_list_t **, zfs_type_t,
78
boolean_t, int *);
79
int pool_list_refresh(zpool_list_t *);
80
int pool_list_iter(zpool_list_t *, int unavail, zpool_iter_f, void *);
81
void pool_list_free(zpool_list_t *);
82
int pool_list_count(zpool_list_t *);
83
84
extern libzfs_handle_t *g_zfs;
85
86
87
typedef struct vdev_cmd_data
88
{
89
char **lines; /* Array of lines of output, minus the column name */
90
int lines_cnt; /* Number of lines in the array */
91
92
char **cols; /* Array of column names */
93
int cols_cnt; /* Number of column names */
94
95
96
char *path; /* vdev path */
97
char *upath; /* vdev underlying path */
98
char *pool; /* Pool name */
99
char *cmd; /* backpointer to cmd */
100
char *vdev_enc_sysfs_path; /* enclosure sysfs path (if any) */
101
} vdev_cmd_data_t;
102
103
typedef struct vdev_cmd_data_list
104
{
105
char *cmd; /* Command to run */
106
unsigned int count; /* Number of vdev_cmd_data items (vdevs) */
107
108
/* fields used to select only certain vdevs, if requested */
109
libzfs_handle_t *g_zfs;
110
char **vdev_names;
111
int vdev_names_count;
112
int cb_name_flags;
113
114
vdev_cmd_data_t *data; /* Array of vdevs */
115
116
/* List of unique column names and widths */
117
char **uniq_cols;
118
int uniq_cols_cnt;
119
int *uniq_cols_width;
120
121
} vdev_cmd_data_list_t;
122
123
vdev_cmd_data_list_t *all_pools_for_each_vdev_run(int argc, char **argv,
124
char *cmd, libzfs_handle_t *g_zfs, char **vdev_names, int vdev_names_count,
125
int cb_name_flags);
126
127
void free_vdev_cmd_data_list(vdev_cmd_data_list_t *vcdl);
128
129
void free_vdev_cmd_data(vdev_cmd_data_t *data);
130
131
int vdev_run_cmd_simple(char *path, char *cmd);
132
133
int check_device(const char *path, boolean_t force,
134
boolean_t isspare, boolean_t iswholedisk);
135
boolean_t check_sector_size_database(char *path, int *sector_size);
136
void vdev_error(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
137
int check_file(const char *file, boolean_t force, boolean_t isspare);
138
void after_zpool_upgrade(zpool_handle_t *zhp);
139
int check_file_generic(const char *file, boolean_t force, boolean_t isspare);
140
141
int zpool_power(zpool_handle_t *zhp, char *vdev, boolean_t turn_on);
142
int zpool_power_current_state(zpool_handle_t *zhp, char *vdev);
143
144
#ifdef __cplusplus
145
}
146
#endif
147
148
#endif /* ZPOOL_UTIL_H */
149
150