)]}'
{
  "commit": "d13df84ff7f3f3e26a9643c1d3cbf94cef9b5b59",
  "tree": "9531a56973381aa48a10fbc7073d1109f380d550",
  "parents": [
    "19272d4385126c2ac369c9f6137a27a08aee50d1"
  ],
  "author": {
    "name": "akpm@osdl.org",
    "email": "akpm@osdl.org",
    "time": "Sat Apr 16 15:26:36 2005 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@ppc970.osdl.org",
    "time": "Sat Apr 16 15:26:36 2005 -0700"
  },
  "message": "[PATCH] jbd dirty buffer leak fix\n\nThis fixes the lots-of-fsx-linux-instances-cause-a-slow-leak bug.\n\nIt\u0027s been there since 2.6.6, caused by:\n\nftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.5/2.6.5-mm4/broken-out/jbd-move-locked-buffers.patch\n\nThat patch moves under-writeout ordered-data buffers onto a separate journal\nlist during commit.  It took out the old code which was based on a single\nlist.\n\nThe old code (necessarily) had logic which would restart I/O against buffers\nwhich had been redirtied while they were on the committing transaction\u0027s\nt_sync_datalist list.  The new code only writes buffers once, ignoring\nredirtyings by a later transaction, which is good.\n\nBut over on the truncate side of things, in journal_unmap_buffer(), we\u0027re\ntreating buffers on the t_locked_list as inviolable things which belong to the\ncommitting transaction, and we just leave them alone during concurrent\ntruncate-vs-commit.\n\nThe net effect is that when truncate tries to invalidate a page whose buffers\nare on t_locked_list and have been redirtied, journal_unmap_buffer() just\nleaves those buffers alone.  truncate will remove the page from its mapping\nand we end up with an anonymous clean page with dirty buffers, which is an\nillegal state for a page.  The JBD commit will not clean those buffers as they\nare removed from t_locked_list.  The VM (try_to_free_buffers) cannot reclaim\nthese pages.\n\nThe patch teaches journal_unmap_buffer() about buffers which are on the\ncommitting transaction\u0027s t_locked_list.  These buffers have been written and\nI/O has completed.  We can take them off the transaction and undirty them\nwithin the context of journal_invalidatepage()-\u003ejournal_unmap_buffer().\n\nAcked-by: \"Stephen C. Tweedie\" \u003csct@redhat.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": "932e7c1ef4a1c0eeb0867dc20a560524e8bd7834",
      "old_mode": 33188,
      "old_path": "fs/jbd/transaction.c",
      "new_id": "77b7662b840b480f681c8cc889c5689d2b60f253",
      "new_mode": 33188,
      "new_path": "fs/jbd/transaction.c"
    }
  ]
}
