)]}'
{
  "commit": "b4df2b92d8461444fac429c75ba6e125c63056bc",
  "tree": "15149c192776b817eeb6124978f74411490aa1ce",
  "parents": [
    "fe0bdec68b77020281dc814805edfe594ae89e0f"
  ],
  "author": {
    "name": "Alexey Dobriyan",
    "email": "adobriyan@gmail.com",
    "time": "Mon Oct 27 22:48:36 2008 +0300"
  },
  "committer": {
    "name": "Alexey Dobriyan",
    "email": "adobriyan@gmail.com",
    "time": "Mon Jan 05 12:27:44 2009 +0300"
  },
  "message": "proc: stop using BKL\n\nThere are four BKL users in proc: de_put(), proc_lookup_de(),\nproc_readdir_de(), proc_root_readdir(),\n\n1) de_put()\n-----------\nde_put() is classic atomic_dec_and_test() refcount wrapper -- no BKL\nneeded. BKL doesn\u0027t matter to possible refcount leak as well.\n\n2) proc_lookup_de()\n-------------------\nWalking PDE list is protected by proc_subdir_lock(), proc_get_inode() is\npotentially blocking, all callers of proc_lookup_de() eventually end up\nfrom -\u003elookup hooks which is protected by directory\u0027s -\u003ei_mutex -- BKL\ndoesn\u0027t protect anything.\n\n3) proc_readdir_de()\n--------------------\n\".\" and \"..\" part doesn\u0027t need BKL, walking PDE list is under\nproc_subdir_lock, calling filldir callback is potentially blocking\nbecause it writes to luserspace. All proc_readdir_de() callers\neventually come from -\u003ereaddir hook which is under directory\u0027s\n-\u003ei_mutex -- BKL doesn\u0027t protect anything.\n\n4) proc_root_readdir_de()\n-------------------------\nproc_root_readdir_de is -\u003ereaddir hook, see (3).\n\nSince readdir hooks doesn\u0027t use BKL anymore, switch to\ngeneric_file_llseek, since it also takes directory\u0027s i_mutex.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "60a359b355821a032c36d22beb4740fdc763075e",
      "old_mode": 33188,
      "old_path": "fs/proc/generic.c",
      "new_id": "db7fa5cab988b1679ebc80a8135cb838a167eda5",
      "new_mode": 33188,
      "new_path": "fs/proc/generic.c"
    },
    {
      "type": "modify",
      "old_id": "2543fd00c6589cc8218169f16b0214de9c063f81",
      "old_mode": 33188,
      "old_path": "fs/proc/inode.c",
      "new_id": "3e76bb9b3ad668d8ceab574a8f6d7d4a5f2e6ef6",
      "new_mode": 33188,
      "new_path": "fs/proc/inode.c"
    },
    {
      "type": "modify",
      "old_id": "7bc296f424aebcb66cf89b2f0c9678f787c37a1d",
      "old_mode": 33188,
      "old_path": "fs/proc/proc_net.c",
      "new_id": "04d1270f1c38687da3e925ef395e73dfcdd79022",
      "new_mode": 33188,
      "new_path": "fs/proc/proc_net.c"
    },
    {
      "type": "modify",
      "old_id": "7761602af9de4f7290f33c50a8d97e2f1f31c2ec",
      "old_mode": 33188,
      "old_path": "fs/proc/root.c",
      "new_id": "f6299a25594e78a7527972930104924434c361c9",
      "new_mode": 33188,
      "new_path": "fs/proc/root.c"
    }
  ]
}
