Dan Smith wrote: > This patch adds a "phase" of checkpoint that saves out information about any > namespaces the task(s) may have. Do this by tracking the namespace objects > of the tasks and making sure that tasks with the same namespace that follow > get properly referenced in the checkpoint stream. Note that for now, we > refuse to checkpoint if all tasks in the set don't share the same set of > *all* namespaces. > > Restart is handled in userspace by reading the UTS record(s), calling > unshare() and setting the hostname accordingly. See my changes to > mktree.c for details. > > I tested this with single and multiple task restore, on top of Oren's > v13 tree. > > Changes: > - Remove the kernel restore path > - Punt on nested namespaces > - Use __NEW_UTS_LEN in nodename and domainname buffers > - Add a note to Documentation/checkpoint/internals.txt to indicate where > in the save/restore process the UTS information is kept > - Store (and track) the objref of the namespace itself instead of the > nsproxy (based on comments from Dave on IRC) > - Remove explicit check for non-root nsproxy > - Store the nodename and domainname lengths and use cr_write_string() > to store the actual name strings > [...] > +static int cr_write_namespaces(struct cr_ctx *ctx, struct task_struct *t) > +{ > + struct cr_hdr h; > + struct cr_hdr_namespaces *hh = cr_hbuf_get(ctx, sizeof(*hh)); > + struct nsproxy *nsp = t->nsproxy; > + int ret; > + > + h.type = CR_HDR_NS; > + h.len = sizeof(*hh); > + h.parent = 0; > + > + hh->types = 0; > + > + if (cr_obj_add_ptr(ctx, nsp->uts_ns, &hh->uts_ref, CR_OBJ_UTSNS, 0)) > + hh->types |= CR_NS_UTS; cr_obj_add_ptr() may fail with an error (e.g. -ENOMEM). > + > + ret = cr_write_obj(ctx, &h, hh); > + if (ret) > + goto out; > + > + if (hh->types & CR_NS_UTS) { > + ret = cr_write_ns_uts(ctx, t); > + if (ret < 0) > + goto out; > + > + /* FIXME: Write other namespaces here */ > + } > + out: > + cr_hbuf_put(ctx, sizeof(*hh)); > + > + return ret; > +} > + [...] Oren. _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers