Skip to content

Commit

Permalink
5118 When verifying or creating a storage pool, error messages only s…
Browse files Browse the repository at this point in the history
…how one device

Reviewed by: Adam Leventhal <[email protected]>
Reviewed by: Dan Kimmel <[email protected]>
Reviewed by: Matt Ahrens <[email protected]>
Reviewed by: Boris Protopopov <[email protected]>
Approved by: Dan McDonald <[email protected]>
  • Loading branch information
Basil Crow authored and Christopher Siden committed Sep 5, 2014
1 parent 3339867 commit 75fbdf9
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions usr/src/cmd/zpool/zpool_vdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013 by Delphix. All rights reserved.
*/

/*
Expand Down Expand Up @@ -1027,8 +1028,8 @@ is_spare(nvlist_t *config, const char *path)
* Go through and find any devices that are in use. We rely on libdiskmgt for
* the majority of this task.
*/
static int
check_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
static boolean_t
is_device_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
boolean_t replacing, boolean_t isspare)
{
nvlist_t **child;
Expand All @@ -1037,6 +1038,7 @@ check_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
int ret;
char buf[MAXPATHLEN];
uint64_t wholedisk;
boolean_t anyinuse = B_FALSE;

verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) == 0);

Expand All @@ -1059,38 +1061,37 @@ check_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
(void) strlcpy(buf, path, sizeof (buf));

if (is_spare(config, buf))
return (0);
return (B_FALSE);
}

if (strcmp(type, VDEV_TYPE_DISK) == 0)
ret = check_device(path, force, isspare);

if (strcmp(type, VDEV_TYPE_FILE) == 0)
else if (strcmp(type, VDEV_TYPE_FILE) == 0)
ret = check_file(path, force, isspare);

return (ret);
return (ret != 0);
}

for (c = 0; c < children; c++)
if ((ret = check_in_use(config, child[c], force,
replacing, B_FALSE)) != 0)
return (ret);
if (is_device_in_use(config, child[c], force, replacing,
B_FALSE))
anyinuse = B_TRUE;

if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_SPARES,
&child, &children) == 0)
for (c = 0; c < children; c++)
if ((ret = check_in_use(config, child[c], force,
replacing, B_TRUE)) != 0)
return (ret);
if (is_device_in_use(config, child[c], force, replacing,
B_TRUE))
anyinuse = B_TRUE;

if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE,
&child, &children) == 0)
for (c = 0; c < children; c++)
if ((ret = check_in_use(config, child[c], force,
replacing, B_FALSE)) != 0)
return (ret);
if (is_device_in_use(config, child[c], force, replacing,
B_FALSE))
anyinuse = B_TRUE;

return (0);
return (anyinuse);
}

static const char *
Expand Down Expand Up @@ -1442,7 +1443,7 @@ make_root_vdev(zpool_handle_t *zhp, int force, int check_rep,
* uses (such as a dedicated dump device) that even '-f' cannot
* override.
*/
if (check_in_use(poolconfig, newroot, force, replacing, B_FALSE) != 0) {
if (is_device_in_use(poolconfig, newroot, force, replacing, B_FALSE)) {
nvlist_free(newroot);
return (NULL);
}
Expand Down

0 comments on commit 75fbdf9

Please sign in to comment.