[CRIU] [PATCH] mount: Add ability to restore ro tmpfs

Cyrill Gorcunov gorcunov at openvz.org
Wed May 27 05:22:21 PDT 2015


In case if we've dumped read only tmpfs
we fail restoring it because it's mounted
with ro flags. Lets mount it with rw,
restore content and then remount as ro.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 mount.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/mount.c b/mount.c
index e45b8b29866e..db5e8f19d6f7 100644
--- a/mount.c
+++ b/mount.c
@@ -1843,20 +1843,22 @@ skip_parent:
 	return 0;
 }
 
-#define MS_CHANGE_TYPE_MASK	\
-	(MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE)
-
 static int do_new_mount(struct mount_info *mi)
 {
+	unsigned long mflags = MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE;
 	char *src;
 	struct fstype *tp = mi->fstype;
+	bool remount_ro = (tp->code == FSTYPE__TMPFS && mi->flags & MS_RDONLY);
 
 	src = resolve_source(mi);
 	if (!src)
 		return -1;
 
+	if (remount_ro)
+		mflags |= MS_RDONLY;
+
 	if (mount(src, mi->mountpoint, tp->name,
-			mi->flags & ~MS_CHANGE_TYPE_MASK, mi->options) < 0) {
+			mi->flags & ~mflags, mi->options) < 0) {
 		pr_perror("Can't mount at %s", mi->mountpoint);
 		return -1;
 	}
@@ -1871,6 +1873,9 @@ static int do_new_mount(struct mount_info *mi)
 	if (tp->restore && tp->restore(mi))
 		return -1;
 
+	if (remount_ro)
+		return mount(NULL, mi->mountpoint, tp->name,
+			     MS_REMOUNT | MS_RDONLY, NULL);
 	return 0;
 }
 
-- 
2.1.0



More information about the CRIU mailing list