[Devel] Re: [RFC v14-rc3][PATCH 33/36] Support for share memory address spaces
Serge E. Hallyn
serue at us.ibm.com
Thu Apr 9 14:03:02 PDT 2009
Quoting Oren Laadan (orenl at cs.columbia.edu):
> The task address space (task->mm) may be shared between processes if
> CLONE_VM is used, and particularly among threads. Accordingly, treat
> 'task->mm' as a shared object: during checkpoint check against the
> objhash and only dump the contents if seen for the first time. During
> restart, likewise, only restore if it's a new instance, otherwise use
> the one already registered in the objhash.
>
> Signed-off-by: Oren Laadan <orenl at cs.columbia.edu>
Cool.
Acked-by: Serge Hallyn <serue at us.ibm.com>
Although:
> + /* if the mm's objref is in the objhash, use that instance */
> + mm = cr_obj_get_by_ref(ctx, hh->objref, CR_OBJ_MM);
> + if (IS_ERR(mm)) {
> + ret = PTR_ERR(mm);
> + goto out;
> + }
>
> + if (mm) {
> + if (mm != current->mm) {
In what twisted world could mm == current->mm at restart?
> + ret = exec_mmap(mm);
> + if (ret < 0)
> + goto out;
> + atomic_inc(&mm->mm_users);
> + }
> + ret = 0;
> + goto out;
> + }
> +
> + /* otherwise, add our mm to the objhash for future generations */
> mm = current->mm;
> + ret = cr_obj_add_ref(ctx, mm, hh->objref, CR_OBJ_MM, 0);
> + if (ret < 0)
> + goto out;
>
> /* point of no return -- destruct current mm */
> down_write(&mm->mmap_sem);
> diff --git a/include/linux/checkpoint.h b/include/linux/checkpoint.h
> index 043535c..1bfe284 100644
> --- a/include/linux/checkpoint.h
> +++ b/include/linux/checkpoint.h
> @@ -77,6 +77,7 @@ extern void cr_ctx_put(struct cr_ctx *ctx);
> enum {
> CR_OBJ_FILE = 1,
> CR_OBJ_INODE,
> + CR_OBJ_MM,
> CR_OBJ_MAX
> };
>
> --
> 1.5.4.3
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list