)]}'
{
  "commit": "7e59eda7bd05cbb2ee709ebf5527b475cab3dc30",
  "tree": "d7a06c73f903a1b9658c07e71c15d659e38fbf6f",
  "parents": [
    "949d21501a8f6515586622d470350de42a599317"
  ],
  "author": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Feb 23 17:36:25 2012 +0000"
  },
  "committer": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Feb 23 17:36:25 2012 +0000"
  },
  "message": "NFS: nfs_migrate_page() does not wait for FS-Cache to finish with a page\n\nnfs_migrate_page() does not wait for FS-Cache to finish with a page, probably\nleading to the following bad-page-state:\n\n BUG: Bad page state in process python-bin  pfn:17d39b\n page:ffffea00053649e8 flags:004000000000100c count:0 mapcount:0 mapping:(null)\nindex:38686 (Tainted: G    B      ---------------- )\n Pid: 31053, comm: python-bin Tainted: G    B      ----------------\n2.6.32-71.24.1.el6.x86_64 #1\n Call Trace:\n [\u003cffffffff8111bfe7\u003e] bad_page+0x107/0x160\n [\u003cffffffff8111ee69\u003e] free_hot_cold_page+0x1c9/0x220\n [\u003cffffffff8111ef19\u003e] __pagevec_free+0x59/0xb0\n [\u003cffffffff8104b988\u003e] ? flush_tlb_others_ipi+0x128/0x130\n [\u003cffffffff8112230c\u003e] release_pages+0x21c/0x250\n [\u003cffffffff8115b92a\u003e] ? remove_migration_pte+0x28a/0x2b0\n [\u003cffffffff8115f3f8\u003e] ? mem_cgroup_get_reclaim_stat_from_page+0x18/0x70\n [\u003cffffffff81122687\u003e] ____pagevec_lru_add+0x167/0x180\n [\u003cffffffff811226f8\u003e] __lru_cache_add+0x58/0x70\n [\u003cffffffff81122731\u003e] lru_cache_add_lru+0x21/0x40\n [\u003cffffffff81123f49\u003e] putback_lru_page+0x69/0x100\n [\u003cffffffff8115c0bd\u003e] migrate_pages+0x13d/0x5d0\n [\u003cffffffff81122687\u003e] ? ____pagevec_lru_add+0x167/0x180\n [\u003cffffffff81152ab0\u003e] ? compaction_alloc+0x0/0x370\n [\u003cffffffff8115255c\u003e] compact_zone+0x4cc/0x600\n [\u003cffffffff8111cfac\u003e] ? get_page_from_freelist+0x15c/0x820\n [\u003cffffffff810672f4\u003e] ? check_preempt_wakeup+0x1c4/0x3c0\n [\u003cffffffff8115290e\u003e] compact_zone_order+0x7e/0xb0\n [\u003cffffffff81152a49\u003e] try_to_compact_pages+0x109/0x170\n [\u003cffffffff8111e94d\u003e] __alloc_pages_nodemask+0x5ed/0x850\n [\u003cffffffff814c9136\u003e] ? thread_return+0x4e/0x778\n [\u003cffffffff81150d43\u003e] alloc_pages_vma+0x93/0x150\n [\u003cffffffff81167ea5\u003e] do_huge_pmd_anonymous_page+0x135/0x340\n [\u003cffffffff814cb6f6\u003e] ? rwsem_down_read_failed+0x26/0x30\n [\u003cffffffff81136755\u003e] handle_mm_fault+0x245/0x2b0\n [\u003cffffffff814ce383\u003e] do_page_fault+0x123/0x3a0\n [\u003cffffffff814cbdf5\u003e] page_fault+0x25/0x30\n\nnfs_migrate_page() calls nfs_fscache_release_page() which doesn\u0027t actually wait\n- even if __GFP_WAIT is set.  The reason that doesn\u0027t wait is that\nfscache_maybe_release_page() might deadlock the allocator as the work threads\nwriting to the cache may all end up sleeping on memory allocation.\n\nHowever, I wonder if that is actually a problem.  There are a number of things\nI can do to deal with this:\n\n (1) Make nfs_migrate_page() wait.\n\n (2) Make fscache_maybe_release_page() honour the __GFP_WAIT flag.\n\n (3) Set a timeout around the wait.\n\n (4) Make nfs_migrate_page() return an error if the page is still busy.\n\nFor the moment, I\u0027ll select (2) and (4).\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Jeff Layton \u003cjlayton@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dcb3e1d5dbf65cc0b2639ccffb1a826ab8188f44",
      "old_mode": 33188,
      "old_path": "fs/fscache/internal.h",
      "new_id": "88a48ccb7d9e23160da7c284b6e88705d0ec1587",
      "new_mode": 33188,
      "new_path": "fs/fscache/internal.h"
    },
    {
      "type": "modify",
      "old_id": "4dbbca1626202505be57033b8f4429eae2293bb8",
      "old_mode": 33188,
      "old_path": "fs/fscache/page.c",
      "new_id": "f9b2fb3ae49250addd153f5c705ea5786f6256b2",
      "new_mode": 33188,
      "new_path": "fs/fscache/page.c"
    },
    {
      "type": "modify",
      "old_id": "51cdaee14109abcddb038a93ebb1ae3974a5f924",
      "old_mode": 33188,
      "old_path": "fs/fscache/stats.c",
      "new_id": "8179e8bc4a3d668bc48c2625bde6a0448e54fc2e",
      "new_mode": 33188,
      "new_path": "fs/fscache/stats.c"
    },
    {
      "type": "modify",
      "old_id": "834f0fe96f89f4acf707df504e1a244fc56d466b",
      "old_mode": 33188,
      "old_path": "fs/nfs/write.c",
      "new_id": "393dec26e84ee450435349c14090c8782cc2f991",
      "new_mode": 33188,
      "new_path": "fs/nfs/write.c"
    }
  ]
}
