)]}'
{
  "commit": "74cb21553f4bf244185b9bec4c26e4e3169ad55e",
  "tree": "3f8f13e8dacc8f0876b01f62765a123ce1722b17",
  "parents": [
    "909d75a3b77bdd8baa9429bad3b69a654d2954ce"
  ],
  "author": {
    "name": "Paul Jackson",
    "email": "pj@sgi.com",
    "time": "Sun Jan 08 01:01:56 2006 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Sun Jan 08 20:13:44 2006 -0800"
  },
  "message": "[PATCH] cpuset: numa_policy_rebind cleanup\n\nCleanup, reorganize and make more robust the mempolicy.c code to rebind\nmempolicies relative to the containing cpuset after a tasks memory placement\nchanges.\n\nThe real motivator for this cleanup patch is to lay more groundwork for the\nupcoming patch to correctly rebind NUMA mempolicies that are attached to vma\u0027s\nafter the containing cpuset memory placement changes.\n\nNUMA mempolicies are constrained by the cpuset their task is a member of.\nWhen either (1) a task is moved to a different cpuset, or (2) the \u0027mems\u0027\nmems_allowed of a cpuset is changed, then the NUMA mempolicies have embedded\nnode numbers (for MPOL_BIND, MPOL_INTERLEAVE and MPOL_PREFERRED) that need to\nbe recalculated, relative to their new cpuset placement.\n\nThe old code used an unreliable method of determining what was the old\nmems_allowed constraining the mempolicy.  It just looked at the tasks\nmems_allowed value.  This sort of worked with the present code, that just\nrebinds the -task- mempolicy, and leaves any -vma- mempolicies broken,\nreferring to the old nodes.  But in an upcoming patch, the vma mempolicies\nwill be rebound as well.  Then the order in which the various task and vma\nmempolicies are updated will no longer be deterministic, and one can no longer\ncount on the task-\u003emems_allowed holding the old value for as long as needed.\nIt\u0027s not even clear if the current code was guaranteed to work reliably for\ntask mempolicies.\n\nSo I added a mems_allowed field to each mempolicy, stating exactly what\nmems_allowed the policy is relative to, and updated synchronously and reliably\nanytime that the mempolicy is rebound.\n\nAlso removed a useless wrapper routine, numa_policy_rebind(), and had its\ncaller, cpuset_update_task_memory_state(), call directly to the rewritten\npolicy_rebind() routine, and made that rebind routine extern instead of\nstatic, and added a \"mpol_\" prefix to its name, making it\nmpol_rebind_policy().\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "05fddd5bee5d316d8da53dcb8e85ceede32199e9",
      "old_mode": 33188,
      "old_path": "include/linux/mempolicy.h",
      "new_id": "74357cb9bc7ca0caeec26bbf6196be7a767d1abf",
      "new_mode": 33188,
      "new_path": "include/linux/mempolicy.h"
    },
    {
      "type": "modify",
      "old_id": "0d0dbbd6560a33c4d6a29c06380918c75c9bfa21",
      "old_mode": 33188,
      "old_path": "kernel/cpuset.c",
      "new_id": "8f764de3a9e786bb63a9ca7e0a5b4cc6d3b1fd3d",
      "new_mode": 33188,
      "new_path": "kernel/cpuset.c"
    },
    {
      "type": "modify",
      "old_id": "34d566ac147f54dffd4cc86cd240fcec5779345d",
      "old_mode": 33188,
      "old_path": "mm/mempolicy.c",
      "new_id": "c39bd86f4ea08a069ad5b1463b3df3806b671fdb",
      "new_mode": 33188,
      "new_path": "mm/mempolicy.c"
    }
  ]
}
