)]}'
{
  "commit": "ab2af1f5005069321c5d130f09cce577b03f43ef",
  "tree": "73a70ba486f522cd9eeeef376ede2b5a1c1b473b",
  "parents": [
    "6e72ad2c581de121cc7e772469e2a8f6b1fd4379"
  ],
  "author": {
    "name": "Dipankar Sarma",
    "email": "dipankar@in.ibm.com",
    "time": "Fri Sep 09 13:04:13 2005 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Fri Sep 09 13:57:55 2005 -0700"
  },
  "message": "[PATCH] files: files struct with RCU\n\nPatch to eliminate struct files_struct.file_lock spinlock on the reader side\nand use rcu refcounting rcuref_xxx api for the f_count refcounter.  The\nupdates to the fdtable are done by allocating a new fdtable structure and\nsetting files-\u003efdt to point to the new structure.  The fdtable structure is\nprotected by RCU thereby allowing lock-free lookup.  For fd arrays/sets that\nare vmalloced, we use keventd to free them since RCU callbacks can\u0027t sleep.  A\nglobal list of fdtable to be freed is not scalable, so we use a per-cpu list.\nIf keventd is already handling the current cpu\u0027s work, we use a timer to defer\nqueueing of that work.\n\nSince the last publication, this patch has been re-written to avoid using\nexplicit memory barriers and use rcu_assign_pointer(), rcu_dereference()\npremitives instead.  This required that the fd information is kept in a\nseparate structure (fdtable) and updated atomically.\n\nSigned-off-by: Dipankar Sarma \u003cdipankar@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "201c1847fa07b694601a652e0e68db5f802eb042",
      "old_mode": 33188,
      "old_path": "fs/aio.c",
      "new_id": "38f62680fd63d70c96204c658b7a7aeedda23bd5",
      "new_mode": 33188,
      "new_path": "fs/aio.c"
    },
    {
      "type": "modify",
      "old_id": "bfecc623808358013379e400ccb4117bfbc8a57e",
      "old_mode": 33188,
      "old_path": "fs/fcntl.c",
      "new_id": "d2f3ed8acd932e92a21844fd6df19d7ad3a10b36",
      "new_mode": 33188,
      "new_path": "fs/fcntl.c"
    },
    {
      "type": "modify",
      "old_id": "f5926ce73f373a3eb4255e9024a91bf1784d1351",
      "old_mode": 33188,
      "old_path": "fs/file.c",
      "new_id": "2127a7b9dc3a6ad2bb214536bf23e83d5005441b",
      "new_mode": 33188,
      "new_path": "fs/file.c"
    },
    {
      "type": "modify",
      "old_id": "43e9e1737de2cb365c954afeddfb64ae0433779b",
      "old_mode": 33188,
      "old_path": "fs/file_table.c",
      "new_id": "86ec8ae985b413bd3d8b135ff8dfd9fe305ef5bf",
      "new_mode": 33188,
      "new_path": "fs/file_table.c"
    },
    {
      "type": "modify",
      "old_id": "b6542516a0cab8acd88c3f95f3db6998add7b579",
      "old_mode": 33188,
      "old_path": "fs/open.c",
      "new_id": "2fac58c51910cf250607a8f7161edc608d8c18cc",
      "new_mode": 33188,
      "new_path": "fs/open.c"
    },
    {
      "type": "modify",
      "old_id": "db372230848ed54aacc7841bd4ce289e464c9686",
      "old_mode": 33188,
      "old_path": "include/linux/file.h",
      "new_id": "f5bbd4c508b3da00b3af27dc20f2178996cc9496",
      "new_mode": 33188,
      "new_path": "include/linux/file.h"
    },
    {
      "type": "modify",
      "old_id": "fd93ab7da905041938a7e59473d086d4657a152b",
      "old_mode": 33188,
      "old_path": "include/linux/fs.h",
      "new_id": "7f61227827d760ee8ed89f4829484502b89a0253",
      "new_mode": 33188,
      "new_path": "include/linux/fs.h"
    },
    {
      "type": "modify",
      "old_id": "94aefa54a1b5f7b78f07c893806dade4b47ed3a7",
      "old_mode": 33188,
      "old_path": "include/linux/init_task.h",
      "new_id": "68ab5f2ab9cdb35bd8249f03b7e3b5b0bc54e443",
      "new_mode": 33188,
      "new_path": "include/linux/init_task.h"
    },
    {
      "type": "modify",
      "old_id": "83beb1e93b18c77d3f2fb1d2cfb21e3f9e66c28e",
      "old_mode": 33188,
      "old_path": "kernel/exit.c",
      "new_id": "6d2089a1bce74614009acfb18f1e3b95458e90cf",
      "new_mode": 33188,
      "new_path": "kernel/exit.c"
    },
    {
      "type": "modify",
      "old_id": "ecc694debb50ca1db8dcdea2cddb407d9f8ecead",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "8149f3602881db80727310245436c97a661adf2a",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    }
  ]
}
