)]}'
{
  "commit": "5b41d92437f1ae19b3f3ffa3b16589fd5df50ac0",
  "tree": "ed7e1999a2349811e3cae0f0bdd53a93aea413d7",
  "parents": [
    "bbd08344e3df8c7c1d7aa04bc0c8c9367806e12d"
  ],
  "author": {
    "name": "Eric Sandeen",
    "email": "sandeen@redhat.com",
    "time": "Wed Oct 27 21:30:13 2010 -0400"
  },
  "committer": {
    "name": "Theodore Ts\u0027o",
    "email": "tytso@mit.edu",
    "time": "Wed Oct 27 21:30:13 2010 -0400"
  },
  "message": "ext4: implement writeback livelock avoidance using page tagging\n\nThis is analogous to Jan Kara\u0027s commit,\nf446daaea9d4a420d16c606f755f3689dcb2d0ce\nmm: implement writeback livelock avoidance using page tagging\n\nbut since we forked write_cache_pages, we need to reimplement\nit there (and in ext4_da_writepages, since range_cyclic handling\nwas moved to there)\n\nIf you start a large buffered IO to a file, and then set\nfsync after it, you\u0027ll find that fsync does not complete\nuntil the other IO stops.\n\nIf you continue re-dirtying the file (say, putting dd\nwith conv\u003dnotrunc in a loop), when fsync finally completes\n(after all IO is done), it reports via tracing that\nit has written many more pages than the file contains;\nin other words it has synced and re-synced pages in\nthe file multiple times.\n\nThis then leads to problems with our writeback_index\nupdate, since it advances it by pages written, and\nessentially sets writeback_index off the end of the\nfile...\n\nWith the following patch, we only sync as much as was\ndirty at the time of the sync.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6671fcbb52936a26b07554aba21c3456efc5e27f",
      "old_mode": 33188,
      "old_path": "fs/ext4/inode.c",
      "new_id": "c9ea95ba5fde85dfc2bcc1efc3356fa35fc04ee3",
      "new_mode": 33188,
      "new_path": "fs/ext4/inode.c"
    },
    {
      "type": "modify",
      "old_id": "72a5d647a5f26d9eb3c798894443d4eb7849c0dd",
      "old_mode": 33188,
      "old_path": "include/linux/writeback.h",
      "new_id": "3d132bfb4f3d33d7497ec3ff398421139f263d3d",
      "new_mode": 33188,
      "new_path": "include/linux/writeback.h"
    }
  ]
}
