Merge commit 'refs/top-bases/linux-zfs-branch' into linux-zfs-branch
This commit is contained in:
commit
a278d2bed4
|
@ -2224,34 +2224,6 @@ zpool_do_list(int argc, char **argv)
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static nvlist_t *
|
|
||||||
zpool_get_vdev_by_name(nvlist_t *nv, char *name)
|
|
||||||
{
|
|
||||||
nvlist_t **child;
|
|
||||||
uint_t c, children;
|
|
||||||
nvlist_t *match;
|
|
||||||
char *path;
|
|
||||||
size_t droot_len = strlen(DISK_ROOT) + 1;
|
|
||||||
|
|
||||||
if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
|
|
||||||
&child, &children) != 0) {
|
|
||||||
verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0);
|
|
||||||
if (strncmp(name, DISK_ROOT "/", droot_len) == 0)
|
|
||||||
name += droot_len;
|
|
||||||
if (strncmp(path, DISK_ROOT "/", droot_len) == 0)
|
|
||||||
path += droot_len;
|
|
||||||
if (strcmp(name, path) == 0)
|
|
||||||
return (nv);
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (c = 0; c < children; c++)
|
|
||||||
if ((match = zpool_get_vdev_by_name(child[c], name)) != NULL)
|
|
||||||
return (match);
|
|
||||||
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
zpool_do_attach_or_replace(int argc, char **argv, int replacing)
|
zpool_do_attach_or_replace(int argc, char **argv, int replacing)
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,49 +78,6 @@ zfs_type_to_name(zfs_type_t type)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Given a path and mask of ZFS types, return a string describing this dataset.
|
|
||||||
* This is used when we fail to open a dataset and we cannot get an exact type.
|
|
||||||
* We guess what the type would have been based on the path and the mask of
|
|
||||||
* acceptable types.
|
|
||||||
*/
|
|
||||||
static const char *
|
|
||||||
path_to_str(const char *path, int types)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* When given a single type, always report the exact type.
|
|
||||||
*/
|
|
||||||
if (types == ZFS_TYPE_SNAPSHOT)
|
|
||||||
return (dgettext(TEXT_DOMAIN, "snapshot"));
|
|
||||||
if (types == ZFS_TYPE_FILESYSTEM)
|
|
||||||
return (dgettext(TEXT_DOMAIN, "filesystem"));
|
|
||||||
if (types == ZFS_TYPE_VOLUME)
|
|
||||||
return (dgettext(TEXT_DOMAIN, "volume"));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The user is requesting more than one type of dataset. If this is the
|
|
||||||
* case, consult the path itself. If we're looking for a snapshot, and
|
|
||||||
* a '@' is found, then report it as "snapshot". Otherwise, remove the
|
|
||||||
* snapshot attribute and try again.
|
|
||||||
*/
|
|
||||||
if (types & ZFS_TYPE_SNAPSHOT) {
|
|
||||||
if (strchr(path, '@') != NULL)
|
|
||||||
return (dgettext(TEXT_DOMAIN, "snapshot"));
|
|
||||||
return (path_to_str(path, types & ~ZFS_TYPE_SNAPSHOT));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The user has requested either filesystems or volumes.
|
|
||||||
* We have no way of knowing a priori what type this would be, so always
|
|
||||||
* report it as "filesystem" or "volume", our two primitive types.
|
|
||||||
*/
|
|
||||||
if (types & ZFS_TYPE_FILESYSTEM)
|
|
||||||
return (dgettext(TEXT_DOMAIN, "filesystem"));
|
|
||||||
|
|
||||||
assert(types & ZFS_TYPE_VOLUME);
|
|
||||||
return (dgettext(TEXT_DOMAIN, "volume"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Validate a ZFS path. This is used even before trying to open the dataset, to
|
* Validate a ZFS path. This is used even before trying to open the dataset, to
|
||||||
* provide a more meaningful error message. We place a more useful message in
|
* provide a more meaningful error message. We place a more useful message in
|
||||||
|
|
Loading…
Reference in New Issue