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

ismael i.fezzaz at gmail.com
Sat Oct 31 15:51:27 PDT 2015


Le Thu, 29 Oct 2015 13:55:08 +0300,
Andrew Vagin <avagin at odin.com> a écrit :

> On Mon, Oct 26, 2015 at 11:01:11PM +0100, Ismaël FEZZAZ wrote:
> > 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':
> >              {

The option number in the switch was wrong, here is the fixed version.
Sorry for that.

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..865b6fc 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 1071:
+			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