)]}'
{
  "commit": "aa45484031ddee09b06350ab8528bfe5b2c76d1c",
  "tree": "6758072232db9a54453022ec3e6cede35d52001c",
  "parents": [
    "72853e2991a2702ae93aaf889ac7db743a415dd3"
  ],
  "author": {
    "name": "Christoph Lameter",
    "email": "cl@linux.com",
    "time": "Thu Sep 09 16:38:17 2010 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Thu Sep 09 18:57:25 2010 -0700"
  },
  "message": "mm: page allocator: calculate a better estimate of NR_FREE_PAGES when memory is low and kswapd is awake\n\nOrdinarily watermark checks are based on the vmstat NR_FREE_PAGES as it is\ncheaper than scanning a number of lists.  To avoid synchronization\noverhead, counter deltas are maintained on a per-cpu basis and drained\nboth periodically and when the delta is above a threshold.  On large CPU\nsystems, the difference between the estimated and real value of\nNR_FREE_PAGES can be very high.  If NR_FREE_PAGES is much higher than\nnumber of real free page in buddy, the VM can allocate pages below min\nwatermark, at worst reducing the real number of pages to zero.  Even if\nthe OOM killer kills some victim for freeing memory, it may not free\nmemory if the exit path requires a new page resulting in livelock.\n\nThis patch introduces a zone_page_state_snapshot() function (courtesy of\nChristoph) that takes a slightly more accurate view of an arbitrary vmstat\ncounter.  It is used to read NR_FREE_PAGES while kswapd is awake to avoid\nthe watermark being accidentally broken.  The estimate is not perfect and\nmay result in cache line bounces but is expected to be lighter than the\nIPI calls necessary to continually drain the per-cpu counters while kswapd\nis awake.\n\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\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": "6e6e62648a4d4a6d792fe207d42105563b112aaa",
      "old_mode": 33188,
      "old_path": "include/linux/mmzone.h",
      "new_id": "3984c4eb41fdc9c85759dbffe308df5a806391f4",
      "new_mode": 33188,
      "new_path": "include/linux/mmzone.h"
    },
    {
      "type": "modify",
      "old_id": "7f43ccdc1d38c0eb919efe4891e1b91ec19c3705",
      "old_mode": 33188,
      "old_path": "include/linux/vmstat.h",
      "new_id": "eaaea37b3b75dd64b73a34a0e3beb31417bdd0d6",
      "new_mode": 33188,
      "new_path": "include/linux/vmstat.h"
    },
    {
      "type": "modify",
      "old_id": "f5b7d1760213e53db3c46e84dde56daf219ea0cd",
      "old_mode": 33188,
      "old_path": "mm/mmzone.c",
      "new_id": "e35bfb82c8555b7377334dbea42bfcf588b0bab8",
      "new_mode": 33188,
      "new_path": "mm/mmzone.c"
    },
    {
      "type": "modify",
      "old_id": "452e2ba06c7cfdfd87adf00421ff665a76b624f0",
      "old_mode": 33188,
      "old_path": "mm/page_alloc.c",
      "new_id": "b2d21e06d45d0bee493d94baafa1d4027f38b859",
      "new_mode": 33188,
      "new_path": "mm/page_alloc.c"
    },
    {
      "type": "modify",
      "old_id": "a8d6b59e609a390d6e5d33c4560d1cb3a47814b8",
      "old_mode": 33188,
      "old_path": "mm/vmstat.c",
      "new_id": "355a9e669aaa800d62fa31d2b83110bf76cce9d7",
      "new_mode": 33188,
      "new_path": "mm/vmstat.c"
    }
  ]
}
