[CRIU] [PATCH] mnt: disable the use of pivot_root in case of ramdisk

Ismaël FEZZAZ i.fezzaz at gmail.com
Mon Oct 26 15:01:11 PDT 2015


Signed-off-by: Ismael Fezzaz <i.fezzaz at gmail.com>
---
 crtools.c            |  5 +++++
 include/cr_options.h |  1 +
 mount.c              | 19 +++++++++++++++++++
 3 files changed, 25 insertions(+)

diff --git a/crtools.c b/crtools.c
index d3812a1..6d60421 100644
--- a/crtools.c
+++ b/crtools.c
@@ -253,6 +253,7 @@ int main(int argc, char *argv[], char *envp[])
         { "freeze-cgroup",        required_argument,    0, 1068 },
         { "ghost-limit",        required_argument,    0, 1069 },
         { "irmap-scan-path",        required_argument,    0, 1070 },
+        { "ramdisk",            no_argument,        0, 1071 },
         { },
     };

@@ -498,6 +499,9 @@ int main(int argc, char *argv[], char *envp[])
             if (irmap_scan_path_add(optarg))
                 return -1;
             break;
+        case 10701:
+            opts.ramdisk = true;
+            break;
         case 'M':
             {
                 char *aux;
@@ -747,6 +751,7 @@ usage:
 "  --enable-fs FSNAMES   a comma separated list of filesystem names
or \"all\".\n"
 "                        force criu to (try to) dump/restore these
filesystem's\n"
 "                        mountpoints even if fs is not supported.\n"
+"  --ramdisk             disable 'pivot_root'.\n"
 "\n"
 "* Logging:\n"
 "  -o|--log-file FILE    log file name\n"
diff --git a/include/cr_options.h b/include/cr_options.h
index eac7283..eb89076 100644
--- a/include/cr_options.h
+++ b/include/cr_options.h
@@ -95,6 +95,7 @@ struct cr_options {
     bool            overlayfs;
     size_t            ghost_limit;
     struct list_head    irmap_scan_paths;
+    bool            ramdisk;
 };

 extern struct cr_options opts;
diff --git a/mount.c b/mount.c
index aea9807..b8f1b26 100644
--- a/mount.c
+++ b/mount.c
@@ -2246,6 +2246,25 @@ static int cr_pivot_root(char *root)
         }
     }

+    if (opts.ramdisk) {
+        if (mount(".", "/", NULL, MS_MOVE, NULL)) {
+            pr_perror("moving . to / failed");
+            return -1;
+        }
+
+        if (chroot(".")) {
+            pr_perror("chroot . failed");
+            return -1;
+        }
+
+        if (chdir("/")) {
+            pr_perror("chdir / failed");
+            return -1;
+        }
+
+        return 0;
+    }
+
     if (mkdtemp(put_root) == NULL) {
         pr_perror("Can't create a temporary directory");
         return -1;
-- 
1.9.1


More information about the CRIU mailing list