Re: [PATCH 2/3] [RFC] Add c/r support for connected INET sockets (v3)
From: Oren Laadan <hidden>
Date: 2009-10-29 20:15:42
Dan Smith wrote:
This patch adds basic support for C/R of open INET sockets. I think that all the important bits of the TCP and ICSK socket structures is saved, but I think there is still some additional IPv6 stuff that needs to be handled. With this patch applied, the following script can be used to demonstrate the functionality: https://lists.linux-foundation.org/pipermail/containers/2009-October/021239.html It shows that this enables migration of a sendmail process with open connections from one machine to another without dropping. We probably need comments from the netdev people about the quality of sanity checking we do on the values in the ckpt_hdr_socket_inet structure on restart. Note that this still doesn't address lingering sockets yet. Changes in v3: - Prevent restart from allowing a bind on a <1024 port unless the user is granted that capability - Add some sanity checking in the inet_precheck() function to make sure the values read from the checkpoint image are within acceptable ranges - Check the result of sock_restore_header_info() and fail if needed Changes in v2: - Restore saddr, rcv_saddr, daddr, sport, and dport from the sockaddr structure instead of saving them separately - Fix 'sock' naming in sock_cptrst() - Don't take the queue lock before skb_queue_tail() since it is done for us - Allow "listen only" restore behavior if RESTART_SOCK_LISTENONLY flag is specified on sys_restart() - Pull the implementation of the list of listening sockets back into this patch - Fix dangling printk - Add some comments around the parent/child restore logic Cc: netdev@vger.kernel.org Cc: Oren Laadan <redacted> Cc: John Dykstra <redacted> Signed-off-by: Dan Smith <redacted> ---
This looks good: Acked-by: Oren Laadan <redacted> I still want to move this to right under the restart-specific fields: struct list_head listen_sockets;/* listening parent sockets */ Also, I'm looking for a better name for RESTART_SOCK_LISTENONLY (it isn't listen only, udp sockets are preserved...), something that will convey the idea that we drop old connections, perhaps: RESTART_NET_RESET RESTART_CONN_RESET RESTART_DROPCONN ? Oren.