From: Oren Laadan <orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
To: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org
Subject: Re: [PATCH 1/3] Make sockets proper objhash objects and use checkpoint_obj() on them (v2)
Date: Wed, 02 Sep 2009 20:32:22 -0400 [thread overview]
Message-ID: <4A9F0E96.70106@librato.com> (raw)
In-Reply-To: <1251915760-20118-2-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Dan Smith wrote:
> This changes the checkpoint/restart procedure for sockets a bit. The
> socket file header is now checkpointed separately from the socket itself,
> which allows us to checkpoint a socket without arriving at it from a
> file descriptor. Thus, most sockets will be checkpointed as a result
> of processing the file table, calling sock_file_checkpoint(fd), which
> in turn calls checkpoint_obj(socket).
>
> However, we may arrive at some sockets while checkpointing other objects,
> such as the other end of an AF_UNIX socket with buffers in flight. This
> patch just opens that door, which is utilized by the next patch.
>
> Changes in v2:
> - If we attempt to checkpoint an orphan socket, create a struct socket
> to adopt it for the purposes of the checkpoint
>
> Signed-off-by: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Nice. See comments inline.
> ---
> checkpoint/objhash.c | 2 +
> include/linux/checkpoint_hdr.h | 6 +-
> include/net/sock.h | 2 +
> net/checkpoint.c | 140 +++++++++++++++++++++++++++++++--------
> net/unix/checkpoint.c | 3 +-
> 5 files changed, 120 insertions(+), 33 deletions(-)
>
[...]
> -int sock_file_checkpoint(struct ckpt_ctx *ctx, struct file *file)
> +static int __do_sock_checkpoint(struct ckpt_ctx *ctx, struct sock *sk)
> {
> +static int do_sock_checkpoint(struct ckpt_ctx *ctx, struct sock *sk)
> +{
> + struct socket *sock;
> + int ret;
> +
> + if (sk->sk_socket)
> + return __do_sock_checkpoint(ctx, sk);
> +
I wonder if temporarily grafting the @sk is better than explicitly
testing for sk->sk_socket everywhere else ? (in some places, the test
already exists, so if we keep this approach, it should be removed).
As it is, it simplifies the code. However, how can we be certain that
grafting a dead socket doesn't break any assumptions elsewhere ?
For instance, unix_sock_destructor() will spit a warning if it finds
sk->sk_socket != NULL. There may be other places (per protocol ?).
The alternative is to always pass around an 'sk' instead of sometimes
a 'sock', and to skip parts of the checkpoint (and restart) entirely
for dead sockets.
[...]
Oren.
next prev parent reply other threads:[~2009-09-03 0:32 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-02 18:22 [RFC] Sockets as proper objects and buffers with owners Dan Smith
[not found] ` <1251915760-20118-1-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-02 18:22 ` [PATCH 1/3] Make sockets proper objhash objects and use checkpoint_obj() on them (v2) Dan Smith
[not found] ` <1251915760-20118-2-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-03 0:32 ` Oren Laadan [this message]
[not found] ` <4A9F0E96.70106-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-09-03 15:21 ` Dan Smith
2009-09-03 5:40 ` Serge E. Hallyn
[not found] ` <20090903054058.GA7189-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-03 14:03 ` Dan Smith
[not found] ` <87eiqoyvkz.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2009-09-03 14:43 ` Serge E. Hallyn
[not found] ` <20090903144341.GA13182-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-03 15:08 ` Dan Smith
2009-09-03 14:46 ` Oren Laadan
2009-09-02 18:22 ` [PATCH 2/3] Add post-file deferqueue Dan Smith
[not found] ` <1251915760-20118-3-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-03 0:04 ` Oren Laadan
[not found] ` <4A9F0804.7080704-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-09-03 15:19 ` Dan Smith
2009-09-02 18:22 ` [PATCH 3/3] [RFC] Track socket buffer owners Dan Smith
[not found] ` <1251915760-20118-4-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-03 1:52 ` Oren Laadan
[not found] ` <4A9F2158.4010405-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-09-03 15:24 ` Dan Smith
[not found] ` <87skf4xd9a.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2009-09-03 15:46 ` Oren Laadan
-- strict thread matches above, loose matches on Subject: below --
2009-09-09 15:05 Dan Smith
[not found] ` <1252508756-4278-1-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-09 15:05 ` [PATCH 1/3] Make sockets proper objhash objects and use checkpoint_obj() on them (v2) Dan Smith
[not found] ` <1252508756-4278-2-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-09 23:02 ` Oren Laadan
[not found] ` <4AA833F5.3040706-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-09-11 14:31 ` Dan Smith
[not found] ` <87d45xlfhz.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2009-09-11 19:46 ` Oren Laadan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A9F0E96.70106@librato.com \
--to=orenl-rdfvbdnroixbdgjk7y7tuq@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.