[CRIU] [PATCH v2] Add pre-dump and pre-restore action scripts

Pavel Emelyanov xemul at parallels.com
Fri Oct 9 08:23:54 PDT 2015


On 10/08/2015 04:21 PM, Matthew Krafczyk wrote:
> This allows the user to perform actions before dumping or restoration
> occurs.
> 
> Signed-off-by: Matthew Krafczyk <krafczyk.matthew at gmail.com>

Applied, thanks.

> ---
>  Documentation/criu.txt   |  6 ++++++
>  action-scripts.c         |  2 ++
>  cr-dump.c                |  6 ++++++
>  cr-restore.c             |  8 +++++++-
>  include/action-scripts.h | 12 +++++++-----
>  5 files changed, 28 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/criu.txt b/Documentation/criu.txt
> index 84de897..652706e 100644
> --- a/Documentation/criu.txt
> +++ b/Documentation/criu.txt
> @@ -76,9 +76,15 @@ The following levels are available:
>      Add an external action script.
>      The environment variable *CRTOOLS_SCRIPT_ACTION* contains one of the
>      actions:
> +        * *pre-dump*
> +            run an action prior to beginning a *dump*
> +
>          * *post-dump*
>              run an action upon *dump* completion;
>  
> +        * *pre-restore*
> +            run an action prior to beginning a *restore*
> +
>          * *post-restore*
>              run an action upon *restore* completion;
>  
> diff --git a/action-scripts.c b/action-scripts.c
> index 4c39a25..e37bafd 100644
> --- a/action-scripts.c
> +++ b/action-scripts.c
> @@ -12,7 +12,9 @@
>  #include "action-scripts.h"
>  
>  static const char *action_names[ACT_MAX] = {
> +	[ ACT_PRE_DUMP ]	= "pre-dump",
>  	[ ACT_POST_DUMP ]	= "post-dump",
> +	[ ACT_PRE_RESTORE ]	= "pre-restore",
>  	[ ACT_POST_RESTORE ]	= "post-restore",
>  	[ ACT_NET_LOCK ]	= "network-lock",
>  	[ ACT_NET_UNLOCK ]	= "network-unlock",
> diff --git a/cr-dump.c b/cr-dump.c
> index 3af077b..16b45b6 100644
> --- a/cr-dump.c
> +++ b/cr-dump.c
> @@ -1442,12 +1442,18 @@ int cr_dump_tasks(pid_t pid)
>  {
>  	struct pstree_item *item;
>  	int post_dump_ret = 0;
> +	int pre_dump_ret = 0;
>  	int ret = -1;
>  
>  	pr_info("========================================\n");
>  	pr_info("Dumping processes (pid: %d)\n", pid);
>  	pr_info("========================================\n");
>  
> +	pre_dump_ret = run_scripts(ACT_PRE_DUMP);
> +	if (pre_dump_ret != 0) {
> +		pr_err("Pre dump script failed with %d!\n", post_dump_ret);
> +		goto err;
> +	}
>  	if (init_stats(DUMP_STATS))
>  		goto err;
>  
> diff --git a/cr-restore.c b/cr-restore.c
> index 33205e4..1708fc4 100644
> --- a/cr-restore.c
> +++ b/cr-restore.c
> @@ -1736,6 +1736,12 @@ static int restore_root_task(struct pstree_item *init)
>  	enum trace_flags flag = TRACE_ALL;
>  	int ret, fd, mnt_ns_fd = -1;
>  
> +	ret = run_scripts(ACT_PRE_RESTORE);
> +	if (ret != 0) {
> +		pr_err("Aborting restore due to pre-restore script ret code %d\n", ret);
> +		return -1;
> +	}
> +
>  	fd = open("/proc", O_DIRECTORY | O_RDONLY);
>  	if (fd < 0) {
>  		pr_perror("Unable to open /proc");
> @@ -1870,7 +1876,7 @@ static int restore_root_task(struct pstree_item *init)
>  
>  	ret = run_scripts(ACT_POST_RESTORE);
>  	if (ret != 0) {
> -		pr_err("Aborting restore due to script ret code %d\n", ret);
> +		pr_err("Aborting restore due to post-restore script ret code %d\n", ret);
>  		timing_stop(TIME_RESTORE);
>  		write_stats(RESTORE_STATS);
>  		goto out_kill;
> diff --git a/include/action-scripts.h b/include/action-scripts.h
> index 684221f..52f7531 100644
> --- a/include/action-scripts.h
> +++ b/include/action-scripts.h
> @@ -10,11 +10,13 @@ struct script {
>  #define SCRIPT_RPC_NOTIFY	(char *)0x1
>  
>  enum script_actions {
> -	ACT_POST_DUMP		= 0,
> -	ACT_POST_RESTORE	= 1,
> -	ACT_NET_LOCK		= 2,
> -	ACT_NET_UNLOCK		= 3,
> -	ACT_SETUP_NS		= 4,
> +	ACT_PRE_DUMP		= 0,
> +	ACT_POST_DUMP		= 1,
> +	ACT_PRE_RESTORE		= 2,
> +	ACT_POST_RESTORE	= 3,
> +	ACT_NET_LOCK		= 4,
> +	ACT_NET_UNLOCK		= 5,
> +	ACT_SETUP_NS		= 6,
>  
>  	ACT_MAX
>  };
> 



More information about the CRIU mailing list