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

Pavel Emelyanov xemul at parallels.com
Wed May 27 05:45:35 PDT 2015


On 05/27/2015 03:22 PM, Cyrill Gorcunov wrote:
> 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);

The same can be required for devtmpfs too. I would say that any fs with ->restore
callback might want to see the mountpoint writable :)

>  	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;
>  }
>  
> 



More information about the CRIU mailing list