Look for the config file before the FS gets unshared.
authorSapan Bhatia <sapanb@cs.princeton.edu>
Tue, 14 Oct 2008 16:42:17 +0000 (16:42 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Tue, 14 Oct 2008 16:42:17 +0000 (16:42 +0000)
src/planetlab.c

index 5d0199e..b236b9d 100644 (file)
@@ -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))