[CRIU] Re: [PATCH cr 6/8] cr-dump: lock network before dump and unlock in case of errors

Pavel Emelyanov xemul at parallels.com
Fri Sep 14 07:23:24 EDT 2012


On 09/14/2012 02:25 PM, Andrey Vagin wrote:
> 
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
>  cr-dump.c |   39 ++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 38 insertions(+), 1 deletions(-)
> 
> diff --git a/cr-dump.c b/cr-dump.c
> index a41fab1..c508cb6 100644
> --- a/cr-dump.c
> +++ b/cr-dump.c
> @@ -1576,6 +1576,40 @@ err_cure_fdset:
>  	goto err;
>  }
>  
> +static int network_lock()
> +{
> +	pr_info("Lock network\n");
> +
> +	/* Each connection will be locked on dump */
> +	if  (!(opts.namespaces_flags & CLONE_NEWNET))
> +		return 0;
> +
> +	if (opts.lock_network == NULL)

At least pr_warning() is required here.

> +		return 0;
> +
> +	if (system(opts.lock_network))
> +		return -1;
> +
> +	return 0;
> +
> +}
> +
> +static void network_unlock()
> +{
> +	pr_info("Unlock network\n");
> +
> +	if  (!(opts.namespaces_flags & CLONE_NEWNET)) {
> +		tcp_unlock_all();
> +		return;
> +	}
> +
> +	if (opts.unlock_network == NULL)
> +		return;
> +
> +	if (system(opts.unlock_network))
> +		pr_err("Unlock of network failed\n");
> +}
> +
>  int cr_dump_tasks(pid_t pid, const struct cr_options *opts)
>  {
>  	struct pstree_item *item;
> @@ -1585,6 +1619,9 @@ int cr_dump_tasks(pid_t pid, const struct cr_options *opts)
>  	pr_info("Dumping processes (pid: %d)\n", pid);
>  	pr_info("========================================\n");
>  
> +	if (network_lock())
> +		goto err;
> +
>  	if (write_img_inventory())
>  		goto err;
>  
> @@ -1642,7 +1679,7 @@ err:
>  	 * don't, just close them silently.
>  	 */
>  	if (ret)
> -		tcp_unlock_all();
> +		network_unlock();
>  	pstree_switch_state(root_item,
>  			ret ? TASK_ALIVE : opts->final_state);
>  	free_pstree(root_item);



More information about the CRIU mailing list