From e49176a0372f11f52309284b62fed5c2da98f3ab Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Tue, 20 Feb 2007 17:33:35 +0000 Subject: [PATCH] Add support for the migration flags. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2501 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- ensc_wrappers/wrappers-vserver.hc | 4 ++-- lib/syscall_ctxmigrate-v21.hc | 9 ++++++--- lib/syscall_ctxmigrate.c | 4 ++-- lib/vserver.h | 10 ++++++++-- lib_internal/switchtowatchxid.c | 2 +- src/rpm-fake-resolver.c | 2 +- src/rpm-fake.c | 2 +- src/vcontext.c | 2 +- 8 files changed, 22 insertions(+), 13 deletions(-) diff --git a/ensc_wrappers/wrappers-vserver.hc b/ensc_wrappers/wrappers-vserver.hc index 8b8e84e..6d1047e 100644 --- a/ensc_wrappers/wrappers-vserver.hc +++ b/ensc_wrappers/wrappers-vserver.hc @@ -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 diff --git a/lib/syscall_ctxmigrate-v21.hc b/lib/syscall_ctxmigrate-v21.hc index 355a7a1..86100a8 100644 --- a/lib/syscall_ctxmigrate-v21.hc +++ b/lib/syscall_ctxmigrate-v21.hc @@ -22,14 +22,17 @@ #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); } diff --git a/lib/syscall_ctxmigrate.c b/lib/syscall_ctxmigrate.c index 38db308..a60b7c8 100644 --- a/lib/syscall_ctxmigrate.c +++ b/lib/syscall_ctxmigrate.c @@ -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 diff --git a/lib/vserver.h b/lib/vserver.h index 8c67e77..38e4c5a 100644 --- a/lib/vserver.h +++ b/lib/vserver.h @@ -268,6 +268,11 @@ #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 { diff --git a/lib_internal/switchtowatchxid.c b/lib_internal/switchtowatchxid.c index 35be736..89506c3 100644 --- a/lib_internal/switchtowatchxid.c +++ b/lib_internal/switchtowatchxid.c @@ -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; } diff --git a/src/rpm-fake-resolver.c b/src/rpm-fake-resolver.c index 0ff7a9b..278c1db 100644 --- a/src/rpm-fake-resolver.c +++ b/src/rpm-fake-resolver.c @@ -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); diff --git a/src/rpm-fake.c b/src/rpm-fake.c index eb1d721..1689e2d 100644 --- a/src/rpm-fake.c +++ b/src/rpm-fake.c @@ -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); diff --git a/src/vcontext.c b/src/vcontext.c index 21fae96..7f1a809 100644 --- a/src/vcontext.c +++ b/src/vcontext.c @@ -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; -- 1.8.1.5