)]}'
{
  "commit": "bfff68738f1cb5c93dab1114634cea02aae9e7ba",
  "tree": "b6cdf3f26e86464c7088cab62d837eb32f559fb9",
  "parents": [
    "e6fa0be699449d28a20e815bfe9ce26725ec4962"
  ],
  "author": {
    "name": "Lukas Czerner",
    "email": "lczerner@redhat.com",
    "time": "Wed Oct 27 21:30:05 2010 -0400"
  },
  "committer": {
    "name": "Theodore Ts\u0027o",
    "email": "tytso@mit.edu",
    "time": "Wed Oct 27 21:30:05 2010 -0400"
  },
  "message": "ext4: add support for lazy inode table initialization\n\nWhen the lazy_itable_init extended option is passed to mke2fs, it\nconsiderably speeds up filesystem creation because inode tables are\nnot zeroed out.  The fact that parts of the inode table are\nuninitialized is not a problem so long as the block group descriptors,\nwhich contain information regarding how much of the inode table has\nbeen initialized, has not been corrupted However, if the block group\nchecksums are not valid, e2fsck must scan the entire inode table, and\nthe the old, uninitialized data could potentially cause e2fsck to\nreport false problems.\n\nHence, it is important for the inode tables to be initialized as soon\nas possble.  This commit adds this feature so that mke2fs can safely\nuse the lazy inode table initialization feature to speed up formatting\nfile systems.\n\nThis is done via a new new kernel thread called ext4lazyinit, which is\ncreated on demand and destroyed, when it is no longer needed.  There\nis only one thread for all ext4 filesystems in the system. When the\nfirst filesystem with inititable mount option is mounted, ext4lazyinit\nthread is created, then the filesystem can register its request in the\nrequest list.\n\nThis thread then walks through the list of requests picking up\nscheduled requests and invoking ext4_init_inode_table(). Next schedule\ntime for the request is computed by multiplying the time it took to\nzero out last inode table with wait multiplier, which can be set with\nthe (init_itable\u003dn) mount option (default is 10).  We are doing\nthis so we do not take the whole I/O bandwidth. When the thread is no\nlonger necessary (request list is empty) it frees the appropriate\nstructures and exits (and can be created later later by another\nfilesystem).\n\nWe do not disturb regular inode allocations in any way, it just do not\ncare whether the inode table is, or is not zeroed. But when zeroing, we\nhave to skip used inodes, obviously. Also we should prevent new inode\nallocations from the group, while zeroing is on the way. For that we\ntake write alloc_sem lock in ext4_init_inode_table() and read alloc_sem\nin the ext4_claim_inode, so when we are unlucky and allocator hits the\ngroup which is currently being zeroed, it just has to wait.\n\nThis can be suppresed using the mount option no_init_itable.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e1def1786e5074e5d8f3cf89b5f14cbfc9fab4af",
      "old_mode": 33188,
      "old_path": "Documentation/filesystems/ext4.txt",
      "new_id": "6ab9442d7eeb666e496e79acba6471b813207434",
      "new_mode": 33188,
      "new_path": "Documentation/filesystems/ext4.txt"
    },
    {
      "type": "modify",
      "old_id": "b364b9df09b374384f2a45b306ec59c2c1e347e9",
      "old_mode": 33188,
      "old_path": "fs/ext4/ext4.h",
      "new_id": "0fe078d368d067559065f6cebb35dd61b83b7213",
      "new_mode": 33188,
      "new_path": "fs/ext4/ext4.h"
    },
    {
      "type": "modify",
      "old_id": "45853e0d1f218a673809fb23522b7bdc5966d9e0",
      "old_mode": 33188,
      "old_path": "fs/ext4/ialloc.c",
      "new_id": "e428f23215c0025dbddcba7e8685380fb268496c",
      "new_mode": 33188,
      "new_path": "fs/ext4/ialloc.c"
    },
    {
      "type": "modify",
      "old_id": "751997d2cefe555803b61fb68d8c23aa867b3016",
      "old_mode": 33188,
      "old_path": "fs/ext4/super.c",
      "new_id": "5066537e5a38421650cefcd3e521f5d2ce65bf4e",
      "new_mode": 33188,
      "new_path": "fs/ext4/super.c"
    }
  ]
}
