)]}'
{
  "commit": "2d90c160e5f1d784e180f1e1458d56eee4d7f4f4",
  "tree": "883dc6e8433bbe315fa8fce00154d51ac52b3dd7",
  "parents": [
    "e3fb8eb14eafd2847c04cf48b52a705c36f4db98"
  ],
  "author": {
    "name": "Jan Kara",
    "email": "jack@suse.cz",
    "time": "Wed Mar 09 23:11:13 2016 -0500"
  },
  "committer": {
    "name": "Theodore Ts\u0027o",
    "email": "tytso@mit.edu",
    "time": "Wed Mar 09 23:11:13 2016 -0500"
  },
  "message": "ext4: more efficient SEEK_DATA implementation\n\nUsing SEEK_DATA in a huge sparse file can easily lead to sotflockups as\next4_seek_data() iterates hole block-by-block. Fix the problem by using\nreturned hole size from ext4_map_blocks() and thus skip the hole in one\ngo.\n\nUpdate also SEEK_HOLE implementation to follow the same pattern as\nSEEK_DATA to make future maintenance easier.\n\nFurthermore we add cond_resched() to both ext4_seek_data() and\next4_seek_hole() to avoid softlockups in case evil user creates huge\nfragmented file and we have to go through lots of extents.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "70b8e04095661484882615f00915f7b17664a279",
      "old_mode": 33188,
      "old_path": "fs/ext4/ext4.h",
      "new_id": "5623eec7fd229c6b6196af3eb24275912cb5e978",
      "new_mode": 33188,
      "new_path": "fs/ext4/ext4.h"
    },
    {
      "type": "modify",
      "old_id": "4a1153561580a86e20e6206d3be1b15a6f2ac095",
      "old_mode": 33188,
      "old_path": "fs/ext4/file.c",
      "new_id": "e93a7efaf78fd3bbaab81fe0895e282edcfb8f41",
      "new_mode": 33188,
      "new_path": "fs/ext4/file.c"
    },
    {
      "type": "modify",
      "old_id": "fddc6ddc53a889806338601a8dce0a9923ce3b83",
      "old_mode": 33188,
      "old_path": "fs/ext4/inode.c",
      "new_id": "ce2c4c62386f4f28243d89328949d1871a1329c6",
      "new_mode": 33188,
      "new_path": "fs/ext4/inode.c"
    }
  ]
}
