From afc61ba5629962c1075e23e4f39fe60d49c18222 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Fri, 20 Dec 2013 15:09:40 +0400 Subject: [PATCH] unux: postpone dumping sockets v2 Unix sockets are dumped, when a peer socket is found. We are going to dump external sockets with help plugins. For the we need to set the USK_CALLBACK flags in unix entry. Currently a socket is dumped immediately when it's transfered, but we can be sure that a socket is not external, only when we have its peer. v2: add comments in code Signed-off-by: Andrey Vagin Signed-off-by: Pavel Emelyanov --- sk-unix.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sk-unix.c b/sk-unix.c index 9fe3ef3fc..43974e369 100644 --- a/sk-unix.c +++ b/sk-unix.c @@ -324,7 +324,13 @@ dump: pr_info("Dumping unix socket at %d\n", p->fd); show_one_unix("Dumping", sk); - if (write_unix_entry(sk)) + /* + * Postpone writing the entry if a peer isn't found yet. + * It's required, because we may need to modify the entry. + * For example, if a socket is external and is dumped by + * a callback, the USK_CALLBACK flag must be set. + */ + if (list_empty(&sk->peer_node) && write_unix_entry(sk)) goto err; list_del_init(&sk->list); @@ -335,6 +341,9 @@ dump: psk = list_first_entry(&sk->peer_list, struct unix_sk_desc, peer_node); close_safe(&psk->fd); list_del_init(&psk->peer_node); + + if (write_unix_entry(psk)) + goto err; } return 0; @@ -559,6 +568,9 @@ int fix_external_unix_sockets(void) psk = list_first_entry(&sk->peer_list, struct unix_sk_desc, peer_node); close_safe(&psk->fd); list_del_init(&psk->peer_node); + + if (write_unix_entry(psk)) + goto err; } }