Skip to content

Commit

Permalink
Recreate minors when renaming zvols
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes openzfs#408
  • Loading branch information
behlendorf authored and unya committed Dec 13, 2013
1 parent f3fbbb4 commit f5ec517
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions lib/libzfs/libzfs_changelist.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));

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(cn->cn_handle->zfs_name, newname,
sizeof (cn->cn_handle->zfs_name));
(void) strlcpy(hdl->zfs_name, newname, sizeof (hdl->zfs_name));
}
}

Expand Down

0 comments on commit f5ec517

Please sign in to comment.