Add support for the migration flags.
authorDaniel Hokka Zakrisson <daniel@hozac.com>
Tue, 20 Feb 2007 17:33:35 +0000 (17:33 +0000)
committerDaniel Hokka Zakrisson <daniel@hozac.com>
Tue, 20 Feb 2007 17:33:35 +0000 (17:33 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2501 94cd875c-1c1d-0410-91d2-eb244daf1a30

ensc_wrappers/wrappers-vserver.hc
lib/syscall_ctxmigrate-v21.hc
lib/syscall_ctxmigrate.c
lib/vserver.h
lib_internal/switchtowatchxid.c
src/rpm-fake-resolver.c
src/rpm-fake.c
src/vcontext.c

index 8b8e84e..6d1047e 100644 (file)
@@ -65,9 +65,9 @@ Evc_net_create(nid_t nid)
 }
 
 inline static WRAPPER_DECL void
-Evc_ctx_migrate(xid_t xid)
+Evc_ctx_migrate(xid_t xid, uint_least64_t flags)
 {
-  FatalErrnoError(vc_ctx_migrate(xid)==-1, "vc_ctx_migrate()");
+  FatalErrnoError(vc_ctx_migrate(xid, flags)==-1, "vc_ctx_migrate()");
 }
 
 inline static WRAPPER_DECL void
index 355a7a1..86100a8 100644 (file)
 #endif
 
 static inline ALWAYSINLINE int
-vc_ctx_migrate_spaces(xid_t xid)
+vc_ctx_migrate_spaces(xid_t xid, uint_least64_t flags)
 {
-  int ret = vc_getXIDType(xid);
+  int ret;
+  struct vcmd_ctx_migrate data = { .flagword = flags };
+
+  ret = vc_getXIDType(xid);
   if (ret == vcTYPE_STATIC || ret == vcTYPE_DYNAMIC) {
     ret = vc_enter_namespace(xid, vc_get_space_mask() & ~(CLONE_NEWNS|CLONE_FS));
     if (ret)
       return ret;
   }
 
-  return vserver(VCMD_ctx_migrate_v0, CTX_USER2KERNEL(xid), NULL);
+  return vserver(VCMD_ctx_migrate, CTX_USER2KERNEL(xid), &data);
 }
index 38db308..a60b7c8 100644 (file)
@@ -38,9 +38,9 @@
 
 #if defined(VC_ENABLE_API_V13) || defined(VC_ENABLE_API_V21)
 int
-vc_ctx_migrate(xid_t xid)
+vc_ctx_migrate(xid_t xid, uint_least64_t flags)
 {
-  CALL_VC(CALL_VC_SPACES(vc_ctx_migrate, xid),
+  CALL_VC(CALL_VC_SPACES(vc_ctx_migrate, xid, flags),
          CALL_VC_V13A  (vc_ctx_migrate, xid));
 }
 #endif
index 8c67e77..38e4c5a 100644 (file)
 #define VC_DATTR_REMAP                 0x00000010
 
 
+// the process context migration flags
+#define VC_VXM_SET_INIT                        0x00000001
+#define VC_VXM_SET_REAPER              0x00000002
+
+
 #ifndef CLONE_NEWNS
 #  define CLONE_NEWNS                  0x00020000
 #endif
@@ -393,9 +398,10 @@ extern "C" {
     /** \brief   Moves the current process into the specified context.
      *  \ingroup syscalls
      *
-     *  \param   xid  The new context
+     *  \param   xid    The new context
+     *  \param   flags  The flags, see VC_VXM_*
      *  \returns 0 on success, -1 on errors */
-  int          vc_ctx_migrate(xid_t xid);
+  int          vc_ctx_migrate(xid_t xid, uint_least64_t flags);
 
     /** \brief   Statistics about a context */
   struct vc_ctx_stat {
index 35be736..89506c3 100644 (file)
@@ -35,7 +35,7 @@ switchToWatchXid(char const **errptr)
   if (vc_get_task_xid(0)==1) return true;
 
   if (vc_isSupported(vcFEATURE_MIGRATE)) {
-    if (vc_ctx_migrate(1)==-1) {
+    if (vc_ctx_migrate(1, 0)==-1) {
       if (errptr) *errptr = "vc_migrate_context()";
       return false;
     }
index 0ff7a9b..278c1db 100644 (file)
@@ -261,7 +261,7 @@ activateContext(xid_t xid, bool in_ctx,
     Evc_set_cflags(xid, &flags);
   }
   else if (vc_isSupported(vcFEATURE_MIGRATE))
-      Evc_ctx_migrate(xid);
+      Evc_ctx_migrate(xid, 0);
   else {
 #ifdef VC_ENABLE_API_COMPAT
     Evc_new_s_context(xid, xid_caps, xid_flags);
index eb1d721..1689e2d 100644 (file)
@@ -595,7 +595,7 @@ execvWorker(char const *path, char * const argv[], char * const envp[])
   int          res = -1;
 
   if (vc_isSupported(vcFEATURE_MIGRATE))
-    res = vc_ctx_migrate(ctx);
+    res = vc_ctx_migrate(ctx, 0);
   else {
 #ifdef VC_ENABLE_API_COMPAT  
     res = vc_new_s_context(ctx,caps,flags);
index 21fae96..7f1a809 100644 (file)
@@ -282,7 +282,7 @@ doit(struct Arguments const *args, int argc, char *argv[])
     setFlags(args, xid);
 
     if (args->do_migrate && !args->do_migrateself)
-      Evc_ctx_migrate(xid);
+      Evc_ctx_migrate(xid, 0);
 
     if (args->uid != NULL) {
       uid_t uid = 0;