[CRIU] [PATCH v2 04/15] unix: Link all sockets in unix_sockets list
Pavel Emelyanov
xemul at virtuozzo.com
Mon May 30 04:38:58 PDT 2016
On 05/27/2016 04:06 PM, Kirill Tkhai wrote:
> List "unix_sockets" is used to link external sockets.
Dump-time. On restore time this list already contains all the sockets.
> Change this, to link all unix sockets there. To differ
> really external sockets in fix_external_unix_sockets(),
> we may check for socket's already_dumped value.
>
> This may be useful to traverse over all unix sockets
> in a namespace.
Dump-time.
Please, explain why do you need to traverse all unix sockets dump time.
> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> criu/sk-unix.c | 13 +++++--------
> 1 file changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/criu/sk-unix.c b/criu/sk-unix.c
> index 3363cea..40cb9db 100644
> --- a/criu/sk-unix.c
> +++ b/criu/sk-unix.c
> @@ -364,11 +364,7 @@ static int dump_one_unix_fd(int lfd, u32 id, const struct fd_parms *p)
> * until all sockets the program owns are processed.
> */
> if (!peer->sd.already_dumped) {
> - if (list_empty(&peer->list)) {
> - show_one_unix("Add a peer", peer);
> - list_add_tail(&peer->list, &unix_sockets);
> - }
> -
> + show_one_unix("Add a peer", peer);
> list_add(&sk->peer_node, &peer->peer_list);
> sk->fd = dup(lfd);
> if (sk->fd < 0) {
> @@ -464,7 +460,6 @@ static int dump_one_unix_fd(int lfd, u32 id, const struct fd_parms *p)
> if (list_empty(&sk->peer_node) && write_unix_entry(sk))
> return -1;
>
> - list_del_init(&sk->list);
> sk->sd.already_dumped = 1;
>
> while (!list_empty(&sk->peer_list)) {
> @@ -677,6 +672,7 @@ static int unix_collect_one(const struct unix_diag_msg *m,
> }
>
> sk_collect_one(m->udiag_ino, AF_UNIX, &d->sd);
> + list_add_tail(&d->list, &unix_sockets);
> show_one_unix("Collected", d);
>
> return 0;
> @@ -757,9 +753,10 @@ int fix_external_unix_sockets(void)
> FownEntry fown = FOWN_ENTRY__INIT;
> SkOptsEntry skopts = SK_OPTS_ENTRY__INIT;
>
> - show_one_unix("Dumping extern", sk);
> + if (sk->sd.already_dumped)
> + continue;
>
> - BUG_ON(sk->sd.already_dumped);
> + show_one_unix("Dumping extern", sk);
>
> fd_id_generate_special(NULL, &e.id);
> e.ino = sk->sd.ino;
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
> .
>
More information about the CRIU
mailing list