)]}'
{
  "commit": "e286781d5f2e9c846e012a39653a166e9d31777d",
  "tree": "14958fe6d8f3e0459c96c68b3034ea2433ab85ac",
  "parents": [
    "47feff2c8eefe85099f87c43d3096855f0085ca0"
  ],
  "author": {
    "name": "Nick Piggin",
    "email": "npiggin@suse.de",
    "time": "Fri Jul 25 19:45:30 2008 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sat Jul 26 12:00:06 2008 -0700"
  },
  "message": "mm: speculative page references\n\nIf we can be sure that elevating the page_count on a pagecache page will\npin it, we can speculatively run this operation, and subsequently check to\nsee if we hit the right page rather than relying on holding a lock or\notherwise pinning a reference to the page.\n\nThis can be done if get_page/put_page behaves consistently throughout the\nwhole tree (ie.  if we \"get\" the page after it has been used for something\nelse, we must be able to free it with a put_page).\n\nActually, there is a period where the count behaves differently: when the\npage is free or if it is a constituent page of a compound page.  We need\nan atomic_inc_not_zero operation to ensure we don\u0027t try to grab the page\nin either case.\n\nThis patch introduces the core locking protocol to the pagecache (ie.\nadds page_cache_get_speculative, and tweaks some update-side code to make\nit work).\n\nThanks to Hugh for pointing out an improvement to the algorithm setting\npage_count to zero when we have control of all references, in order to\nhold off speculative getters.\n\n[kamezawa.hiroyu@jp.fujitsu.com: fix migration_entry_wait()]\n[hugh@veritas.com: fix add_to_page_cache]\n[akpm@linux-foundation.org: repair a comment]\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nReviewed-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@suse.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": "83768df27806be9394fb087acac83ee6f87f08a0",
      "old_mode": 33188,
      "old_path": "drivers/net/cassini.c",
      "new_id": "f1936d51b458e387e3ba0ffef867f1e388bb8a90",
      "new_mode": 33188,
      "new_path": "drivers/net/cassini.c"
    },
    {
      "type": "modify",
      "old_id": "ee1ec2c7723c9505c47547b8559dbbf059bc011d",
      "old_mode": 33188,
      "old_path": "include/linux/pagemap.h",
      "new_id": "a81d818904221a30119aea1731e85512911aaf5e",
      "new_mode": 33188,
      "new_path": "include/linux/pagemap.h"
    },
    {
      "type": "modify",
      "old_id": "2d3ec1ffc66e1621b3db99a4105fb92115804e82",
      "old_mode": 33188,
      "old_path": "mm/filemap.c",
      "new_id": "4e182a9a14c05185043ded08a4d50137cd88a810",
      "new_mode": 33188,
      "new_path": "mm/filemap.c"
    },
    {
      "type": "modify",
      "old_id": "d8c65a65c61d5701b8ecbc9185ac864ef564707c",
      "old_mode": 33188,
      "old_path": "mm/migrate.c",
      "new_id": "3ca6392e82cc57ccf5634fd0b27f99fd6556c9d1",
      "new_mode": 33188,
      "new_path": "mm/migrate.c"
    },
    {
      "type": "modify",
      "old_id": "f92fea94d037b4b469cc8e55096f0e7d5f57cbf0",
      "old_mode": 33188,
      "old_path": "mm/shmem.c",
      "new_id": "1089092aecaf50ad41996ff8ac96415eb45d91fb",
      "new_mode": 33188,
      "new_path": "mm/shmem.c"
    },
    {
      "type": "modify",
      "old_id": "d8aadaf2a0baa5e87aff579039323585add00952",
      "old_mode": 33188,
      "old_path": "mm/swap_state.c",
      "new_id": "3e3381d6c7eee919e209834465add2277f987d22",
      "new_mode": 33188,
      "new_path": "mm/swap_state.c"
    },
    {
      "type": "modify",
      "old_id": "26672c6cd3cef37bd4b8d8df8512b814957b71f3",
      "old_mode": 33188,
      "old_path": "mm/vmscan.c",
      "new_id": "0075eac1cd0495aceb5e57abf6adaf4749e0188c",
      "new_mode": 33188,
      "new_path": "mm/vmscan.c"
    }
  ]
}
