)]}'
{
  "commit": "53f2556b6792ed99fde965f5e061749edd455623",
  "tree": "82a679e33bc8c305297cbe4655be0dac24728907",
  "parents": [
    "bea904d54d6faa92400f10c8ea3d3828b8e1eb93"
  ],
  "author": {
    "name": "Lee Schermerhorn",
    "email": "lee.schermerhorn@hp.com",
    "time": "Mon Apr 28 02:13:20 2008 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Mon Apr 28 08:58:24 2008 -0700"
  },
  "message": "mempolicy: mPOL_PREFERRED cleanups for \"local allocation\"\n\nHere are a couple of \"cleanups\" for MPOL_PREFERRED behavior when\nv.preferred_node \u003c 0 -- i.e., \"local allocation\":\n\n1)  [do_]get_mempolicy() calls the now renamed get_policy_nodemask()\n    to fetch the nodemask associated with a policy.  Currently,\n    get_policy_nodemask() returns the set of nodes with memory, when\n    the policy \u0027mode\u0027 is \u0027PREFERRED, and the preferred_node is \u003c 0.\n    Change to return an empty nodemask, as this is what was specified\n    to achieve \"local allocation\".\n\n2)  When a task is moved into a [new] cpuset, mpol_rebind_policy() is\n    called to adjust any task and vma policy nodes to be valid in the\n    new cpuset.  However, when the policy is MPOL_PREFERRED, and the\n    preferred_node is \u003c0, no rebind is necessary.  The \"local allocation\"\n    indication is valid in any cpuset.  Existing code will \"do the right\n    thing\" because node_remap() will just return the argument node when\n    it is outside of the valid range of node ids.  However, I think it is\n    clearer and cleaner to skip the remap explicitly in this case.\n\n3)  mpol_to_str() produces a printable, \"human readable\" string from a\n    struct mempolicy.  For MPOL_PREFERRED with preferred_node \u003c0,  show\n    \"local\", as this indicates local allocation, as the task migrates\n    among nodes.  Note that this matches the usage of \"local allocation\"\n    in libnuma() and numactl.  Without this change, I believe that node_set()\n    [via set_bit()] will set bit 31, resulting in a misleading display.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "fea4a5da6e4453897b425b0cdab6e08718299382",
      "old_mode": 33188,
      "old_path": "mm/mempolicy.c",
      "new_id": "7b3ae977b158e21677337549ece01befc33d21b0",
      "new_mode": 33188,
      "new_path": "mm/mempolicy.c"
    }
  ]
}
