)]}'
{
  "commit": "ce8d2cdf3d2b73e346c82e6f0a46da331df6364c",
  "tree": "bf3597f2d4f57d6e30a7703d7fce0dbf8c757962",
  "parents": [
    "348366b963e4e1462c8354827a9cb910aa865bf2"
  ],
  "author": {
    "name": "Dave Hansen",
    "email": "haveblue@us.ibm.com",
    "time": "Tue Oct 16 23:31:13 2007 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@woody.linux-foundation.org",
    "time": "Wed Oct 17 08:43:04 2007 -0700"
  },
  "message": "r/o bind mounts: filesystem helpers for custom \u0027struct file\u0027s\n\nWhy do we need r/o bind mounts?\n\nThis feature allows a read-only view into a read-write filesystem.  In the\nprocess of doing that, it also provides infrastructure for keeping track of\nthe number of writers to any given mount.\n\nThis has a number of uses.  It allows chroots to have parts of filesystems\nwritable.  It will be useful for containers in the future because users may\nhave root inside a container, but should not be allowed to write to\nsomefilesystems.  This also replaces patches that vserver has had out of the\ntree for several years.\n\nIt allows security enhancement by making sure that parts of your filesystem\nread-only (such as when you don\u0027t trust your FTP server), when you don\u0027t want\nto have entire new filesystems mounted, or when you want atime selectively\nupdated.  I\u0027ve been using the following script to test that the feature is\nworking as desired.  It takes a directory and makes a regular bind and a r/o\nbind mount of it.  It then performs some normal filesystem operations on the\nthree directories, including ones that are expected to fail, like creating a\nfile on the r/o mount.\n\nThis patch:\n\nSome filesystems forego the vfs and may_open() and create their own \u0027struct\nfile\u0027s.\n\nThis patch creates a couple of helper functions which can be used by these\nfilesystems, and will provide a unified place which the r/o bind mount code\nmay patch.\n\nAlso, rename an existing, static-scope init_file() to a less generic name.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\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": "2f436d4f1d6db5ab11eacf6c5f3a766f70b03780",
      "old_mode": 33188,
      "old_path": "fs/configfs/dir.c",
      "new_id": "50ed691098bc83f6d9058ccb8bc3bbdd142a15d1",
      "new_mode": 33188,
      "new_path": "fs/configfs/dir.c"
    },
    {
      "type": "modify",
      "old_id": "ce3f39a4798a362c615ed51a2be83e4b616c8a86",
      "old_mode": 33188,
      "old_path": "fs/file_table.c",
      "new_id": "3176fefc92e139771a9c9065524c26e8e437e7fa",
      "new_mode": 33188,
      "new_path": "fs/file_table.c"
    },
    {
      "type": "modify",
      "old_id": "0f5df73dbb73990768a30b0bf50db498f0e6e8ee",
      "old_mode": 33188,
      "old_path": "fs/hugetlbfs/inode.c",
      "new_id": "12aca8ed605f1616b1f1deda3867464780fcf66d",
      "new_mode": 33188,
      "new_path": "fs/hugetlbfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "0114fbc78061249fc765e8197fb06f5a512a6ea9",
      "old_mode": 33188,
      "old_path": "include/linux/file.h",
      "new_id": "56023c74e9fd65ec1b3c559da66a271435f15067",
      "new_mode": 33188,
      "new_path": "include/linux/file.h"
    },
    {
      "type": "modify",
      "old_id": "b8884c288ecc868042921bba34f094d81586a280",
      "old_mode": 33188,
      "old_path": "ipc/shm.c",
      "new_id": "5fc5cf50cf1b847fc630cf2e127f37005337bb94",
      "new_mode": 33188,
      "new_path": "ipc/shm.c"
    },
    {
      "type": "modify",
      "old_id": "6fa20a84daa01e1afca5a01ec2ae01b9ec9bac9e",
      "old_mode": 33188,
      "old_path": "mm/shmem.c",
      "new_id": "289dbb0a6fd6dff9e983a42ac7d0f1fdd964e5a3",
      "new_mode": 33188,
      "new_path": "mm/shmem.c"
    },
    {
      "type": "modify",
      "old_id": "8803471593fd7135ded6359d2a249c39a0d29815",
      "old_mode": 33188,
      "old_path": "mm/tiny-shmem.c",
      "new_id": "d436a9c82db7739618dee05886c0088aaea7728a",
      "new_mode": 33188,
      "new_path": "mm/tiny-shmem.c"
    },
    {
      "type": "modify",
      "old_id": "3cd96fe8191d260d534f97553d6e35737d14bfd0",
      "old_mode": 33188,
      "old_path": "net/socket.c",
      "new_id": "540013ea86206e0aeb40d567fc6f1482f6238ba0",
      "new_mode": 33188,
      "new_path": "net/socket.c"
    }
  ]
}
