Recreate minors when renaming zvols

When a zvol with snapshots is renamed the device files under
/dev/zvol/ are not renamed.  This patch resolves the problem
by destroying and recreating the minors with the new name so
the links can be recreated bu udev.

Original-patch-by: Suman Chakravartula <schakrava@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #408
This commit is contained in:
Brian Behlendorf 2012-11-19 13:48:06 -08:00
parent 33364b15d3
commit 0e20a31b4b

View File

@ -291,22 +291,30 @@ changelist_rename(prop_changelist_t *clp, const char *src, const char *dst)
for (cn = uu_list_first(clp->cl_list); cn != NULL;
cn = uu_list_next(clp->cl_list, cn)) {
zfs_handle_t *hdl;
hdl = cn->cn_handle;
/*
* Do not rename a clone that's not in the source hierarchy.
*/
if (!isa_child_of(cn->cn_handle->zfs_name, src))
if (!isa_child_of(hdl->zfs_name, src))
continue;
/*
* Destroy the previous mountpoint if needed.
*/
remove_mountpoint(cn->cn_handle);
remove_mountpoint(hdl);
(void) strlcpy(newname, dst, sizeof (newname));
(void) strcat(newname, cn->cn_handle->zfs_name + strlen(src));
(void) strcat(newname, hdl->zfs_name + strlen(src));
(void) strlcpy(cn->cn_handle->zfs_name, newname,
sizeof (cn->cn_handle->zfs_name));
if (ZFS_IS_VOLUME(hdl)) {
(void) zvol_remove_link(hdl->zfs_hdl, hdl->zfs_name);
(void) zvol_create_link(hdl->zfs_hdl, newname);
}
(void) strlcpy(hdl->zfs_name, newname, sizeof (hdl->zfs_name));
}
}