From f19c72d19b6df6739cae1871b710c37ef9e4f067 Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Tue, 14 Oct 2008 16:42:17 +0000 Subject: [PATCH] Look for the config file before the FS gets unshared. --- src/planetlab.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/planetlab.c b/src/planetlab.c index 5d0199e..b236b9d 100644 --- a/src/planetlab.c +++ b/src/planetlab.c @@ -61,7 +61,7 @@ POSSIBILITY OF SUCH DAMAGE. #endif static int -create_context(xid_t ctx, uint64_t bcaps) +create_context(xid_t ctx, uint64_t bcaps, uint32_t unshare_flags) { struct vc_ctx_caps vc_caps; struct vc_net_flags vc_nf; @@ -98,9 +98,7 @@ process: if (vc_ctx_create(ctx, 0) == VC_NOCTX) return -1; - /* Unshare the net namespace if the slice if requested in the local slice configuration */ - unshare_mask = get_space_flag(ctx); - if (unshare_mask != 0) { + if (unshare_mask != 0) { unshare(unshare_mask); vc_set_namespace(ctx, unshare_mask); } @@ -154,11 +152,15 @@ pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr) if (vc_get_cflags(ctx, &vc_flags)) { + uint32_t unshare_mask; if (errno != ESRCH) return -1; + /* Unshare the net namespace if the slice if requested in the local slice configuration */ + unshare_mask = get_space_flag(ctx); + /* context doesn't exist - create it */ - if (create_context(ctx, bcaps)) + if (create_context(ctx, bcaps, unshare_mask)) { if (errno == EEXIST) /* another process beat us in a race */ @@ -195,6 +197,7 @@ pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr) unshare_mask = get_space_flag(ctx); if (unshare_mask != 0) { vc_enter_namespace(ctx, unshare_mask); + unshare(unshare_mask); } if (!vc_tag_migrate(ctx) && !vc_ctx_migrate(ctx, 0)) -- 2.43.0