[CRIU] [PATCH] Ignore mnt_id value for AUFS file descriptors.

Pavel Emelyanov xemul at parallels.com
Mon Feb 9 03:07:52 PST 2015


On 02/03/2015 01:19 AM, Saied Kazemi wrote:
> Starting with version 3.15, the kernel provides a mnt_id field in
> /proc/<pid>/fdinfo/<fd>.  However, the value provided by the kernel for
> AUFS file descriptors obtained by opening a file in /proc/<pid>/map_files
> is incorrect.
> 
> Below is an example for a Docker container running Nginx.  The mntid
> program below mimics CRIU by opening a file in /proc/1/map_files and
> using the descriptor to obtain its mnt_id.  As shown below, mnt_id is
> set to 22 by the kernel but it does not exist in the mount namespace of
> the container.  Therefore, CRIU fails with the error:
> 
> 	"Unable to look up the 22 mount"
> 
> In the global namespace, 22 is the root of AUFS (/var/lib/docker/aufs).
> 
> This patch sets the mnt_id of these AUFS descriptors to -1, mimicing
> pre-3.15 kernel behavior.
> 
> 	$ docker ps
> 	CONTAINER ID        IMAGE                    ...
> 	3850a63ee857        nginx-streaming:latest   ...
> 	$ docker exec -it 38 bash -i
> 	root at 3850a63ee857:/# ps -e
> 	  PID TTY          TIME CMD
> 	    1 ?        00:00:00 nginx
> 	    7 ?        00:00:00 nginx
> 	   31 ?        00:00:00 bash
> 	   46 ?        00:00:00 ps
> 	root at 3850a63ee857:/# ./mntid 1
> 	open("/proc/1/map_files/400000-4b8000") = 3
> 	cat /proc/49/fdinfo/3
> 	pos:	0
> 	flags:	0100000
> 	mnt_id:	22
> 	root at 3850a63ee857:/# awk '{print $1 " " $2}' /proc/1/mountinfo
> 	87 58
> 	103 87
> 	104 87
> 	105 104
> 	106 104
> 	107 104
> 	108 87
> 	109 87
> 	110 87
> 	111 87
> 	root at 3850a63ee857:/# exit
> 	$ grep 22 /proc/self/mountinfo
> 	22 21 8:1 /var/lib/docker/aufs /var/lib/docker/aufs ...
> 	44 22 0:35 / /var/lib/docker/aufs/mnt/<ID> ...
> 	$
> 
> Signed-off-by: Saied Kazemi <saied at google.com>

Applied, thanks!



More information about the CRIU mailing list