libzfs_pool.c revision 55434c770c89aa1b84474f2559a106803511aba0
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * CDDL HEADER START
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * The contents of this file are subject to the terms of the
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * Common Development and Distribution License (the "License").
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * You may not use this file except in compliance with the License.
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * See the License for the specific language governing permissions
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * and limitations under the License.
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * When distributing Covered Code, include this CDDL HEADER in each
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * If applicable, add the following below this CDDL HEADER, with the
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * fields enclosed by brackets "[]" replaced with your own identifying
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * information: Portions Copyright [yyyy] [name of copyright owner]
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * CDDL HEADER END
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * Use is subject to license terms.
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek#pragma ident "%Z%%M% %I% %E% SMI"
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinek * Validate the given pool name, optionally putting an extended error message in
3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41Jerry Jelinekzpool_name_valid(libzfs_handle_t *hdl, boolean_t isopen, const char *pool)
return (B_FALSE);
if (ret != 0) {
switch (why) {
case NAME_ERR_TOOLONG:
case NAME_ERR_INVALCHAR:
case NAME_ERR_NOLETTER:
case NAME_ERR_RESERVED:
case NAME_ERR_DISKLIKE:
case NAME_ERR_LEADING_SLASH:
case NAME_ERR_EMPTY_COMPONENT:
case NAME_ERR_TRAILING_SLASH:
case NAME_ERR_MULTIPLE_AT:
return (B_FALSE);
return (B_TRUE);
char *health;
&nvroot) == 0);
case VDEV_STATE_CLOSED:
case VDEV_STATE_CANT_OPEN:
case VDEV_STATE_OFFLINE:
case VDEV_STATE_DEGRADED:
case VDEV_STATE_HEALTHY:
abort();
pool);
return (NULL);
return (NULL);
return (NULL);
if (missing) {
pool);
return (NULL);
return (zhp);
if (missing) {
return (NULL);
return (NULL);
return (zhp);
&guid) == 0);
return (guid);
&version) == 0);
return (version);
&nvroot) == 0);
&nvroot) == 0);
const char *altroot)
switch (errno) {
case EBUSY:
case EOVERFLOW:
case ENOSPC:
if (zfp)
if (zfp) {
int ret;
switch (errno) {
case EBUSY:
case EOVERFLOW:
case ENOTSUP:
ret = 0;
return (ret);
const char *altroot)
char *thename;
char *origname;
int ret;
&origname) == 0);
newname));
altroot));
ret = 0;
thename);
switch (errno) {
case ENOTSUP:
case EINVAL:
return (ret);
static nvlist_t *
char *path;
return (nv);
&wholedisk);
if (wholedisk) {
return (nv);
return (nv);
return (NULL);
for (c = 0; c < children; c++)
return (ret);
for (c = 0; c < children; c++) {
return (ret);
return (NULL);
nvlist_t *
const char *search;
char *end;
&nvroot) == 0);
static boolean_t
&nvroot) == 0);
for (i = 0; i < nspares; i++) {
return (B_TRUE);
return (B_FALSE);
switch (errno) {
case EBUSY:
static boolean_t
char *type;
&children) == 0) {
&type) == 0);
return (B_TRUE);
for (c = 0; c < children; c++)
return (B_TRUE);
return (B_FALSE);
int ret;
char *path;
if (replacing)
if (avail_spare)
if (replacing &&
if (replacing &&
if (ret == 0)
switch (errno) {
case ENOTSUP:
if (replacing)
case EINVAL:
case EBUSY:
new_disk);
case EOVERFLOW:
case EDOM:
case ENAMETOOLONG:
if (avail_spare)
switch (errno) {
case ENOTSUP:
case EBUSY:
if (!avail_spare) {
if (path)
path);
if (path) {
if (avail_spare)
void *data)
curr = 0;
while (curr >= 0) {
goto err;
goto err;
goto err;
goto err;
curr++;
curr--;
return (ret);
err:
typedef struct zvol_cb {
} zvol_cb_t;
int ret;
return (ret);
int ret;
return (ret);
char *minor;
char *path;
int ret;
return (NULL);
if (ret != 0)
return (NULL);
return (NULL);
return (path);
int fd;
return (NULL);
return (ret);
&value) == 0) {
&value) == 0);
char *newpath;
&path) == 0);
if (newdevid)
return (NULL);
return (tmp);
&value) == 0);
zbookmark_compare(const void *a, const void *b)
&count) == 0);
&zc) != 0) {
for (i = 0; i < count; i++) {
sizeof (zbookmark_t)) == 0)
goto nomem;
goto nomem;
goto nomem;
goto nomem;
char *dspath;
for (i = 0; i < argc; i++) {
switch (errno) {
case EPERM:
case ENOENT:
return (ENOMEM);
(*numrecords)++;
int err, i;
if (!bytes_read)
if (!err) {
for (i = 0; i < numrecords; i++)
return (err);
if (dsobj == 0) {
&zc) == 0) {
if (mounted) {