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);
|
||||
}
|
||||
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
* provide a more meaningful error message. We place a more useful message in
|
||||
|
|
Loading…
Reference in New Issue