mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-17 16:47:50 +00:00
mount: Add ability to restore ro tmpfs
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. upd (by xemul@): any fs with restore method likely to need rw permission on restore. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
aef7ff040d
commit
d9fb201175
1 changed files with 9 additions and 4 deletions
13
mount.c
13
mount.c
|
|
@ -1841,20 +1841,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->restore && 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;
|
||||
}
|
||||
|
|
@ -1869,6 +1871,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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue