)]}'
{
  "commit": "640708a2cff7f81e246243b0073c66e6ece7e53e",
  "tree": "8cc00ae2b374bf6750ad9ca20da3566e28cfc9ff",
  "parents": [
    "7773fbc54182a90cd248656619c7d33859e5f91d"
  ],
  "author": {
    "name": "Pavel Emelyanov",
    "email": "xemul@parallels.com",
    "time": "Tue Jan 10 15:11:23 2012 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Tue Jan 10 16:30:54 2012 -0800"
  },
  "message": "procfs: introduce the /proc/\u003cpid\u003e/map_files/ directory\n\nThis one behaves similarly to the /proc/\u003cpid\u003e/fd/ one - it contains\nsymlinks one for each mapping with file, the name of a symlink is\n\"vma-\u003evm_start-vma-\u003evm_end\", the target is the file.  Opening a symlink\nresults in a file that point exactly to the same inode as them vma\u0027s one.\n\nFor example the ls -l of some arbitrary /proc/\u003cpid\u003e/map_files/\n\n | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80403000-7f8f80404000 -\u003e /lib64/libc-2.5.so\n | lr-x------ 1 root root 64 Aug 26 06:40 7f8f8061e000-7f8f80620000 -\u003e /lib64/libselinux.so.1\n | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80826000-7f8f80827000 -\u003e /lib64/libacl.so.1.1.0\n | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80a2f000-7f8f80a30000 -\u003e /lib64/librt-2.5.so\n | lr-x------ 1 root root 64 Aug 26 06:40 7f8f80a30000-7f8f80a4c000 -\u003e /lib64/ld-2.5.so\n\nThis *helps* checkpointing process in three ways:\n\n1. When dumping a task mappings we do know exact file that is mapped\n   by particular region.  We do this by opening\n   /proc/$pid/map_files/$address symlink the way we do with file\n   descriptors.\n\n2. This also helps in determining which anonymous shared mappings are\n   shared with each other by comparing the inodes of them.\n\n3. When restoring a set of processes in case two of them has a mapping\n   shared, we map the memory by the 1st one and then open its\n   /proc/$pid/map_files/$address file and map it by the 2nd task.\n\nUsing /proc/$pid/maps for this is quite inconvenient since it brings\nrepeatable re-reading and reparsing for this text file which slows down\nrestore procedure significantly.  Also as being pointed in (3) it is a way\neasier to use top level shared mapping in children as\n/proc/$pid/map_files/$address when needed.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[gorcunov@openvz.org: make map_files depend on CHECKPOINT_RESTORE]\nSigned-off-by: Pavel Emelyanov \u003cxemul@parallels.com\u003e\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nReviewed-by: Vasiliy Kulikov \u003csegoon@openwall.com\u003e\nReviewed-by: \"Kirill A. Shutemov\" \u003ckirill@shutemov.name\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nCc: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e31d95055c67c539889c13e3f379fa264f01afa0",
      "old_mode": 33188,
      "old_path": "fs/proc/base.c",
      "new_id": "4d755fed3ecbe0241913c562ddff3ccec59bbc21",
      "new_mode": 33188,
      "new_path": "fs/proc/base.c"
    },
    {
      "type": "modify",
      "old_id": "5568553a41fd60f9c5710e18a7b5aa48d79ac051",
      "old_mode": 33188,
      "old_path": "include/linux/mm.h",
      "new_id": "6eba2cc016c95cf1c8af5ad8ea1ded7172024a7b",
      "new_mode": 33188,
      "new_path": "include/linux/mm.h"
    }
  ]
}
