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:
parent
33364b15d3
commit
0e20a31b4b
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user