mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Add zfs.sync.snapshot_rename
Only the single snapshot rename is provided. The recursive or more complex rename can be scripted. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: George Melikov <mail@gmelikov.ru> Signed-off-by: Andriy Gapon <avg@FreeBSD.org> Closes #13802
This commit is contained in:
@@ -2915,14 +2915,6 @@ dsl_dataset_modified_since_snap(dsl_dataset_t *ds, dsl_dataset_t *snap)
|
||||
return (B_FALSE);
|
||||
}
|
||||
|
||||
typedef struct dsl_dataset_rename_snapshot_arg {
|
||||
const char *ddrsa_fsname;
|
||||
const char *ddrsa_oldsnapname;
|
||||
const char *ddrsa_newsnapname;
|
||||
boolean_t ddrsa_recursive;
|
||||
dmu_tx_t *ddrsa_tx;
|
||||
} dsl_dataset_rename_snapshot_arg_t;
|
||||
|
||||
static int
|
||||
dsl_dataset_rename_snapshot_check_impl(dsl_pool_t *dp,
|
||||
dsl_dataset_t *hds, void *arg)
|
||||
@@ -2953,7 +2945,7 @@ dsl_dataset_rename_snapshot_check_impl(dsl_pool_t *dp,
|
||||
return (error);
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
dsl_dataset_rename_snapshot_check(void *arg, dmu_tx_t *tx)
|
||||
{
|
||||
dsl_dataset_rename_snapshot_arg_t *ddrsa = arg;
|
||||
@@ -3015,7 +3007,7 @@ dsl_dataset_rename_snapshot_sync_impl(dsl_pool_t *dp,
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
dsl_dataset_rename_snapshot_sync(void *arg, dmu_tx_t *tx)
|
||||
{
|
||||
dsl_dataset_rename_snapshot_arg_t *ddrsa = arg;
|
||||
|
||||
@@ -302,6 +302,42 @@ zcp_synctask_snapshot(lua_State *state, boolean_t sync, nvlist_t *err_details)
|
||||
return (err);
|
||||
}
|
||||
|
||||
static int zcp_synctask_rename_snapshot(lua_State *, boolean_t, nvlist_t *);
|
||||
static const zcp_synctask_info_t zcp_synctask_rename_snapshot_info = {
|
||||
.name = "rename_snapshot",
|
||||
.func = zcp_synctask_rename_snapshot,
|
||||
.pargs = {
|
||||
{.za_name = "filesystem | volume", .za_lua_type = LUA_TSTRING },
|
||||
{.za_name = "oldsnapname", .za_lua_type = LUA_TSTRING },
|
||||
{.za_name = "newsnapname", .za_lua_type = LUA_TSTRING },
|
||||
{NULL, 0}
|
||||
},
|
||||
.space_check = ZFS_SPACE_CHECK_RESERVED,
|
||||
.blocks_modified = 1
|
||||
};
|
||||
|
||||
static int
|
||||
zcp_synctask_rename_snapshot(lua_State *state, boolean_t sync,
|
||||
nvlist_t *err_details)
|
||||
{
|
||||
(void) err_details;
|
||||
int err;
|
||||
const char *fsname = lua_tostring(state, 1);
|
||||
const char *oldsnapname = lua_tostring(state, 2);
|
||||
const char *newsnapname = lua_tostring(state, 3);
|
||||
|
||||
struct dsl_dataset_rename_snapshot_arg ddrsa = { 0 };
|
||||
ddrsa.ddrsa_fsname = fsname;
|
||||
ddrsa.ddrsa_oldsnapname = oldsnapname;
|
||||
ddrsa.ddrsa_newsnapname = newsnapname;
|
||||
ddrsa.ddrsa_recursive = B_FALSE;
|
||||
|
||||
err = zcp_sync_task(state, dsl_dataset_rename_snapshot_check,
|
||||
dsl_dataset_rename_snapshot_sync, &ddrsa, sync, NULL);
|
||||
|
||||
return (err);
|
||||
}
|
||||
|
||||
static int zcp_synctask_inherit_prop(lua_State *, boolean_t,
|
||||
nvlist_t *err_details);
|
||||
static const zcp_synctask_info_t zcp_synctask_inherit_prop_info = {
|
||||
@@ -529,6 +565,7 @@ zcp_load_synctask_lib(lua_State *state, boolean_t sync)
|
||||
&zcp_synctask_promote_info,
|
||||
&zcp_synctask_rollback_info,
|
||||
&zcp_synctask_snapshot_info,
|
||||
&zcp_synctask_rename_snapshot_info,
|
||||
&zcp_synctask_inherit_prop_info,
|
||||
&zcp_synctask_bookmark_info,
|
||||
&zcp_synctask_set_prop_info,
|
||||
|
||||
Reference in New Issue
Block a user