linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Darren Hart <dvhltc@us.ibm.com>
To: Oren Laadan <orenl@cs.columbia.edu>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	containers@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, Serge Hallyn <serue@us.ibm.com>,
	Matt Helsley <matthltc@us.ibm.com>,
	Pavel Emelyanov <xemul@openvz.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [PATCH v21 032/100] c/r: Save and restore the [compat_]robust_list member of the task struct
Date: Mon, 03 May 2010 09:10:42 -0700	[thread overview]
Message-ID: <4BDEF582.2040806@us.ibm.com> (raw)
In-Reply-To: <1272723382-19470-33-git-send-email-orenl@cs.columbia.edu>

Oren Laadan wrote:
> From: Matt Helsley <matthltc@us.ibm.com>
> 
> These lists record which futexes the task holds. To keep the overhead of
> robust futexes low the list is kept in userspace. When the task exits the
> kernel carefully walks these lists to recover held futexes that
> other tasks may be attempting to acquire with FUTEX_WAIT.
> 
> Because they point to userspace memory that is saved/restored by
> checkpoint/restart saving the list pointers themselves is safe.
> 
> While saving the pointers is safe during checkpoint, restart is tricky
> because the robust futex ABI contains provisions for changes based on
> checking the size of the list head. So we need to save the length of
> the list head too in order to make sure that the kernel used during
> restart is capable of handling that ABI. Since there is only one ABI
> supported at the moment taking the list head's size is simple. Should
> the ABI change we will need to use the same size as specified during
> sys_set_robust_list() and hence some new means of determining the length
> of this userspace structure in sys_checkpoint would be required.
> 
> Rather than rewrite the logic that checks and handles the ABI we reuse
> sys_set_robust_list() by factoring out the body of the function and
> calling it during restart.
> 

The approach looks sound to me. I presume there is no way for the task 
to wake and set the robust list to something else after the checkpoint 
has started?

Couple of comments re documentation below.

Thanks,

Darren

> Changelog [v19]:
>   - Keep __u32s in even groups for 32-64 bit compatibility
> 
> Cc: Darren Hart <dvhltc@us.ibm.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Eric Dumazet <eric.dumazet@gmail.com>
> Signed-off-by: Matt Helsley <matthltc@us.ibm.com>
> Acked-by: Oren Laadan <orenl@cs.columbia.edu>
> Acked-by: Serge E. Hallyn <serue@us.ibm.com>
> Tested-by: Serge E. Hallyn <serue@us.ibm.com>
> ---
>  include/linux/checkpoint_hdr.h |    5 ++++
>  include/linux/compat.h         |    3 +-
>  include/linux/futex.h          |    1 +
>  kernel/checkpoint/process.c    |   49 ++++++++++++++++++++++++++++++++++++++++
>  kernel/futex.c                 |   19 +++++++++-----
>  kernel/futex_compat.c          |   13 ++++++++--
>  6 files changed, 79 insertions(+), 11 deletions(-)
> 
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index 68ee0f3..c7d34a6 100644
> --- a/include/linux/checkpoint_hdr.h
> +++ b/include/linux/checkpoint_hdr.h
> @@ -167,6 +167,11 @@ struct ckpt_hdr_task {
>  	__u32 exit_signal;
>  	__u32 pdeath_signal;
> 
> +	__u32 compat_robust_futex_head_len;
> +	__u32 compat_robust_futex_list; /* a compat __user ptr */
> +	__u32 robust_futex_head_len;
> +	__u64 robust_futex_list; /* a __user ptr */
> +
>  	__u64 set_child_tid;
>  	__u64 clear_child_tid;
>  } __attribute__((aligned(8)));
> diff --git a/include/linux/compat.h b/include/linux/compat.h
> index 717c691..89125dd 100644
> --- a/include/linux/compat.h
> +++ b/include/linux/compat.h
> @@ -210,7 +210,8 @@ struct compat_robust_list_head {
>  };
> 
>  extern void compat_exit_robust_list(struct task_struct *curr);
> -
> +extern long do_compat_set_robust_list(struct compat_robust_list_head __user *head,
> +				      compat_size_t len);
>  asmlinkage long
>  compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
>  			   compat_size_t len);
> diff --git a/include/linux/futex.h b/include/linux/futex.h
> index ae755f6..c825790 100644
> --- a/include/linux/futex.h
> +++ b/include/linux/futex.h
> @@ -185,6 +185,7 @@ union futex_key {
>  #define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = NULL } }
> 
>  #ifdef CONFIG_FUTEX
> +extern long do_set_robust_list(struct robust_list_head __user *head, size_t len);
>  extern void exit_robust_list(struct task_struct *curr);
>  extern void exit_pi_state_list(struct task_struct *curr);
>  extern int futex_cmpxchg_enabled;
> diff --git a/kernel/checkpoint/process.c b/kernel/checkpoint/process.c
> index ce009cb..aabefb6 100644
> --- a/kernel/checkpoint/process.c
> +++ b/kernel/checkpoint/process.c
> @@ -14,9 +14,56 @@
>  #include <linux/sched.h>
>  #include <linux/posix-timers.h>
>  #include <linux/futex.h>
> +#include <linux/compat.h>
>  #include <linux/poll.h>
>  #include <linux/checkpoint.h>
> 
> +
> +#ifdef CONFIG_FUTEX
> +static void save_task_robust_futex_list(struct ckpt_hdr_task *h,
> +					struct task_struct *t)
> +{
> +	/*
> +	 * These are __user pointers and thus can be saved without
> +	 * the objhash.
> +	 */
> +	h->robust_futex_list = (unsigned long)t->robust_list;
> +	h->robust_futex_head_len = sizeof(*t->robust_list);
> +#ifdef CONFIG_COMPAT
> +	h->compat_robust_futex_list = ptr_to_compat(t->compat_robust_list);
> +	h->compat_robust_futex_head_len = sizeof(*t->compat_robust_list);
> +#endif
> +}
> +
> +static void restore_task_robust_futex_list(struct ckpt_hdr_task *h)
> +{
> +	/* Since we restore the memory map the address remains the same and
> +	 * this is safe. This is the same as [compat_]sys_set_robust_list() */
> +	if (h->robust_futex_list) {
> +		struct robust_list_head __user *rfl;
> +		rfl = (void __user *)(unsigned long) h->robust_futex_list;
> +		do_set_robust_list(rfl, h->robust_futex_head_len);
> +	}
> +#ifdef CONFIG_COMPAT
> +	if (h->compat_robust_futex_list) {
> +		struct compat_robust_list_head __user *crfl;
> +		crfl = compat_ptr(h->compat_robust_futex_list);
> +		do_compat_set_robust_list(crfl, h->compat_robust_futex_head_len);
> +	}
> +#endif
> +}
> +#else /* !CONFIG_FUTEX */
> +static inline void save_task_robust_futex_list(struct ckpt_hdr_task *h,
> +					       struct task_struct *t)
> +{
> +}
> +
> +static inline void restore_task_robust_futex_list(struct ckpt_hdr_task *h)
> +{
> +}
> +#endif /* CONFIG_FUTEX */
> +
> +
>  /***********************************************************************
>   * Checkpoint
>   */
> @@ -45,6 +92,7 @@ static int checkpoint_task_struct(struct ckpt_ctx *ctx, struct task_struct *t)
> 
>  		h->set_child_tid = (unsigned long) t->set_child_tid;
>  		h->clear_child_tid = (unsigned long) t->clear_child_tid;
> +		save_task_robust_futex_list(h, t);
>  	}
> 
>  	ret = ckpt_write_obj(ctx, &h->h);
> @@ -248,6 +296,7 @@ static int restore_task_struct(struct ckpt_ctx *ctx)
>  			(int __user *) (unsigned long) h->set_child_tid;
>  		t->clear_child_tid =
>  			(int __user *) (unsigned long) h->clear_child_tid;
> +		restore_task_robust_futex_list(h);
>  	}
> 
>  	memset(t->comm, 0, TASK_COMM_LEN);
> diff --git a/kernel/futex.c b/kernel/futex.c
> index 23419c9..baaecb4 100644
> --- a/kernel/futex.c
> +++ b/kernel/futex.c
> @@ -2342,13 +2342,7 @@ out:
>   * the list. There can only be one such pending lock.
>   */
> 
> -/**
> - * sys_set_robust_list() - Set the robust-futex list head of a task
> - * @head:	pointer to the list-head
> - * @len:	length of the list-head, as userspace expects
> - */
> -SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
> -		size_t, len)
> +long do_set_robust_list(struct robust_list_head __user *head, size_t len)


Please provide a full kerneldoc header for the new function.


>  {
>  	if (!futex_cmpxchg_enabled)
>  		return -ENOSYS;
> @@ -2364,6 +2358,17 @@ SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
>  }
> 
>  /**
> + * sys_set_robust_list() - Set the robust-futex list head of a task
> + * @head:	pointer to the list-head
> + * @len:	length of the list-head, as userspace expects
> + */
> +SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
> +		size_t, len)
> +{
> +	return do_set_robust_list(head, len);
> +}
> +
> +/**
>   * sys_get_robust_list() - Get the robust-futex list head of a task
>   * @pid:	pid of the process [zero for current task]
>   * @head_ptr:	pointer to a list-head pointer, the kernel fills it in
> diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c
> index d49afb2..900bb2b 100644
> --- a/kernel/futex_compat.c
> +++ b/kernel/futex_compat.c
> @@ -114,9 +114,9 @@ void compat_exit_robust_list(struct task_struct *curr)
>  	}
>  }
> 
> -asmlinkage long
> -compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
> -			   compat_size_t len)
> +long
> +do_compat_set_robust_list(struct compat_robust_list_head __user *head,


I know futex_compat.c doesn't have as much kerneldoc as futex.c does, 
but I'd like to see that improved. Please include a kerneldoc here too.


> +			  compat_size_t len)
>  {
>  	if (!futex_cmpxchg_enabled)
>  		return -ENOSYS;
> @@ -130,6 +130,13 @@ compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
>  }
> 
>  asmlinkage long
> +compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
> +			   compat_size_t len)
> +{
> +	return do_compat_set_robust_list(head, len);
> +}
> +
> +asmlinkage long
>  compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
>  			   compat_size_t __user *len_ptr)
>  {


-- 
Darren Hart
IBM Linux Technology Center
Real-Time Linux Team

  reply	other threads:[~2010-05-03 16:10 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-01 14:14 [PATCH v21 00/100] Kernel based checkpoint/restart Oren Laadan
2010-05-01 14:14 ` [PATCH v21 001/100] eclone (1/11): Factor out code to allocate pidmap page Oren Laadan
2010-05-01 22:10   ` David Miller
2010-05-02  0:14     ` Josh Boyer
2010-05-02  0:25     ` Matt Helsley
2010-05-03  8:48     ` Brian K. White
2010-05-03 21:02     ` Dave Hansen
2010-05-03 21:12       ` David Miller
2010-05-01 14:14 ` [PATCH v21 002/100] eclone (2/11): Have alloc_pidmap() return actual error code Oren Laadan
2010-05-01 14:14 ` [PATCH v21 003/100] eclone (3/11): Define set_pidmap() function Oren Laadan
2010-05-01 14:14 ` [PATCH v21 004/100] eclone (4/11): Add target_pids parameter to alloc_pid() Oren Laadan
2010-05-01 14:14 ` [PATCH v21 005/100] eclone (5/11): Add target_pids parameter to copy_process() Oren Laadan
2010-05-01 14:14 ` [PATCH v21 006/100] eclone (6/11): Check invalid clone flags Oren Laadan
2010-05-01 14:14 ` [PATCH v21 007/100] eclone (7/11): Define do_fork_with_pids() Oren Laadan
2010-05-01 14:14 ` [PATCH v21 008/100] eclone (8/11): Implement sys_eclone for x86 (32,64) Oren Laadan
2010-05-01 14:14 ` [PATCH v21 009/100] eclone (9/11): Implement sys_eclone for s390 Oren Laadan
2010-05-01 14:14 ` [PATCH v21 010/100] eclone (10/11): Implement sys_eclone for powerpc Oren Laadan
2010-05-01 14:14 ` [PATCH v21 011/100] eclone (11/11): Document sys_eclone Oren Laadan
2010-05-05 21:14   ` Randy Dunlap
2010-05-05 22:25     ` Sukadev Bhattiprolu
2010-05-01 14:14 ` [PATCH v21 012/100] c/r: extend arch_setup_additional_pages() Oren Laadan
2010-05-01 14:14 ` [PATCH v21 013/100] c/r: break out new_user_ns() Oren Laadan
2010-05-01 14:14 ` [PATCH v21 014/100] c/r: split core function out of some set*{u,g}id functions Oren Laadan
2010-05-01 14:14 ` [PATCH v21 015/100] cgroup freezer: Update stale locking comments Oren Laadan
2010-05-06 19:40   ` Rafael J. Wysocki
2010-05-06 20:31     ` Matt Helsley
2010-05-06 22:34       ` Matt Helsley
2010-05-06 21:25     ` Oren Laadan
2010-05-10 21:01       ` Rafael J. Wysocki
2010-05-10 21:07         ` Matt Helsley
2010-05-10 21:12           ` Rafael J. Wysocki
2010-05-01 14:14 ` [PATCH v21 016/100] cgroup freezer: Add CHECKPOINTING state to safeguard container checkpoint Oren Laadan
2010-05-01 14:14 ` [PATCH v21 017/100] cgroup freezer: interface to freeze a cgroup from within the kernel Oren Laadan
2010-05-01 14:15 ` [PATCH v21 018/100] Namespaces submenu Oren Laadan
2010-05-01 14:15 ` [PATCH v21 019/100] Make file_pos_read/write() public and export kernel_write() Oren Laadan
2010-05-06 12:26   ` Josef Bacik
2010-05-01 14:15 ` [PATCH v21 020/100] c/r: documentation Oren Laadan
2010-05-06 20:27   ` Randy Dunlap
2010-05-07  6:54     ` Oren Laadan
2010-05-01 14:15 ` [PATCH v21 021/100] c/r: create syscalls: sys_checkpoint, sys_restart Oren Laadan
2010-05-01 14:15 ` [PATCH v21 022/100] c/r: basic infrastructure for checkpoint/restart Oren Laadan
2010-05-01 14:15 ` [PATCH v21 023/100] c/r: x86_32 support " Oren Laadan
2010-05-01 14:15 ` [PATCH v21 024/100] c/r: x86-64: checkpoint/restart implementation Oren Laadan
2010-05-01 14:15 ` [PATCH v21 025/100] c/r: external checkpoint of a task other than ourself Oren Laadan
2010-05-01 14:15 ` [PATCH v21 026/100] c/r: export functionality used in next patch for restart-blocks Oren Laadan
2010-05-01 14:15 ` [PATCH v21 027/100] c/r: restart-blocks Oren Laadan
2010-05-01 14:15 ` [PATCH v21 028/100] c/r: checkpoint multiple processes Oren Laadan
2010-05-01 14:15 ` [PATCH v21 029/100] c/r: restart " Oren Laadan
2010-05-01 14:15 ` [PATCH v21 030/100] c/r: introduce PF_RESTARTING, and skip notification on exit Oren Laadan
2010-05-01 14:15 ` [PATCH v21 031/100] c/r: support for zombie processes Oren Laadan
2010-05-01 14:15 ` [PATCH v21 032/100] c/r: Save and restore the [compat_]robust_list member of the task struct Oren Laadan
2010-05-03 16:10   ` Darren Hart [this message]
2010-05-03 18:02     ` Matt Helsley
2010-05-01 14:15 ` [PATCH v21 033/100] c/r: infrastructure for shared objects Oren Laadan
2010-05-01 14:15 ` [PATCH v21 034/100] c/r: detect resource leaks for whole-container checkpoint Oren Laadan
2010-05-01 14:15 ` [PATCH v21 035/100] deferqueue: generic queue to defer work Oren Laadan
2010-05-01 14:15 ` [PATCH v21 036/100] c/r: introduce vfs_fcntl() Oren Laadan
2010-05-01 14:15 ` [PATCH v21 037/100] c/r: introduce new 'file_operations': ->checkpoint, ->collect() Oren Laadan
2010-05-01 14:15 ` [PATCH v21 038/100] c/r: checkpoint and restart open file descriptors Oren Laadan
2010-05-01 14:15 ` [PATCH v21 039/100] c/r: introduce method '->checkpoint()' in struct vm_operations_struct Oren Laadan
2010-05-01 14:15 ` [PATCH v21 040/100] Introduce FOLL_DIRTY to follow_page() for "dirty" pages Oren Laadan
2010-05-01 14:15 ` [PATCH v21 041/100] c/r: dump memory address space (private memory) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 042/100] c/r: add generic '->checkpoint' f_op to ext fses Oren Laadan
2010-05-01 14:15 ` [PATCH v21 043/100] c/r: add generic '->checkpoint()' f_op to simple devices Oren Laadan
2010-05-01 14:15 ` [PATCH v21 044/100] c/r: add checkpoint operation for opened files of generic filesystems Oren Laadan
2010-05-01 14:15 ` [PATCH v21 045/100] c/r: export shmem_getpage() to support shared memory Oren Laadan
2010-05-01 14:15 ` [PATCH v21 046/100] c/r: dump anonymous- and file-mapped- " Oren Laadan
2010-05-01 14:15 ` [PATCH v21 047/100] splice: export pipe/file-to-pipe/file functionality Oren Laadan
2010-05-01 14:15 ` [PATCH v21 048/100] c/r: support for open pipes Oren Laadan
2010-05-01 14:15 ` [PATCH v21 049/100] c/r: checkpoint and restore FIFOs Oren Laadan
2010-05-01 14:15 ` [PATCH v21 050/100] c/r: refuse to checkpoint if monitoring directories with dnotify Oren Laadan
2010-05-01 14:15 ` [PATCH v21 051/100] c/r: make ckpt_may_checkpoint_task() check each namespace individually Oren Laadan
2010-05-01 14:15 ` [PATCH v21 052/100] c/r: support for UTS namespace Oren Laadan
2010-05-01 14:15 ` [PATCH v21 053/100] c/r (ipc): allow allocation of a desired ipc identifier Oren Laadan
2010-05-07 16:32   ` Manfred Spraul
2010-05-07 17:08     ` Oren Laadan
2010-05-01 14:15 ` [PATCH v21 054/100] c/r: save and restore sysvipc namespace basics Oren Laadan
2010-05-01 14:15 ` [PATCH v21 055/100] c/r: support share-memory sysv-ipc Oren Laadan
2010-05-01 14:15 ` [PATCH v21 056/100] c/r: support message-queues sysv-ipc Oren Laadan
2010-05-01 14:15 ` [PATCH v21 057/100] c/r: support semaphore sysv-ipc Oren Laadan
2010-05-01 14:15 ` [PATCH v21 058/100] c/r: (s390): expose a constant for the number of words (CRs) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 059/100] c/r: add CKPT_COPY() macro Oren Laadan
2010-05-01 14:15 ` [PATCH v21 060/100] c/r: define s390-specific checkpoint-restart code Oren Laadan
2010-05-01 14:15 ` [PATCH v21 061/100] c/r: capabilities: define checkpoint and restore fns Oren Laadan
2010-05-01 14:15 ` [PATCH v21 062/100] c/r: checkpoint and restore task credentials Oren Laadan
2010-05-01 14:15 ` [PATCH v21 063/100] c/r: restore file->f_cred Oren Laadan
2010-05-01 14:15 ` [PATCH v21 064/100] c/r: checkpoint and restore (shared) task's sighand_struct Oren Laadan
2010-05-01 14:15 ` [PATCH v21 065/100] c/r: [signal 1/4] blocked and template for shared signals Oren Laadan
2010-05-01 14:15 ` [PATCH v21 066/100] c/r: [signal 2/4] checkpoint/restart of rlimit Oren Laadan
2010-05-01 14:15 ` [PATCH v21 067/100] c/r: [signal 3/4] pending signals (private, shared) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 068/100] c/r: [signal 4/4] support for real/virt/prof itimers Oren Laadan
2010-05-01 14:15 ` [PATCH v21 069/100] Expose may_setuid() in user.h and add may_setgid() (v2) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 070/100] c/r: correctly restore pgid Oren Laadan
2010-05-01 14:15 ` [PATCH v21 071/100] Add common socket helpers to unify the security hooks Oren Laadan
2010-05-01 14:15 ` [PATCH v21 072/100] c/r: introduce checkpoint/restore methods to struct proto_ops Oren Laadan
2010-05-01 14:15 ` [PATCH v21 073/100] c/r: Add AF_UNIX support (v12) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 074/100] c/r: add support for listening INET sockets (v2) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 075/100] c/r: add support for connected INET sockets (v5) Oren Laadan
2010-05-01 14:15 ` [PATCH v21 076/100] c/r: [pty 1/2] allow allocation of desired pty slave Oren Laadan
2010-05-01 14:15 ` [PATCH v21 077/100] c/r: [pty 2/2] support for pseudo terminals Oren Laadan
2010-05-01 14:16 ` [PATCH v21 078/100] c/r: support for controlling terminal and job control Oren Laadan
2010-05-01 14:16 ` [PATCH v21 079/100] c/r: checkpoint/restart epoll sets Oren Laadan
2010-05-01 14:16 ` [PATCH v21 080/100] c/r: checkpoint/restart eventfd Oren Laadan
2010-05-01 14:16 ` [PATCH v21 081/100] c/r: restore task fs_root and pwd (v3) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 082/100] c/r: preliminary support mounts namespace Oren Laadan
2010-05-01 14:16 ` [PATCH v21 083/100] c/r: nested pid namespaces (v3) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 084/100] powerpc: reserve checkpoint arch identifiers Oren Laadan
2010-05-01 14:16 ` [PATCH v21 085/100] powerpc: provide APIs for validating and updating DABR Oren Laadan
2010-05-01 14:16 ` [PATCH v21 086/100] powerpc: checkpoint/restart implementation Oren Laadan
2010-05-01 14:16 ` [PATCH v21 087/100] powerpc: wire up checkpoint and restart syscalls Oren Laadan
2010-05-01 14:16 ` [PATCH v21 088/100] powerpc: enable checkpoint support in Kconfig Oren Laadan
2010-05-01 14:16 ` [PATCH v21 089/100] c/r: add lsm name and lsm_info (policy header) to container info Oren Laadan
2010-05-01 14:16 ` [PATCH v21 090/100] c/r: add generic LSM c/r support (v7) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 091/100] c/r: add smack support to lsm c/r (v4) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 092/100] c/r: add selinux support (v6) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 093/100] c/r: Add checkpoint and collect hooks to net_device_ops Oren Laadan
2010-05-01 14:16 ` [PATCH v21 094/100] c/r: Basic support for network namespaces and devices (v6) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 095/100] c/r: Add rtnl_dellink() helper Oren Laadan
2010-05-01 14:16 ` [PATCH v21 096/100] c/r: Add checkpoint support for veth devices (v2) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 097/100] c/r: Add loopback checkpoint support (v2) Oren Laadan
2010-05-01 14:16 ` [PATCH v21 098/100] c/r: Add a checkpoint handler to the 'sit' device Oren Laadan
2010-05-01 14:16 ` [PATCH v21 099/100] c/r: Add checkpoint support to macvlan driver Oren Laadan
2010-05-01 14:16 ` [PATCH v21 100/100] c/r: add an entry for checkpoint/restart in MAINTAINERS Oren Laadan
2010-05-01 15:17 ` [PATCH v21 00/100] Kernel based checkpoint/restart Oren Laadan
2010-05-04 14:43 ` [PATCH v21 001/100] eclone (1/11): Factor out code to allocate pidmap page David Howells
2010-05-05 15:13   ` 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=4BDEF582.2040806@us.ibm.com \
    --to=dvhltc@us.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=eric.dumazet@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthltc@us.ibm.com \
    --cc=mingo@elte.hu \
    --cc=orenl@cs.columbia.edu \
    --cc=peterz@infradead.org \
    --cc=serue@us.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=xemul@openvz.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).