[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