)]}'
{
  "commit": "1fd36adcd98c14d2fd97f545293c488775cb2823",
  "tree": "c13ab1934a15aebe0d81601d910ce5a3c6fa2c6f",
  "parents": [
    "1dce27c5aa6770e9d195f2bb7db1db3d4dde5591"
  ],
  "author": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Feb 16 17:49:54 2012 +0000"
  },
  "committer": {
    "name": "H. Peter Anvin",
    "email": "hpa@zytor.com",
    "time": "Sun Feb 19 10:30:57 2012 -0800"
  },
  "message": "Replace the fd_sets in struct fdtable with an array of unsigned longs\n\nReplace the fd_sets in struct fdtable with an array of unsigned longs and then\nuse the standard non-atomic bit operations rather than the FD_* macros.\n\nThis:\n\n (1) Removes the abuses of struct fd_set:\n\n     (a) Since we don\u0027t want to allocate a full fd_set the vast majority of the\n     \t time, we actually, in effect, just allocate a just-big-enough array of\n     \t unsigned longs and cast it to an fd_set type - so why bother with the\n     \t fd_set at all?\n\n     (b) Some places outside of the core fdtable handling code (such as\n     \t SELinux) want to look inside the array of unsigned longs hidden inside\n     \t the fd_set struct for more efficient iteration over the entire set.\n\n (2) Eliminates the use of FD_*() macros in the kernel completely.\n\n (3) Permits the __FD_*() macros to be deleted entirely where not exposed to\n     userspace.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nLink: http://lkml.kernel.org/r/20120216174954.23314.48147.stgit@warthog.procyon.org.uk\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "22cc38d9e79fe20bd1de74ce7d655500b7c273c8",
      "old_mode": 33188,
      "old_path": "fs/exec.c",
      "new_id": "cfd5e3047bd8ab93fb10b1e47e14ef438c867992",
      "new_mode": 33188,
      "new_path": "fs/exec.c"
    },
    {
      "type": "modify",
      "old_id": "114fea0a2cec797b84cce227e768eeea00b52972",
      "old_mode": 33188,
      "old_path": "fs/file.c",
      "new_id": "2d479dd8484ed57e7126f00fbcc810bce70cdd43",
      "new_mode": 33188,
      "new_path": "fs/file.c"
    },
    {
      "type": "modify",
      "old_id": "d33418fdc858fbbe7f929d692dae1533c2e9a271",
      "old_mode": 33188,
      "old_path": "fs/select.c",
      "new_id": "2e7fbe8a092c901cc4fb37984f7a95ad01735233",
      "new_mode": 33188,
      "new_path": "fs/select.c"
    },
    {
      "type": "modify",
      "old_id": "7675da2c18f724c5d6c23de05635d30cb2e467b9",
      "old_mode": 33188,
      "old_path": "include/linux/fdtable.h",
      "new_id": "158a41eed3140b9b2870f419b8ca3c95ed3a4763",
      "new_mode": 33188,
      "new_path": "include/linux/fdtable.h"
    },
    {
      "type": "modify",
      "old_id": "4b4042f9bc6ade78a14199eb4ce96dc4ce6236b3",
      "old_mode": 33188,
      "old_path": "kernel/exit.c",
      "new_id": "4db020015f14aa90c5217846924200ac51d1e172",
      "new_mode": 33188,
      "new_path": "kernel/exit.c"
    },
    {
      "type": "modify",
      "old_id": "6a3683e28426b132d5890398609710bca7397310",
      "old_mode": 33188,
      "old_path": "security/selinux/hooks.c",
      "new_id": "421c990a20b280d6ff67c0cbfa33ad706cb71baf",
      "new_mode": 33188,
      "new_path": "security/selinux/hooks.c"
    }
  ]
}
