)]}'
{
  "commit": "99ab7b19440a72ebdf225f99b20f8ef40decee86",
  "tree": "74ac6a77d44e5ee0657456c1335ec74edd5c3d0e",
  "parents": [
    "07b4e2bc9c35ea88cbd36d806fcd5e3bcbf022be"
  ],
  "author": {
    "name": "Yinghai Lu",
    "email": "yinghai@kernel.org",
    "time": "Wed Jul 11 14:02:53 2012 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Wed Jul 11 16:04:49 2012 -0700"
  },
  "message": "mm: sparse: fix usemap allocation above node descriptor section\n\nAfter commit f5bf18fa22f8 (\"bootmem/sparsemem: remove limit constraint\nin alloc_bootmem_section\"), usemap allocations may easily be placed\noutside the optimal section that holds the node descriptor, even if\nthere is space available in that section.  This results in unnecessary\nhotplug dependencies that need to have the node unplugged before the\nsection holding the usemap.\n\nThe reason is that the bootmem allocator doesn\u0027t guarantee a linear\nsearch starting from the passed allocation goal but may start out at a\nmuch higher address absent an upper limit.\n\nFix this by trying the allocation with the limit at the section end,\nthen retry without if that fails.  This keeps the fix from f5bf18fa22f8\nof not panicking if the allocation does not fit in the section, but\nstill makes sure to try to stay within the section at first.\n\nSigned-off-by: Yinghai Lu \u003cyinghai@kernel.org\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t[3.3.x, 3.4.x]\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": "324fe08ea3b140b7b8b92f7129ad334df2e260d5",
      "old_mode": 33188,
      "old_path": "include/linux/bootmem.h",
      "new_id": "6d6795d46a7509f01e4a12993e9c7de34b02d975",
      "new_mode": 33188,
      "new_path": "include/linux/bootmem.h"
    },
    {
      "type": "modify",
      "old_id": "ec4fcb7a56c8975492d656940906af6153136e51",
      "old_mode": 33188,
      "old_path": "mm/bootmem.c",
      "new_id": "73096630cb35ac4d04209251f5cfba77f0c765ed",
      "new_mode": 33188,
      "new_path": "mm/bootmem.c"
    },
    {
      "type": "modify",
      "old_id": "d23415c001bc4c5847986c7659261ca335888382",
      "old_mode": 33188,
      "old_path": "mm/nobootmem.c",
      "new_id": "0900b3910cda20472520192ad19e9db8f500b513",
      "new_mode": 33188,
      "new_path": "mm/nobootmem.c"
    },
    {
      "type": "modify",
      "old_id": "e861397016a9e89ad49732c1b8174e455e19ca0b",
      "old_mode": 33188,
      "old_path": "mm/sparse.c",
      "new_id": "c7bb952400c83c9114a401f647955cb18dd2ea44",
      "new_mode": 33188,
      "new_path": "mm/sparse.c"
    }
  ]
}
