• P
    procfs: introduce the /proc/<pid>/map_files/ directory · 640708a2
    Pavel Emelyanov 提交于
    This one behaves similarly to the /proc/<pid>/fd/ one - it contains
    symlinks one for each mapping with file, the name of a symlink is
    "vma->vm_start-vma->vm_end", the target is the file.  Opening a symlink
    results in a file that point exactly to the same inode as them vma's one.
    
    For example the ls -l of some arbitrary /proc/<pid>/map_files/
    
     | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80403000-7f8f80404000 -> /lib64/libc-2.5.so
     | lr-x------ 1 root root 64 Aug 26 06:40 7f8f8061e000-7f8f80620000 -> /lib64/libselinux.so.1
     | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80826000-7f8f80827000 -> /lib64/libacl.so.1.1.0
     | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80a2f000-7f8f80a30000 -> /lib64/librt-2.5.so
     | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80a30000-7f8f80a4c000 -> /lib64/ld-2.5.so
    
    This *helps* checkpointing process in three ways:
    
    1. When dumping a task mappings we do know exact file that is mapped
       by particular region.  We do this by opening
       /proc/$pid/map_files/$address symlink the way we do with file
       descriptors.
    
    2. This also helps in determining which anonymous shared mappings are
       shared with each other by comparing the inodes of them.
    
    3. When restoring a set of processes in case two of them has a mapping
       shared, we map the memory by the 1st one and then open its
       /proc/$pid/map_files/$address file and map it by the 2nd task.
    
    Using /proc/$pid/maps for this is quite inconvenient since it brings
    repeatable re-reading and reparsing for this text file which slows down
    restore procedure significantly.  Also as being pointed in (3) it is a way
    easier to use top level shared mapping in children as
    /proc/$pid/map_files/$address when needed.
    
    [akpm@linux-foundation.org: coding-style fixes]
    [gorcunov@openvz.org: make map_files depend on CHECKPOINT_RESTORE]
    Signed-off-by: NPavel Emelyanov <xemul@parallels.com>
    Signed-off-by: NCyrill Gorcunov <gorcunov@openvz.org>
    Reviewed-by: NVasiliy Kulikov <segoon@openwall.com>
    Reviewed-by: N"Kirill A. Shutemov" <kirill@shutemov.name>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Pavel Machek <pavel@ucw.cz>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    640708a2
base.c 86.1 KB