)]}'
{
  "commit": "e9995ef978a7d5296fe04a9a2c5ca6e66d8bb4e5",
  "tree": "df4324273856e06b8277b7e4a0fa9289eb8e6385",
  "parents": [
    "407f9c8b0889ced1dbe2f9157e4e60c61329d5c9"
  ],
  "author": {
    "name": "Hugh Dickins",
    "email": "hugh.dickins@tiscali.co.uk",
    "time": "Mon Dec 14 17:59:31 2009 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Tue Dec 15 08:53:20 2009 -0800"
  },
  "message": "ksm: rmap_walk to remove_migation_ptes\n\nA side-effect of making ksm pages swappable is that they have to be placed\non the LRUs: which then exposes them to isolate_lru_page() and hence to\npage migration.\n\nAdd rmap_walk() for remove_migration_ptes() to use: rmap_walk_anon() and\nrmap_walk_file() in rmap.c, but rmap_walk_ksm() in ksm.c.  Perhaps some\nconsolidation with existing code is possible, but don\u0027t attempt that yet\n(try_to_unmap needs to handle nonlinears, but migration pte removal does\nnot).\n\nrmap_walk() is sadly less general than it appears: rmap_walk_anon(), like\nremove_anon_migration_ptes() which it replaces, avoids calling\npage_lock_anon_vma(), because that includes a page_mapped() test which\nfails when all migration ptes are in place.  That was valid when NUMA page\nmigration was introduced (holding mmap_sem provided the missing guarantee\nthat anon_vma\u0027s slab had not already been destroyed), but I believe not\nvalid in the memory hotremove case added since.\n\nFor now do the same as before, and consider the best way to fix that\nunlikely race later on.  When fixed, we can probably use rmap_walk() on\nhwpoisoned ksm pages too: for now, they remain among hwpoison\u0027s various\nexceptions (its PageKsm test comes before the page is locked, but its\npage_lock_anon_vma fails safely if an anon gets upgraded).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@redhat.com\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": "157d83dbaef890eddef04a17d1cc12aab4f07445",
      "old_mode": 33188,
      "old_path": "include/linux/ksm.h",
      "new_id": "bed5f16ba8270ee742959f898e1e1fe7aea8970f",
      "new_mode": 33188,
      "new_path": "include/linux/ksm.h"
    },
    {
      "type": "modify",
      "old_id": "980094a527ee7780bfc2f6bdf79c01b9da1b6060",
      "old_mode": 33188,
      "old_path": "include/linux/rmap.h",
      "new_id": "b019ae64e2ab1d356daf92aaa7e92547227246c7",
      "new_mode": 33188,
      "new_path": "include/linux/rmap.h"
    },
    {
      "type": "modify",
      "old_id": "20f46a7b2799aaca1366348a3929897c32a0c27c",
      "old_mode": 33188,
      "old_path": "mm/ksm.c",
      "new_id": "dfdc292d3626d43ab638871e103dcba9899d29b5",
      "new_mode": 33188,
      "new_path": "mm/ksm.c"
    },
    {
      "type": "modify",
      "old_id": "367272d0442311c9ec4e38f3ae2c99618ea04f63",
      "old_mode": 33188,
      "old_path": "mm/migrate.c",
      "new_id": "0b714747c02855badf9f9b39e347ea650aad31f5",
      "new_mode": 33188,
      "new_path": "mm/migrate.c"
    },
    {
      "type": "modify",
      "old_id": "2e38e904832729f8a7d99af924bc92f85fedb072",
      "old_mode": 33188,
      "old_path": "mm/rmap.c",
      "new_id": "c81bedd7d52794daa512d1f884c4f61199d4cce1",
      "new_mode": 33188,
      "new_path": "mm/rmap.c"
    }
  ]
}
