)]}'
{
  "log": [
    {
      "commit": "5f248c9c251c60af3403902b26e08de43964ea0b",
      "tree": "6d3328e72a7e4015a64017eb30be18095c6a3c64",
      "parents": [
        "f6cec0ae58c17522a7bc4e2f39dae19f199ab534",
        "dca332528bc69e05f67161e1ed59929633d5e63d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (96 commits)\n  no need for list_for_each_entry_safe()/resetting with superblock list\n  Fix sget() race with failing mount\n  vfs: don\u0027t hold s_umount over close_bdev_exclusive() call\n  sysv: do not mark superblock dirty on remount\n  sysv: do not mark superblock dirty on mount\n  btrfs: remove junk sb_dirt change\n  BFS: clean up the superblock usage\n  AFFS: wait for sb synchronization when needed\n  AFFS: clean up dirty flag usage\n  cifs: truncate fallout\n  mbcache: fix shrinker function return value\n  mbcache: Remove unused features\n  add f_flags to struct statfs(64)\n  pass a struct path to vfs_statfs\n  update VFS documentation for method changes.\n  All filesystems that need invalidate_inode_buffers() are doing that explicitly\n  convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n  Make -\u003edrop_inode() just return whether inode needs to be dropped\n  fs/inode.c:clear_inode() is gone\n  fs/inode.c:evict() doesn\u0027t care about delete vs. non-delete paths now\n  ...\n\nFix up trivial conflicts in fs/nilfs2/super.c\n"
    },
    {
      "commit": "0930fcc1ee2f0a810b938bc283a3a262d7adccbb",
      "tree": "5e5d10894f1e31a7aede75110b43d7a41347631d",
      "parents": [
        "7da08fd17a6e42d80f0f3897a5cbd682e77bcdb4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 07 13:16:22 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:48:30 2010 -0400"
      },
      "message": "convert ext4 to -\u003eevict_inode()\n\npretty much brute-force...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0cfc9255a1efb0467de2162950197750570ecec0",
      "tree": "3bb2510d8b6d373d7db3a49bcda3cbbebd10330e",
      "parents": [
        "8dd420466c7bfc459fa04680bd5690bfc41a4553"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Aug 05 01:46:37 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Aug 05 01:46:37 2010 -0400"
      },
      "message": "ext4: re-inline ext4_rec_len_(to|from)_disk functions\n\ncommit 3d0518f4, \"ext4: New rec_len encoding for very\nlarge blocksizes\" made several changes to this path, but from\na perf perspective, un-inlining ext4_rec_len_from_disk() seems\nmost significant.  This function is called from ext4_check_dir_entry(),\nwhich on a file-creation workload is called extremely often.\n\nI tested this with bonnie:\n\n# bonnie++ -u root -s 0 -f -x 200 -d /mnt/test -n 32\n\n(this does 200 iterations) and got this for the file creations:\n\next4 stock:   Average \u003d  21206.8 files/s\next4 inlined: Average \u003d  22346.7 files/s  (+5%)\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8b67f04ab9de5d8f3a71aef72bf02c995a506db5",
      "tree": "dd05968730762f5b18de4c6b0720843669e4e9db",
      "parents": [
        "ca0e05e4b15193aeba72b995e90de990db7f8304"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Aug 01 23:14:20 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Aug 01 23:14:20 2010 -0400"
      },
      "message": "ext4: Add mount options in superblock\n\nAllow mount options to be stored in the superblock.  Also add default\nmount option bits for nobarrier, block_validity, discard, and nodelalloc.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "79e8303677fc15f508b9877e0fea1925c4add6f3",
      "tree": "85891ab05b2a9e5dd47966fd16bc372df6d4bb88",
      "parents": [
        "62d2b5f2dcd3707b070efb16bbfdf6947c38c194"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Jul 27 11:56:07 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:07 2010 -0400"
      },
      "message": "ext4: fix ext4_get_blocks references\n\next4_get_blocks got renamed to ext4_map_blocks, but left stale\ncomments and a prototype littered around.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5b3ff237bef43b9e7fb7d1eb858e29b73fd664f9",
      "tree": "e3810d974a0e51a8c4b9046abdd36a5a4022abb3",
      "parents": [
        "552ef8024f909d9b3a7442d0ab0d48a22de24e9e"
      ],
      "author": {
        "name": "jiayingz@google.com (Jiaying Zhang)",
        "email": "",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:06 2010 -0400"
      },
      "message": "ext4: move aio completion after unwritten extent conversion\n\nThis patch is to be applied upon Christoph\u0027s \"direct-io: move aio_complete\ninto -\u003eend_io\" patch. It adds iocb and result fields to struct ext4_io_end_t,\nso that we can call aio_complete from  ext4_end_io_nolock() after the extent\nconversion has finished.\n\nI have verified with Christoph\u0027s aio-dio test that used to fail after a few\nruns on an original kernel but now succeeds on the patched kernel.\n\nSee http://thread.gmane.org/gmane.comp.file-systems.ext4/19659 for details.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "89eeddf03327e19cfcbb18efa98e5470e2f5c563",
      "tree": "2ca9f7ed13b348677a2d4b2fe8bf40e041a72f5f",
      "parents": [
        "66e61a9e9504f61b9a928c9055368c81da613a50"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:04 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:04 2010 -0400"
      },
      "message": "ext4: Define s_jnl_backup_type in superblock\n\nThis has been in use by e2fsprogs for a while; define it to keep the\nsuper block fields in sync.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "66e61a9e9504f61b9a928c9055368c81da613a50",
      "tree": "afcd8147b4e4771103f75f5a03b836950882dece",
      "parents": [
        "1c13d5c0872870cca3e612aa045d492ead9ab004"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:04 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:04 2010 -0400"
      },
      "message": "ext4: Once a day, printk file system error information to dmesg\n\nThis allows us to grab any file system error messages by scraping\n/var/log/messages.  This will make it easy for us to do error analysis\nacross the very large number of machines as we deploy ext4 across the\nfleet.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1c13d5c0872870cca3e612aa045d492ead9ab004",
      "tree": "6e3dd0d3f49ff56dda9fc6cd72c233759bc24e09",
      "parents": [
        "c398eda0e43a791be0fca6f197a1e2bbb9f16070"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:03 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:03 2010 -0400"
      },
      "message": "ext4: Save error information to the superblock for analysis\n\nSave number of file system errors, and the time function name, line\nnumber, block number, and inode number of the first and most recent\nerrors reported on the file system in the superblock.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c398eda0e43a791be0fca6f197a1e2bbb9f16070",
      "tree": "d7b2b95490f96a75e116a3aa13c17767aa630342",
      "parents": [
        "60fd4da34d55a9cc0d857fc76dc12cf8cab4ed02"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:40 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:56:40 2010 -0400"
      },
      "message": "ext4: Pass line numbers to ext4_error() and friends\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "60fd4da34d55a9cc0d857fc76dc12cf8cab4ed02",
      "tree": "72c6b3d9c7680070a751da56bd9068f71e7b106f",
      "parents": [
        "90c7201b97bb7ac5a4e2605abc0efb5fdfb957f0"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:54:40 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jul 27 11:54:40 2010 -0400"
      },
      "message": "ext4: Cleanup ext4_check_dir_entry so __func__ is now implicit\n    \nAlso start passing the line number to ext4_check_dir since we\u0027re going\nto need it in upcoming patch.\n    \nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e29136f80e775b0310273932b4297a62f5574a29",
      "tree": "d10d56b15b7968744ea0becdf61440aae7e609c5",
      "parents": [
        "c67d859e39896e4286249da89c4ca0ef8bd949cb"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 12:54:28 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 12:54:28 2010 -0400"
      },
      "message": "ext4: Enhance ext4_grp_locked_error() to take block and function numbers\n\nAlso use a macro definition so that __func__ and __LINE__ is implicit.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c67d859e39896e4286249da89c4ca0ef8bd949cb",
      "tree": "e483a8e61fe876506d8ed819fbfe29eac6c493a7",
      "parents": [
        "4a9cdec73f79b2858e9ecf0b6cfac7f6b200bf3a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 11:07:07 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 11:07:07 2010 -0400"
      },
      "message": "ext4: clean up ext4_abort() so __func__ is now implicit\n\nUse a macro definition for ext4_abort() to clean up the .c files a wee\nbit.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4a9cdec73f79b2858e9ecf0b6cfac7f6b200bf3a",
      "tree": "0e06b201e009e5e2a661811e61ef3184138bb8d3",
      "parents": [
        "c6ac12a6159c802ae8b757dd13563564e64333df"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 11:00:23 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 29 11:00:23 2010 -0400"
      },
      "message": "ext4: Add new superblock fields reserved for the Next3 snapshot feature\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "206f7ab4f49a2021fcb8687f25395be77711ddee",
      "tree": "19764d36a25ec1e088d32572a1c0936eeaf19636",
      "parents": [
        "5a0790c2c4a18435759a70e1562450035d778339"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 14 14:42:49 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 14 14:42:49 2010 -0400"
      },
      "message": "ext4: remove vestiges of nobh support\n\nThe nobh option was only supported for writeback mode, but given that all\nwrite paths actually create buffer heads it effectively was a no-op already.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a0375156ca1041574b5d47cc7e32f10b891151b0",
      "tree": "b791961012b9348f289c3dda5dc071bdf9b736d2",
      "parents": [
        "7e27d6e778cd87b6f2415515d7127eba53fe5d02"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 11 23:14:04 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jun 11 23:14:04 2010 -0400"
      },
      "message": "ext4: Clean up s_dirt handling\n\nWe don\u0027t need to set s_dirt in most of the ext4 code when journaling\nis enabled.  In ext3/4 some of the summary statistics for # of free\ninodes, blocks, and directories are calculated from the per-block\ngroup statistics when the file system is mounted or unmounted.  As a\nresult the superblock doesn\u0027t have to be updated, either via the\njournal or by setting s_dirt.  There are a few exceptions, most\nnotably when resizing the file system, where the superblock needs to\nbe modified --- and in that case it should be done as a journalled\noperation if possible, and s_dirt set only in no-journal mode.\n\nThis patch will optimize out some unneeded disk writes when using ext4\nwith a journal.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7ea8085910ef3dd4f3cad6845aaa2b580d39b115",
      "tree": "d9c1edb5906f943f7d70bfb4b65106e29772d379",
      "parents": [
        "cc967be54710d97c05229b2e5ba2d00df84ddd64"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed May 26 17:53:25 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:05:02 2010 -0400"
      },
      "message": "drop unused dentry argument to -\u003efsync\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "14ece1028b3ed53ffec1b1213ffc6acaf79ad77c",
      "tree": "8f5a13487139c68ef775c9d39b7be83386fdae06",
      "parents": [
        "60e6679e28518ccd67169c4a539d8cc7490eb8a6"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Mon May 17 08:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 08:00:00 2010 -0400"
      },
      "message": "ext4: Make fsync sync new parent directories in no-journal mode\n\nAdd a new ext4 state to tell us when a file has been newly created; use\nthat state in ext4_sync_file in no-journal mode to tell us when we need\nto sync the parent directory as well as the inode and data itself.  This\nfixes a problem in which a panic or power failure may lose the entire\nfile even when using fsync, since the parent directory entry is lost.\n\nAddresses-Google-Bug: #2480057\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "60e6679e28518ccd67169c4a539d8cc7490eb8a6",
      "tree": "65f39d1e9da3006df5bc5532d0c8a7ec365599f0",
      "parents": [
        "4d92dc0f00a775dc2e1267b0e00befb783902fe7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 07:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 07:00:00 2010 -0400"
      },
      "message": "ext4: Drop whitespace at end of lines\n\nThis patch was generated using:\n\n#!/usr/bin/perl -i\nwhile (\u003c\u003e) {\n    s/[ \t]+$//;\n    print;\n}\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4d92dc0f00a775dc2e1267b0e00befb783902fe7",
      "tree": "07bb835871dfcc290f5909fe6635ab420ff61420",
      "parents": [
        "899ad0cea6ad7ff4ba24b16318edbc3cbbe03fad"
      ],
      "author": {
        "name": "Ben Hutchings",
        "email": "ben@decadent.org.uk",
        "time": "Mon May 17 06:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 06:00:00 2010 -0400"
      },
      "message": "ext4: Fix compat EXT4_IOC_ADD_GROUP\n\nstruct ext4_new_group_input needs to be converted because u64 has\nonly 32-bit alignment on some 32-bit architectures, notably i386.\n\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "899ad0cea6ad7ff4ba24b16318edbc3cbbe03fad",
      "tree": "5a9b5b84cf47321fbf1ac10bde64bbf3ff75a269",
      "parents": [
        "f084db932e6fe877bf8362bc256fc850de196deb"
      ],
      "author": {
        "name": "Ben Hutchings",
        "email": "ben@decadent.org.uk",
        "time": "Mon May 17 05:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 17 05:00:00 2010 -0400"
      },
      "message": "ext4: Conditionally define compat ioctl numbers\n\nIt is unnecessary, and in general impossible, to define the compat\nioctl numbers except when building the filesystem with CONFIG_COMPAT\ndefined.\n\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12e9b892002d9af057655d35b44db8ee9243b0dc",
      "tree": "c5831b4bcf98eebdd39158d08dab97c198f5c683",
      "parents": [
        "24676da469f50f433baa347845639662c561d1f6"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Sun May 16 22:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 22:00:00 2010 -0400"
      },
      "message": "ext4: Use bitops to read/modify i_flags in struct ext4_inode_info\n\nAt several places we modify EXT4_I(inode)-\u003ei_flags without holding\ni_mutex (ext4_do_update_inode, ...). These modifications are racy and\nwe can lose updates to i_flags. So convert handling of i_flags to use\nbitops which are atomic.\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d15792\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "24676da469f50f433baa347845639662c561d1f6",
      "tree": "b4b8205f8b50376af286193d0dcbe76f2bc2d1e1",
      "parents": [
        "2ed886852adfcb070bf350e66a0da0d98b2f3ab5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 21:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 21:00:00 2010 -0400"
      },
      "message": "ext4: Convert calls of ext4_error() to EXT4_ERROR_INODE()\n\nEXT4_ERROR_INODE() tends to provide better error information and in a\nmore consistent format.  Some errors were not even identifying the inode\nor directory which was corrupted, which made them not very useful.\n\nAddresses-Google-Bug: #2507977\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e35fd6609b2fee54484d520deccb8f18bf7d38f3",
      "tree": "9b786445602819074f599c282b31bead166e8c03",
      "parents": [
        "8e48dcfbd7c0892b4cfd064d682cc4c95a29df32"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 19:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 19:00:00 2010 -0400"
      },
      "message": "ext4: Add new abstraction ext4_map_blocks() underneath ext4_get_blocks()\n\nJack up ext4_get_blocks() and add a new function, ext4_map_blocks()\nwhich uses a much smaller structure, struct ext4_map_blocks which is\n20 bytes, as opposed to a struct buffer_head, which nearly 5 times\nbigger on an x86_64 machine.  By switching things to use\next4_map_blocks(), we can save stack space by using ext4_map_blocks()\nsince we can avoid allocating a struct buffer_head on the stack.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8a57d9d61a6e361c7bb159dda797672c1df1a691",
      "tree": "39a01022ed2294f0acc94b45554c9a292db671dc",
      "parents": [
        "6d19c42b7cf81c39632b6d4dbc514e8449bcd346"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Sun May 16 15:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 16 15:00:00 2010 -0400"
      },
      "message": "ext4: check for a good block group before loading buddy pages\n\nThis adds a new field in ext4_group_info to cache the largest available\nblock range in a block group; and don\u0027t load the buddy pages until *after*\nwe\u0027ve done a sanity check on the block group.\n\nWith large allocation requests (e.g., fallocate(), 8MiB) and relatively full\npartitions, it\u0027s easy to have no block groups with a block extent large\nenough to satisfy the input request length.  This currently causes the loop\nduring cr \u003d\u003d 0 in ext4_mb_regular_allocator() to load the buddy bitmap pages\nfor EVERY block group.  That can be a lot of pages.  The patch below allows\nus to call ext4_mb_good_group() BEFORE we load the buddy pages (although we\nhave check again after we lock the block group).\n\nAddresses-Google-Bug: #2578108\nAddresses-Google-Bug: #2704453\n\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9467c4fdd66f6810cecef0f1173330f3c6e67d45",
      "tree": "5fea180a10127c893b288dff2c8788b72d2eaea3",
      "parents": [
        "35c2e967d067ff02dc944f2434f024419c2fe83a",
        "a9185b41a4f84971b930c519f0c63bd450c4810d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 11:53:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 11:53:53 2010 -0800"
      },
      "message": "Merge branch \u0027write_inode2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027write_inode2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  pass writeback_control to -\u003ewrite_inode\n  make sure data is on disk before calling -\u003ewrite_inode\n"
    },
    {
      "commit": "1f63b9c15b17d5af360c180f5c71537e954d5d3b",
      "tree": "4da17d6f2035ae093680fa2caa3e1c84b44bb237",
      "parents": [
        "b24bc1e61cec2174faf5dfa632da16b6ca17144f",
        "64e290ec69be39f1887fa0b403c1e417b6b038e7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 10:47:00 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 10:47:00 2010 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (36 commits)\n  ext4: fix up rb_root initializations to use RB_ROOT\n  ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl\n  ext4: Fix the NULL reference in double_down_write_data_sem()\n  ext4: Fix insertion point of extent in mext_insert_across_blocks()\n  ext4: consolidate in_range() definitions\n  ext4: cleanup to use ext4_grp_offs_to_block()\n  ext4: cleanup to use ext4_group_first_block_no()\n  ext4: Release page references acquired in ext4_da_block_invalidatepages\n  ext4: Fix ext4_quota_write cross block boundary behaviour\n  ext4: Convert BUG_ON checks to use ext4_error() instead\n  ext4: Use direct_IO_no_locking in ext4 dio read\n  ext4: use ext4_get_block_write in buffer write\n  ext4: mechanical rename some of the direct I/O get_block\u0027s identifiers\n  ext4: make \"offset\" consistent in ext4_check_dir_entry()\n  ext4: Handle non empty on-disk orphan link\n  ext4: explicitly remove inode from orphan list after failed direct io\n  ext4: fix error handling in migrate\n  ext4: deprecate obsoleted mount options\n  ext4: Fix fencepost error in chosing choosing group vs file preallocation.\n  jbd2: clean up an assertion in jbd2_journal_commit_transaction()\n  ...\n"
    },
    {
      "commit": "a9185b41a4f84971b930c519f0c63bd450c4810d",
      "tree": "268cf4e206cca12fb9e1dd68984e7c190e465b46",
      "parents": [
        "26821ed40b4230259e770c9911180f38fcaa6f59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:37 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:52 2010 -0500"
      },
      "message": "pass writeback_control to -\u003ewrite_inode\n\nThis gives the filesystem more information about the writeback that\nis happening.  Trond requested this for the NFS unstable write handling,\nand other filesystems might benefit from this too by beeing able to\ndistinguish between the different callers in more detail.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "731eb1a03a8445cde2cb23ecfb3580c6fa7bb690",
      "tree": "9978388978604207cc78da1c81b97625857256cb",
      "parents": [
        "bda00de7e8569b1fcde27b68fa59e74e14c5f93a"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Wed Mar 03 23:55:01 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 03 23:55:01 2010 -0500"
      },
      "message": "ext4: consolidate in_range() definitions\n\nThere are duplicate macro definitions of in_range() in mballoc.h and\nballoc.c.  This consolidates these two definitions into ext4.h, and\nchanges extents.c to use in_range() as well.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Andreas Dilger \u003cadilger@sun.com\u003e\n"
    },
    {
      "commit": "273df556b6ee2065bfe96edab5888d3dc9b108d8",
      "tree": "19c73685fce581e4ed85ff845e0b2fc485cedf9c",
      "parents": [
        "b7adc1f363e72e9131a582cc2cb00eaf83f51a39"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Tue Mar 02 11:46:09 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 02 11:46:09 2010 -0500"
      },
      "message": "ext4: Convert BUG_ON checks to use ext4_error() instead\n\nConvert a bunch of BUG_ONs to emit a ext4_error() message and return\nEIO.  This is a first pass and most notably does _not_ cover\nmballoc.c, which is a morass of void functions.\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "744692dc059845b2a3022119871846e74d4f6e11",
      "tree": "ed246651aebcb8dae57de8c58dc20983064ee017",
      "parents": [
        "c7064ef13b2181a489836349f9baf87df0dab28f"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Thu Mar 04 16:14:02 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 04 16:14:02 2010 -0500"
      },
      "message": "ext4: use ext4_get_block_write in buffer write\n\nAllocate uninitialized extent before ext4 buffer write and\nconvert the extent to initialized after io completes.\nThe purpose is to make sure an extent can only be marked\ninitialized after it has been written with new data so\nwe can safely drop the i_mutex lock in ext4 DIO read without\nexposing stale data. This helps to improve multi-thread DIO\nread performance on high-speed disks.\n\nSkip the nobh and data\u003djournal mount cases to make things simple for now.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c7064ef13b2181a489836349f9baf87df0dab28f",
      "tree": "433d86d9ed4285e5c5e7f24fbbaa7f48fad09381",
      "parents": [
        "b8b8afe236e97b6359d46d3a3f8c46455e192271"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Tue Mar 02 13:28:44 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 02 13:28:44 2010 -0500"
      },
      "message": "ext4: mechanical rename some of the direct I/O get_block\u0027s identifiers\n\nThis commit renames some of the direct I/O\u0027s block allocation flags,\nvariables, and functions introduced in Mingming\u0027s \"Direct IO for holes\nand fallocate\" patches so that they can be used by ext4\u0027s buffered\nwrite path as well.  Also changed the related function comments\naccordingly to cover both direct write and buffered write cases.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c8d46e41bc744c8fa0092112af3942fcd46c8b18",
      "tree": "fd8bad55c3c9903b6c798b838396bc832bbf7f4b",
      "parents": [
        "73b50c1c92666d326b5fa2c945d46509f2f6d91f"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Wed Feb 24 09:52:53 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Feb 24 09:52:53 2010 -0500"
      },
      "message": "ext4: Add flag to files with blocks intentionally past EOF\n\nfallocate() may potentially instantiate blocks past EOF, depending\non the flags used when it is called.\n\ne2fsck currently has a test for blocks past i_size, and it\nsometimes trips up - noticeably on xfstests 013 which runs fsstress.\n\nThis patch from Jiayang does fix it up - it (along with\ne2fsprogs updates and other patches recently from Aneesh) has\nsurvived many fsstress runs in a row.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "003cb608a2533d0927a83bc4e07e46d7a622eda9",
      "tree": "19347ffcec1c09cda9c4fd01addd8797cf8e31c4",
      "parents": [
        "43cf38eb5cea91245502df3fcee4dbfc1c74dd1c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 02 14:39:01 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 17 11:17:38 2010 +0900"
      },
      "message": "percpu: add __percpu sparse annotations to fs\n\nAdd __percpu sparse annotations to fs.\n\nThese annotations are to make sparse consider percpu variables to be\nin a different address space and warn if accessed without going\nthrough percpu accessors.  This patch doesn\u0027t affect normal builds.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "12062dddda450976b129dcb1bacd91acaf4d8030",
      "tree": "e64590b1147639cd3629f8a977b269410cd6bd13",
      "parents": [
        "f710b4b96ba292dfed2153afc47e9063b0abfd89"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Mon Feb 15 14:19:27 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 15 14:19:27 2010 -0500"
      },
      "message": "ext4: move __func__ into a macro for ext4_warning, ext4_error\n\nJust a pet peeve of mine; we had a mishash of calls with either __func__\nor \"function_name\" and the latter tends to get out of sync.\n\nI think it\u0027s easier to just hide the __func__ in a macro, and it\u0027ll\nbe consistent from then on.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f710b4b96ba292dfed2153afc47e9063b0abfd89",
      "tree": "fdfdc979eb03c41c5785b4153e6337d61a4c89e2",
      "parents": [
        "19f5fb7ad679bb361222c7916086435020c37cce"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 25 03:31:32 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 25 03:31:32 2010 -0500"
      },
      "message": "ext4: Reserve INCOMPAT_EA_INODE and INCOMPAT_DIRDATA feature codepoints\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "19f5fb7ad679bb361222c7916086435020c37cce",
      "tree": "9e301163075c4faaf340cf50afd51855c76acd8c",
      "parents": [
        "d2eecb03936878ec574ade5532fa83df7d75dde7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jan 24 14:34:07 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Jan 24 14:34:07 2010 -0500"
      },
      "message": "ext4: Use bitops to read/modify EXT4_I(inode)-\u003ei_state\n\nAt several places we modify EXT4_I(inode)-\u003ei_state without holding\ni_mutex (ext4_release_file, ext4_bmap, ext4_journalled_writepage,\next4_do_update_inode, ...). These modifications are racy and we can\nlose updates to i_state. So convert handling of i_state to use bitops\nwhich are atomic.\n\nCc: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1296cc85c26e94eb865d03f82140f27d598de467",
      "tree": "b8a2bc06ecd992a86179ebcd9c087994c676c291",
      "parents": [
        "5f634d064c709ea02c3cdaa850a08323a4a4bf28"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jan 15 01:27:59 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 15 01:27:59 2010 -0500"
      },
      "message": "ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag\n\nWe should update reserve space if it is delalloc buffer\nand that is indicated by EXT4_GET_BLOCKS_DELALLOC_RESERVE flag.\nSo use EXT4_GET_BLOCKS_DELALLOC_RESERVE in place of\nEXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5f634d064c709ea02c3cdaa850a08323a4a4bf28",
      "tree": "3f81e9c56cd8348b7bb94f1d54efff696374c929",
      "parents": [
        "1db913823c0f8360fccbd24ca67eb073966a5ffd"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Mon Jan 25 04:00:31 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 25 04:00:31 2010 -0500"
      },
      "message": "ext4: Fix quota accounting error with fallocate\n\nWhen we fallocate a region of the file which we had recently written,\nand which is still in the page cache marked as delayed allocated blocks\nwe need to make sure we don\u0027t do the quota update on writepage path.\nThis is because the needed quota updated would have already be done\nby fallocate.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9d0be50230b333005635967f7ecd4897dbfd181b",
      "tree": "59aefe29e33284e1d904b23eaf2cc98994431374",
      "parents": [
        "ee5f4d9cdf32fd99172d11665c592a288c2b1ff4"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:41:30 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 01 02:41:30 2010 -0500"
      },
      "message": "ext4: Calculate metadata requirements more accurately\n\nIn the past, ext4_calc_metadata_amount(), and its sub-functions\next4_ext_calc_metadata_amount() and ext4_indirect_calc_metadata_amount()\nbadly over-estimated the number of metadata blocks that might be\nrequired for delayed allocation blocks.  This didn\u0027t matter as much\nwhen functions which managed the reserved metadata blocks were more\naggressive about dropping reserved metadata blocks as delayed\nallocation blocks were written, but unfortunately they were too\naggressive.  This was fixed in commit 0637c6f, but as a result the\nover-estimation by ext4_calc_metadata_amount() would lead to reserving\n2-3 times the number of pending delayed allocation blocks as\npotentially required metadata blocks.  So if there are 1 megabytes of\nblocks which have been not yet been allocation, up to 3 megabytes of\nspace would get reserved out of the user\u0027s quota and from the file\nsystem free space pool until all of the inode\u0027s data blocks have been\nallocated.\n\nThis commit addresses this problem by much more accurately estimating\nthe number of metadata blocks that will be required.  It will still\nsomewhat over-estimate the number of blocks needed, since it must make\na worst case estimate not knowing which physical blocks will be\nneeded, but it is much more accurate than before.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a9e7f4472075fb6937c545af3f6329e9946bbe66",
      "tree": "399e294982e1c9691332eca72942910a7f74e9f8",
      "parents": [
        "fd8fbfc1709822bd94247c5b2ab15a5f5041e103"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Mon Dec 14 15:21:14 2009 +0300"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Dec 23 13:33:55 2009 +0100"
      },
      "message": "ext4: Convert to generic reserved quota\u0027s space management.\n\nThis patch also fixes write vs chown race condition.\n\nAcked-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "1f2acb6017d8528135ec3b01ab7cd2be6ea0630b",
      "tree": "7263a5c1402237166cf425bc8f5336426159622c",
      "parents": [
        "15121c18a22ae483279f76dc9e554334b800d0f7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 22 17:40:42 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jan 22 17:40:42 2010 -0500"
      },
      "message": "ext4: Add block validity check when truncating indirect block mapped inodes\n\nAdd checks to ext4_free_branches() to make sure a block number found\nin an indirect block are valid before trying to free it.  If a bad\nblock number is found, stop freeing the indirect block immediately,\nsince the file system is corrupt and we will need to run fsck anyway.\nThis also avoids spamming the logs, and specifically avoids\ndriver-level \"attempt to access beyond end of device\" errors obscure\nwhat is really going on.\n\nIf you get *really*, *really*, *really* unlucky, without this patch, a\nsupposed indirect block containing garbage might contain a reference\nto a primary block group descriptor, in which case\next4_free_branches() could end up zero\u0027ing out a block group\ndescriptor block, and if then one of the block bitmaps for a block\ngroup described by that bg descriptor block is not in memory, and is\nread in by ext4_read_block_bitmap().  This function calls\next4_valid_block_bitmap(), which assumes that bg_inode_table() was\nvalidated at mount time and hasn\u0027t been modified since.  Since this\nassumption is no longer valid, it\u0027s possible for the value\n(ext4_inode_table(sb, desc) - group_first_block) to go negative, which\nwill cause ext4_find_next_zero_bit() to trigger a kernel GPF.\n\nAddresses-Google-Bug: #2220436\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a1de02dccf906faba2ee2d99cac56799bda3b96a",
      "tree": "9871a11252e9a7d39882206c2057ec3080517365",
      "parents": [
        "724e6d3fe8003c3f60bf404bf22e4e331327c596"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Feb 04 23:58:38 2010 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Feb 04 23:58:38 2010 -0500"
      },
      "message": "ext4: fix async i/o writes beyond 4GB to a sparse file\n\nThe \"offset\" member in ext4_io_end holds bytes, not blocks, so\next4_lblk_t is wrong - and too small (u32).\n\nThis caused the async i/o writes to sparse files beyond 4GB to fail\nwhen they wrapped around to 0.\n\nAlso fix up the type of arguments to ext4_convert_unwritten_extents(),\nit gets ssize_t from ext4_end_aio_dio_nolock() and\next4_ext_direct_IO().\n\nReported-by: Giel de Nijs \u003cgiel@vectorwise.com\u003e\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\n"
    },
    {
      "commit": "b436b9bef84de6893e86346d8fbf7104bc520645",
      "tree": "50fb9ae167bcd622e9adf47646bcf3b4c7dd111d",
      "parents": [
        "194074acacebc169ded90a4657193f5180015051"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Dec 08 23:51:10 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Dec 08 23:51:10 2009 -0500"
      },
      "message": "ext4: Wait for proper transaction commit on fsync\n\nWe cannot rely on buffer dirty bits during fsync because pdflush can come\nbefore fsync is called and clear dirty bits without forcing a transaction\ncommit. What we do is that we track which transaction has last changed\nthe inode and which transaction last changed allocation and force it to\ndisk on fsync.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e6362609b6c71c5b802026be9cf263bbdd67a50e",
      "tree": "be908b6b0566f70d31378bf11b548a0d59ae0218",
      "parents": [
        "4433871130f36585fde38e7dd817433296648945"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:17:05 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:17:05 2009 -0500"
      },
      "message": "ext4: call ext4_forget() from ext4_free_blocks()\n\nAdd the facility for ext4_forget() to be called from\next4_free_blocks().  This simplifies the code in a large number of\nplaces, and centralizes most of the work of calling ext4_forget() into\na single place.\n\nAlso fix a bug in the extents migration code; it wasn\u0027t calling\next4_forget() when releasing the indirect blocks during the\nconversion.  As a result, if the system cashed during or shortly after\nthe extents migration, and the released indirect blocks get reused as\ndata blocks, the journal replay would corrupt the data blocks.  With\nthis new patch, fixing this bug was as simple as adding the\nEXT4_FREE_BLOCKS_FORGET flags to the call to ext4_free_blocks().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: \"Aneesh Kumar K.V\" \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "4433871130f36585fde38e7dd817433296648945",
      "tree": "5dd91fbb345f5a4240f4d2df271da49ca1a6037b",
      "parents": [
        "b7e57e7c2a41826e51fe060fae5158bfc7a04e81"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 07:44:56 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 07:44:56 2009 -0500"
      },
      "message": "ext4: fold ext4_free_blocks() and ext4_mb_free_blocks()\n\next4_mb_free_blocks() is only called by ext4_free_blocks(), and the\nlatter function doesn\u0027t really do much.  So merge the two functions\ntogether, such that ext4_free_blocks() is now found in\nfs/ext4/mballoc.c.  This saves about 200 bytes of compiled text space.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d6797d14b1640d088652c72508b529a3aea479e3",
      "tree": "2e608c3e362b94439a2e7503b7d97cb3891bb101",
      "parents": [
        "e3bb52ae2bb9573e84c17b8e3560378d13a5c798"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 20:52:12 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Nov 22 20:52:12 2009 -0500"
      },
      "message": "ext4: move ext4_forget() to ext4_jbd2.c\n\nThe ext4_forget() function better belongs in ext4_jbd2.c.  This will\nallow us to do some cleanup of the ext4_journal_revoke() and\next4_journal_forget() functions, as well as giving us better error\nreporting since we can report the caller of ext4_forget() when things\ngo wrong.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5328e635315734d42080de9a5a1ee87bf4cae0a4",
      "tree": "4952c04c9b1faec9a3c82a3743805efad05ed96e",
      "parents": [
        "2bba702d4f88d7b010ec37e2527b552588404ae7"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Nov 19 14:25:42 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Nov 19 14:25:42 2009 -0500"
      },
      "message": "ext4: make trim/discard optional (and off by default)\n\nIt is anticipated that when sb_issue_discard starts doing\nreal work on trim-capable devices, we may see issues.  Make\nthis mount-time optional, and default it to off until we know\nthat things are working out OK.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5f5249507e4b5c4fc0f9c93f33d133d8c95f47e1",
      "tree": "0b0a790f568c07298c3a4122572e84392c787648",
      "parents": [
        "109f55651954def97fa41ee71c464d268c512ab0"
      ],
      "author": {
        "name": "Mingming",
        "email": "cmm@us.ibm.com",
        "time": "Tue Nov 10 10:48:04 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Nov 10 10:48:04 2009 -0500"
      },
      "message": "ext4: skip conversion of uninit extents after direct IO if there isn\u0027t any\n\nAt the end of direct I/O operation, ext4_ext_direct_IO() always called\next4_convert_unwritten_extents(), regardless of whether there were any\nunwritten extents involved in the I/O or not.\n\nThis commit adds a state flag so that ext4_ext_direct_IO() only calls\next4_convert_unwritten_extents() when necessary.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d4da6c9ccf648f3f1cb5bf9d981a62c253d30e28",
      "tree": "709f8bdc50a3a1d47632047eb3670b4a4a6ff045",
      "parents": [
        "c35102c3e15f90fe604523a2fbffd9dc158b455a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 02 10:15:27 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 02 10:15:27 2009 -0800"
      },
      "message": "Revert \"ext4: Remove journal_checksum mount option and enable it by default\"\n\nThis reverts commit d0646f7b636d067d715fab52a2ba9c6f0f46b0d7, as\nrequested by Eric Sandeen.\n\nIt can basically cause an ext4 filesystem to miss recovery (and thus get\nmounted with errors) if the journal checksum does not match.\n\nQuoth Eric:\n\n   \"My hand-wavy hunch about what is happening is that we\u0027re finding a\n    bad checksum on the last partially-written transaction, which is\n    not surprising, but if we have a wrapped log and we\u0027re doing the\n    initial scan for head/tail, and we abort scanning on that bad\n    checksum, then we are essentially running an unrecovered filesystem.\n\n    But that\u0027s hand-wavy and I need to go look at the code.\n\n    We lived without journal checksums on by default until now, and at\n    this point they\u0027re doing more harm than good, so we should revert\n    the default-changing commit until we can fix it and do some good\n    power-fail testing with the fixes in place.\"\n\nSee\n\n\thttp://bugzilla.kernel.org/show_bug.cgi?id\u003d14354\n\nfor all the gory details.\n\nRequested-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nCc: Theodore Tso \u003ctytso@mit.edu\u003e\nCc: Alexey Fisher \u003cbug-track@fisher-privat.net\u003e\nCc: Maxim Levitsky \u003cmaximlevitsky@gmail.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: Mathias Burén \u003cmathias.buren@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c1fccc0696bcaff6008c11865091f5ec4b0937ab",
      "tree": "0e8269e07d40278c136b7f93aba7ab118f75f532",
      "parents": [
        "0ef122494020521309be855bfdeeb41f34bf8c94"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 01:13:55 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 01:13:55 2009 -0400"
      },
      "message": "ext4: Fix time encoding with extra epoch bits\n\n\"Looking at ext4.h, I think the setting of extra time fields forgets to\nmask the epoch bits so the epoch part overwrites nsec part. The second\nchange is only for coherency (2 -\u003e EXT4_EPOCH_BITS).\"\n\nThanks to Damien Guibouret for pointing out this problem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "296c355cd6443d89fa251885a8d78778fe111dc4",
      "tree": "5cf7c8b115617dc3829a16a5969894d37b73173c",
      "parents": [
        "90576c0b9a0b5323fc4bd7f23f49be0d234f36d1"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 00:32:42 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 00:32:42 2009 -0400"
      },
      "message": "ext4: Use tracepoints for mb_history trace file\n\nThe /proc/fs/ext4/\u003cdev\u003e/mb_history was maintained manually, and had a\nnumber of problems: it required a largish amount of memory to be\nallocated for each ext4 filesystem, and the s_mb_history_lock\nintroduced a CPU contention problem.  \n\nBy ripping out the mb_history code and replacing it with ftrace\ntracepoints, and we get more functionality: timestamps, event\nfiltering, the ability to correlate mballoc history with other ext4\ntracepoints, etc.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8d5d02e6b176565c77ff03604908b1453a22044d",
      "tree": "0d29e4f28233f24960c7921c1c0a7608077bf713",
      "parents": [
        "4c0425ff68b1b87b802ffeda7b6a46ff7da7241c"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:48:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:48:29 2009 -0400"
      },
      "message": "ext4: async direct IO for holes and fallocate support\n\nFor async direct IO that covers holes or fallocate, the end_io\ncallback function now queued the convertion work on workqueue but\ndon\u0027t flush the work rightaway as it might take too long to afford.\n\nBut when fsync is called after all the data is completed, user expects\nthe metadata also being updated before fsync returns.\n\nThus we need to flush the conversion work when fsync() is called.\nThis patch keep track of a listed of completed async direct io that\nhas a work queued on workqueue.  When fsync() is called, it will go\nthrough the list and do the conversion.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\n"
    },
    {
      "commit": "4c0425ff68b1b87b802ffeda7b6a46ff7da7241c",
      "tree": "a8718f5f4574af8e15fd876b24f4aec88d62451b",
      "parents": [
        "0031462b5b392f90d17f1d75abb795883c44e969"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:48:41 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:48:41 2009 -0400"
      },
      "message": "ext4: Use end_io callback to avoid direct I/O fallback to buffered I/O\n\nCurrently the DIO VFS code passes create \u003d 0 when writing to the\nmiddle of file.  It does this to avoid block allocation for holes, so\nas not to expose stale data out when there is a parallel buffered read\n(which does not hold the i_mutex lock).  Direct I/O writes into holes\nfalls back to buffered IO for this reason.\n\nSince preallocated extents are treated as holes when doing a\nget_block() look up (buffer is not mapped), direct IO over fallocate\nalso falls back to buffered IO.  Thus ext4 actually silently falls\nback to buffered IO in above two cases, which is undesirable.\n\nTo fix this, this patch creates unitialized extents when a direct I/O\nwrite into holes in sparse files, and registering an end_io callback which\nconverts the uninitialized extent to an initialized extent after the\nI/O is completed.\n\nSinged-Off-By: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0031462b5b392f90d17f1d75abb795883c44e969",
      "tree": "e8323861b8dede0f3ddbfc8324d650bf1f4fd74b",
      "parents": [
        "9f0ccfd8e07d61b413e6536ffa02fbf60d2e20d8"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Mon Sep 28 15:49:08 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 28 15:49:08 2009 -0400"
      },
      "message": "ext4: Split uninitialized extents for direct I/O\n\nWhen writing into an unitialized extent via direct I/O, and the direct\nI/O doesn\u0027t exactly cover the unitialized extent, split the extent\ninto uninitialized and initialized extents before submitting the I/O.\nThis avoids needing to deal with an ENOSPC error in the end_io\ncallback that gets used for direct I/O.\n\nWhen the IO is complete, the written extent will be marked as initialized.\n\nSinged-Off-By: Mingming Cao \u003ccmm@us.ibm.com\u003e \nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "55138e0bc29c0751e2152df9ad35deea542f29b3",
      "tree": "40dbc77de3e7a426030bd740ba8e2fd0d2171523",
      "parents": [
        "71780577306fd1e76c7a92e3b308db624d03adb9"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 29 13:31:31 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Sep 29 13:31:31 2009 -0400"
      },
      "message": "ext4: Adjust ext4_da_writepages() to write out larger contiguous chunks\n\nWork around problems in the writeback code to force out writebacks in\nlarger chunks than just 4mb, which is just too small.  This also works\naround limitations in the ext4 block allocator, which can\u0027t allocate\nmore than 2048 blocks at a time.  So we need to defeat the round-robin\ncharacteristics of the writeback code and try to write out as many\nblocks in one inode before allowing the writeback code to move on to\nanother inode.  We add a a new per-filesystem tunable,\nmax_writeback_mb_bump, which caps this to a default of 128mb per\ninode.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0a80e9867db154966b2a771042e10452ac110e1e",
      "tree": "51f43830b3c0dd733b0d446399eb3ea2b6bc84ed",
      "parents": [
        "5534fb5bb35a62a94e0bd1fa2421f7fb6e894f10"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Sep 17 11:55:58 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 11:55:58 2009 -0400"
      },
      "message": "ext4: replace MAX_DEFRAG_SIZE with EXT_MAX_BLOCK\n\nThere\u0027s no reason to redefine the maximum allowable offset\nin an extent-based file just for defrag; \nEXT_MAX_BLOCK already does this.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "1b9c12f44c1eb614fd3b8822bfe8f1f5d8e53737",
      "tree": "5de0737dd71557dadaa5e3f98d6e62bd3b9d7c51",
      "parents": [
        "fb0a387dcdcd21aab1b09ee7fd80b7c979bdbbfd"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 08:32:22 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Sep 17 08:32:22 2009 -0400"
      },
      "message": "ext4: store EXT4_EXT_MIGRATE in i_state instead of i_flags\n\nEXT4_EXT_MIGRATE is only intended to be used for an in-memory flag,\nand the hex value assigned to it collides with FS_DIRECTIO_FL (which\nis also stored in i_flags).  There\u0027s no reason for the\nEXT4_EXT_MIGRATE bit to be stored in i_flags, so we switch it to use\ni_state instead.\n\nCc: \"Aneesh Kumar K.V\" \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fb0a387dcdcd21aab1b09ee7fd80b7c979bdbbfd",
      "tree": "dcb12c5fce8f7ccb8b183936ea71a29aba3f3846",
      "parents": [
        "c40ce3c9ea97425a12d7e44031a98fe50add6fc1"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Sep 16 14:45:10 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 16 14:45:10 2009 -0400"
      },
      "message": "ext4: limit block allocations for indirect-block files to \u003c 2^32\n\nToday, the ext4 allocator will happily allocate blocks past\n2^32 for indirect-block files, which results in the block\nnumbers getting truncated, and corruption ensues.\n\nThis patch limits such allocations to \u003c 2^32, and adds\nBUG_ONs if we do get blocks larger than that.\n\nThis should address RH Bug 519471, ext4 bitmap allocator \nmust limit blocks to \u003c 2^32\n\n* ext4_find_goal() is modified to choose a goal \u003c UINT_MAX,\n  so that our starting point is in an acceptable range.\n\n* ext4_xattr_block_set() is modified such that the goal block\n  is \u003c UINT_MAX, as above.\n\n* ext4_mb_regular_allocator() is modified so that the group\n  search does not continue into groups which are too high\n\n* ext4_mb_use_preallocated() has a check that we don\u0027t use\n  preallocated space which is too far out\n\n* ext4_alloc_blocks() and ext4_xattr_block_set() add some BUG_ONs\n\nNo attempt has been made to limit inode locations to \u003c 2^32,\nso we may wind up with blocks far from their inodes.  Doing\nthis much already will lead to some odd ENOSPC issues when the\n\"lower 32\" gets full, and further restricting inodes could\nmake that even weirder.\n\nFor high inodes, choosing a goal of the original, % UINT_MAX,\nmay be a bit odd, but then we\u0027re in an odd situation anyway,\nand I don\u0027t know of a better heuristic.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d0646f7b636d067d715fab52a2ba9c6f0f46b0d7",
      "tree": "f7b3ae9510e8c789651d99fee0c22867e6ccba94",
      "parents": [
        "a3710fd1ee8cd542c5de63cf2c39f8912031f867"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 05 12:50:43 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 05 12:50:43 2009 -0400"
      },
      "message": "ext4: Remove journal_checksum mount option and enable it by default\n\nThere\u0027s no real cost for the journal checksum feature, and we should\nmake sure it is enabled all the time.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n\n"
    },
    {
      "commit": "b3a3ca8ca0c3c29abc5b2bfe94bb14f3f4590df9",
      "tree": "1006f780d43ec8ff90ed11b1eb0d5ed961c9f613",
      "parents": [
        "de89de6e0cf4b1eb13f27137cf2aa40d287aabdf"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 31 23:13:11 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 31 23:13:11 2009 -0400"
      },
      "message": "ext4: Add new tracepoint: trace_ext4_da_write_pages()\n\nAdd a new tracepoint which shows the pages that will be written using\nwrite_cache_pages() by ext4_da_writepages().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a36b44988cef1fc007535107013571fa691a2d7f",
      "tree": "b9d659b8ac2a1068f6fbc08ac093902333512c70",
      "parents": [
        "1927805e6599d8602d2c0af6a0155c85acc0b214"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Tue Aug 25 22:36:45 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 25 22:36:45 2009 -0400"
      },
      "message": "ext4: use ext4_grpblk_t more extensively\n\nunsigned  short is potentially too small to track blocks within\na group; today it is safe due to restrictions in e2fsprogs but\nwe have _lo / _hi bits for group blocks with the intent to go\nup to 32 bits, so clean this up now.\n\nThere are many more places where we use unsigned/int/unsigned int\nto contain a group block but this should at least fix all the\nshort types.\n\nI added a few comments to the struct ext4_group_info definition\nas well.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0373130d5bc783751c1fbad948886916a21d4559",
      "tree": "a5b4d21b84345354ff965714bd6a6c473bae4b0f",
      "parents": [
        "bf43d84b185e2ff54598f8c58a5a8e63148b6e90"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Mon Aug 17 23:51:29 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 17 23:51:29 2009 -0400"
      },
      "message": "ext4: open-code ext4_mb_update_group_info\n\next4_mb_update_group_info is only called in one place, and it\u0027s\nextremely simple.  There\u0027s no reason to have it in a separate function\nin a separate file as far as I can tell, it just obfuscates what\u0027s\nreally going on.\n\nPerhaps it was intended to keep the grp-\u003ebb_* manipulation local to\nmballoc.c but we\u0027re already accessing other grp-\u003e fields in balloc.c\ndirectly so this seems ok.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "487caeef9fc08c0565e082c40a8aaf58dad92bbb",
      "tree": "69920293cfe3a50bdbbf845be785350e7c203a2b",
      "parents": [
        "9599b0e597d810be9b8f759ea6e9619c4f983c5e"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Aug 17 22:17:20 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 17 22:17:20 2009 -0400"
      },
      "message": "ext4: Fix possible deadlock between ext4_truncate() and ext4_get_blocks()\n\nDuring truncate we are sometimes forced to start a new transaction as\nthe amount of blocks to be journaled is both quite large and hard to\npredict. So far we restarted a transaction while holding i_data_sem\nand that violates lock ordering because i_data_sem ranks below a\ntransaction start (and it can lead to a real deadlock with\next4_get_blocks() mapping blocks in some page while having a\ntransaction open).\n\nWe fix the problem by dropping the i_data_sem before restarting the\ntransaction and acquire it afterwards. It\u0027s slightly subtle that this\nworks:\n\n1) By the time ext4_truncate() is called, all the page cache for the\ntruncated part of the file is dropped so get_block() should not be\ncalled on it (we only have to invalidate extent cache after we\nreacquire i_data_sem because some extent from not-truncated part could\nextend also into the part we are going to truncate).\n\n2) Writes, migrate or defrag hold i_mutex so they are stopped for all\nthe time of the truncate.\n\nThis bug has been found and analyzed by Theodore Tso \u003ctytso@mit.edu\u003e.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "50797481a7bdee548589506d7d7b48b08bc14dcd",
      "tree": "19989d27e3a69c6c2c507f798f55a2d9a47a5d27",
      "parents": [
        "4ba74d00a20256e22f159cb288ff34b587608917"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 18 13:34:02 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Sep 18 13:34:02 2009 -0400"
      },
      "message": "ext4: Avoid group preallocation for closed files\n\nCurrently the group preallocation code tries to find a large (512)\nfree block from which to do per-cpu group allocation for small files.\nThe problem with this scheme is that it leaves the filesystem horribly\nfragmented.  In the worst case, if the filesystem is unmounted and\nremounted (after a system shutdown, for example) we forget the fact\nthat wee were using a particular (now-partially filled) 512 block\nextent.  So the next time we try to allocate space for a small file,\nwe will find *another* completely free 512 block chunk to allocate\nsmall files.  Given that there are 32,768 blocks in a block group,\nafter 64 iterations of \"mount, write one 4k file in a directory,\nunmount\", the block group will have 64 files, each separated by 511\nblocks, and the block group will no longer have any free 512\ncompletely free chunks of blocks for group preallocation space.\n\nSo if we try to allocate blocks for a file that has been closed, such\nthat we know the final size of the file, and the filesystem is not\nbusy, avoid using group preallocation.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4ba74d00a20256e22f159cb288ff34b587608917",
      "tree": "6859cf49f8043ec11846e2c8ebc836499e1048c4",
      "parents": [
        "0ef90db93a4ddfc300af288c2a1bfc1e6c79da64"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Aug 09 22:01:13 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Aug 09 22:01:13 2009 -0400"
      },
      "message": "ext4: Fix bugs in mballoc\u0027s stream allocation mode\n\nThe logic around sbi-\u003es_mb_last_group and sbi-\u003es_mb_last_start was all\nscrewed up.  These fields were getting unconditionally all the time,\nset even when stream allocation had not taken place, and if they were\nbeing used when the file was smaller than s_mb_stream_request, which\nis when the allocation should _not_ be doing stream allocation.\n\nFix this by determining whether or not we stream allocation should\ntake place once, in ext4_mb_group_or_file(), and setting a flag which\ngets used in ext4_mb_regular_allocator() and ext4_mb_use_best_found().\nThis simplifies the code and assures that we are consistently using\n(or not using) the stream allocation logic.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0ef90db93a4ddfc300af288c2a1bfc1e6c79da64",
      "tree": "9a16d71efd6458777391c993f3b964cb5cebfb7d",
      "parents": [
        "6ba495e9259cd9a0b40ebd6c315143535c92542f"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Aug 09 16:46:13 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Aug 09 16:46:13 2009 -0400"
      },
      "message": "ext4: Display the mballoc flags in mb_history in hex instead of decimal\n\nDisplaying the flags in base 16 makes it easier to see which flags\nhave been set.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "726447d803802cd0be8f62d17c4a34421781b938",
      "tree": "ef1d7d4b9afb0f81b9eb6f09980c152d35ceb3cf",
      "parents": [
        "089ceecc1ea4a69ed8bcc5c7c7b96ce487e26b33"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Mon Jul 13 10:24:17 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jul 13 10:24:17 2009 -0400"
      },
      "message": "ext4: naturally align struct ext4_allocation_request\n\nAs Ted noted, the ext4_allocation_request isn\u0027t well aligned.  Looking\nat it with pahole we\u0027re wasting space on 64-bit arches:\n\nstruct ext4_allocation_request {\n        struct inode *             inode;              /*     0     8 */\n        ext4_lblk_t                logical;            /*     8     4 */\n\n        /* XXX 4 bytes hole, try to pack */\n\n        ext4_fsblk_t               goal;               /*    16     8 */\n        ext4_lblk_t                lleft;              /*    24     4 */\n\n        /* XXX 4 bytes hole, try to pack */\n\n        ext4_fsblk_t               pleft;              /*    32     8 */\n        ext4_lblk_t                lright;             /*    40     4 */\n\n        /* XXX 4 bytes hole, try to pack */\n\n        ext4_fsblk_t               pright;             /*    48     8 */\n        unsigned int               len;                /*    56     4 */\n        unsigned int               flags;              /*    60     4 */\n        /* --- cacheline 1 boundary (64 bytes) --- */\n\n        /* size: 64, cachelines: 1, members: 9 */\n        /* sum members: 52, holes: 3, sum holes: 12 */\n};\n\nGrouping 32-bit members together closes these holes and shrinks the\nstructure by 12 bytes. which is important since ext4 can get on the\nhairy edge of stack overruns.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d4bfe2f76d785cc77611a4bda8cedaff358d8c7d",
      "tree": "a8c953fe752afebadb4f0fb4aa3e80dbab934f7f",
      "parents": [
        "6582a0e6f6bc7bf64817b9e1a424782855292ab0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 19:54:26 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 24 08:17:04 2009 -0400"
      },
      "message": "switch ext4 to inode-\u003ei_acl\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0610b6e99939828b77eec020ead0e1f44cba38ca",
      "tree": "ede610c64a0456a43618e500c577b35e462f8953",
      "parents": [
        "11013911daea4820147ae6d7094dd7c6894e8651"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 15 03:45:05 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 15 03:45:05 2009 -0400"
      },
      "message": "ext4: Fix 64-bit block type problem on 32-bit platforms\n\nThe function ext4_mb_free_blocks() was using an \"unsigned long\" to\npass a block number; this will cause 64-bit block numbers to get\ntruncated on x86 and other 32-bit platforms.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nReviewed-by: Eric Sandeen \u003csandeen@redhat.com\u003e\n"
    },
    {
      "commit": "11013911daea4820147ae6d7094dd7c6894e8651",
      "tree": "f8e9f9d2058e0dfc826d4df3d88a7eb18a56b3f3",
      "parents": [
        "f157a4aa98a18bd3817a72bea90d48494e2586e7"
      ],
      "author": {
        "name": "Andreas Dilger",
        "email": "adilger@sun.com",
        "time": "Sat Jun 13 11:45:35 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 11:45:35 2009 -0400"
      },
      "message": "ext4: teach the inode allocator to use a goal inode number\n\nEnhance the inode allocator to take a goal inode number as a\nparemeter; if it is specified, it takes precedence over Orlov or\nparent directory inode allocation algorithms.\n\nThe extents migration function uses the goal inode number so that the\nextent trees allocated the migration function use the correct flex_bg.\nIn the future, the goal inode functionality will also be used to\nallocate an adjacent inode for the extended attributes.\n\nAlso, for testing purposes the goal inode number can be specified via\n/sys/fs/{dev}/inode_goal.  This can be useful for testing inode\nallocation beyond 2^32 blocks on very large filesystems.\n\nSigned-off-by: Andreas Dilger \u003cadilger@sun.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "f157a4aa98a18bd3817a72bea90d48494e2586e7",
      "tree": "105547639a67296b4ea7acdc35c9e65ee2a85fd8",
      "parents": [
        "8a8a2050c844d9de224ff591e91bda3f77bd6eda"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 11:09:42 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 11:09:42 2009 -0400"
      },
      "message": "ext4: Use a hash of the topdir directory name for the Orlov parent group\n\nInstead of using a random number to determine the goal parent grop for\nthe Orlov top directories, use a hash of the directory name.  This\nallows for repeatable results when trying to benchmark filesystem\nlayout algorithms.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "4ab2f15b7f709c3626a7eed075a7225b4c775c7e",
      "tree": "bfefc592c4c2eb176162134c615132e75f810486",
      "parents": [
        "bc0b0d6d69ee9022f18ae264e62beb30ddeb322a"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:36 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:36 2009 -0400"
      },
      "message": "ext4: move the abort flag from s_mount_opts to s_mount_flags\n\nWe\u0027re running out of space in the mount options word, and\nEXT4_MOUNT_ABORT isn\u0027t really a mount option, but a run-time flag.  So\nmove it to become EXT4_MF_FS_ABORTED in s_mount_flags.\n\nAlso remove bogus ext2_fs.h / ext4.h simultaneous #include protection,\nwhich can never happen.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bc0b0d6d69ee9022f18ae264e62beb30ddeb322a",
      "tree": "fb1d04af657b6de21fa441c1d14fc296f32c723e",
      "parents": [
        "7f4520cc6242780ce720aa440ad4b391f998b558"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:48 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:48 2009 -0400"
      },
      "message": "ext4: update the s_last_mounted field in the superblock\n\nThis field can be very helpful when a system administrator is trying\nto sort through large numbers of block devices or filesystem images.\nWhat is stored in this field can be ambiguous if multiple filesystem\nnamespaces are in play; what we store in practice is the mountpoint\ninterpreted by the process\u0027s namespace which first opens a file in the\nfilesystem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7f4520cc6242780ce720aa440ad4b391f998b558",
      "tree": "c8f1d99e019f2e29a967851031f4a60bf7ab1467",
      "parents": [
        "748de6736c1e482e111f9d1b5a5d5b1787600cad"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:41 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jun 13 10:09:41 2009 -0400"
      },
      "message": "ext4: change s_mount_opt to be an unsigned int\n\nWe can only fit 32 options in s_mount_opt because an unsigned long is\n32-bits on a x86 machine.  So use an unsigned int to save space on\n64-bit platforms.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "748de6736c1e482e111f9d1b5a5d5b1787600cad",
      "tree": "9e5bd6085cd0eea0453c2a8bbce1422f291f059f",
      "parents": [
        "8b0f9e8f78bd0a65fa001bf18f2c47eef2893a10"
      ],
      "author": {
        "name": "Akira Fujita",
        "email": "a-fujita@rs.jp.nec.com",
        "time": "Wed Jun 17 19:24:03 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 19:24:03 2009 -0400"
      },
      "message": "ext4: online defrag -- Add EXT4_IOC_MOVE_EXT ioctl\n\nThe EXT4_IOC_MOVE_EXT exchanges the blocks between orig_fd and donor_fd,\nand then write the file data of orig_fd to donor_fd.\next4_mext_move_extent() is the main fucntion of ext4 online defrag,\nand this patch includes all functions related to ext4 online defrag.\n\nSigned-off-by: Akira Fujita \u003ca-fujita@rs.jp.nec.com\u003e\nSigned-off-by: Takashi Sato \u003ct-sato@yk.jp.nec.com\u003e\nSigned-off-by: Kazuya Mio \u003ck-mio@sx.jp.nec.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "b31e15527a9bb71b6a11a425d17ce139a62f5af5",
      "tree": "3b8fdb014e3b960b27369643de9ad1213ec2cbba",
      "parents": [
        "03f5d8bcf094a5e3b501bd2ae1553656efa8d1be"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Thu Jun 04 17:36:36 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Jun 04 17:36:36 2009 -0400"
      },
      "message": "ext4: Change all super.c messages to print the device\n\nThis patch changes ext4 super.c to include the device name with all \nwarning/error messages, by using a new utility function ext4_msg. \nIt\u0027s a rather large patch, but very mechanic. I left debug printks\nalone.\n\nThis is a straightforward port of a patch which Andi Kleen did for\next3.\n\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "03f5d8bcf094a5e3b501bd2ae1553656efa8d1be",
      "tree": "04644e9008e7357fd87f14fee6404b7c306bc3e9",
      "parents": [
        "0b8e58a140cae2ba1c4a21ccae7c6c3c939c51f9"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Jun 09 00:17:05 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jun 09 00:17:05 2009 -0400"
      },
      "message": "ext4: Get rid of EXTEND_DISKSIZE flag of ext4_get_blocks_handle()\n\nGet rid of EXTEND_DISKSIZE flag of ext4_get_blocks_handle(). This\nseems to be a relict from some old days and setting disksize in this\nfunction does not make much sense.  Currently it was set only by\next4_getblk().  Since the parameter has some effect only if create \u003d\u003d\n1, it is easy to check by grepping through the sources that the three\ncallers which end up calling ext4_getblk() with create \u003d\u003d 1\n(ext4_append, ext4_quota_write, ext4_mkdir) do the right thing and set\ndisksize themselves.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "6fd058f7791087648c683eb8572edf3be3c4c23c",
      "tree": "0d80791532d2d022c91f20013003716eaf0afb40",
      "parents": [
        "2ac3b6e00acb46406c993d57921f86a594aafe08"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 17 15:38:01 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 17 15:38:01 2009 -0400"
      },
      "message": "ext4: Add a comprehensive block validity check to ext4_get_blocks()\n\nTo catch filesystem bugs or corruption which could lead to the\nfilesystem getting severly damaged, this patch adds a facility for\ntracking all of the filesystem metadata blocks by contiguous regions\nin a red-black tree.  This allows quick searching of the tree to\nlocate extents which might overlap with filesystem metadata blocks.\n\nThis facility is also used by the multi-block allocator to assure that\nit is not allocating blocks out of the system zone, as well as by the\nroutines used when reading indirect blocks and extents information\nfrom disk to make sure their contents are valid.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2ac3b6e00acb46406c993d57921f86a594aafe08",
      "tree": "51f8a245caa53776fb9617973742ffc81023e007",
      "parents": [
        "2fa3cdfb319055fd8b25abdafa413e16f00ad493"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 13:57:08 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 13:57:08 2009 -0400"
      },
      "message": "ext4: Clean up ext4_get_blocks() so it does not depend on bh_result-\u003eb_state\n\nThe ext4_get_blocks() function was depending on the value of\nbh_result-\u003eb_state as an input parameter to decide whether or not\nupdate the delalloc accounting statistics by calling\next4_da_update_reserve_space().  We now use a separate flag,\nEXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE, to requests this update, so that\nall callers of ext4_get_blocks() can clear map_bh.b_state before\ncalling ext4_get_blocks() without worrying about any consistency\nissues.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "c21770573319922e3f3fcb331cfaa290c49f1c81",
      "tree": "ee21ebb2d73d4d3b19d7e391e7accf00704371d9",
      "parents": [
        "12b7ac176831df1aa58a787e67c3e5d698b30163"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:58:52 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:58:52 2009 -0400"
      },
      "message": "ext4: Define a new set of flags for ext4_get_blocks()\n\nThe functions ext4_get_blocks(), ext4_ext_get_blocks(), and\next4_ind_get_blocks() used an ad-hoc set of integer variables used as\nboolean flags passed in as arguments.  Use a single flags parameter\nand a setandard set of bitfield flags instead.  This saves space on\nthe call stack, and it also makes the code a bit more understandable.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "12b7ac176831df1aa58a787e67c3e5d698b30163",
      "tree": "d8d3ab93fd28d5b84efff0b5c247da74c84788e0",
      "parents": [
        "e4d996ca806e93dddb5d76c0d3d859b494c559f6"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:57:44 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu May 14 00:57:44 2009 -0400"
      },
      "message": "ext4: Rename ext4_get_blocks_wrap() to be ext4_get_blocks()\n\nAnother function rename for clarity\u0027s sake.  The _wrap prefix simply\nconfuses people, and didn\u0027t add much people trying to follow the code\npaths.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bc8e67409ccdcff72c3f1656b1fb1aad7ff396db",
      "tree": "2a766e3c7bc938b697499aa7d5a20f2f468b5a2f",
      "parents": [
        "955ce5f5be67dfe0d1d096b543af33fe8a1ce3dd"
      ],
      "author": {
        "name": "Vincent Minet",
        "email": "vincent@vincent-minet.net",
        "time": "Fri May 15 08:33:18 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 15 08:33:18 2009 -0400"
      },
      "message": "ext4: Fix spinlock assertions on UP systems\n\nOn UP systems without DEBUG_SPINLOCK, ext4_is_group_locked always fails\nwhich triggers a BUG_ON() call.\nThis patch fixes it by using assert_spin_locked instead.\n\nSigned-off-by: Vincent Minet \u003cvincent@vincent-minet.net\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "955ce5f5be67dfe0d1d096b543af33fe8a1ce3dd",
      "tree": "68b0bdbef1594a3e43c1ef28ae8e096b40a06ae4",
      "parents": [
        "eefd7f03b86b8a319890e7fac5a6fcc7f8694b76"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat May 02 20:35:09 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat May 02 20:35:09 2009 -0400"
      },
      "message": "ext4: Convert ext4_lock_group to use sb_bgl_lock\n\nWe have sb_bgl_lock() and ext4_group_info.bb_state\nbit spinlock to protech group information. The later is only\nused within mballoc code. Consolidate them to use sb_bgl_lock().\nThis makes the mballoc.c code much simpler and also avoid\nconfusion with two locks protecting same info.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "bb23c20a851a5038b255a3c0d0aa56093c1da3f8",
      "tree": "257211bf2bf5ffd53fe24b0528928ca4d3f2ecba",
      "parents": [
        "596397b77c895d0fa3674f579c94ad5ea88ef01d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 19:44:44 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 19:44:44 2009 -0400"
      },
      "message": "ext4: Move fs/ext4/group.h into ext4.h\n\nMove the function prototypes in group.h into ext4.h so they are all\ndefined in one place.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "596397b77c895d0fa3674f579c94ad5ea88ef01d",
      "tree": "bd4f9916556b4d5bc59ee4b5171248df44e2c5c4",
      "parents": [
        "ca0faba0e8ac844dc0279825eb8db876b5962ea5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 13:49:15 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 13:49:15 2009 -0400"
      },
      "message": "ext4: Move fs/ext4/namei.h into ext4.h\n\nThe fs/ext4/namei.h header file had only a single function\ndeclaration, and should have never been a standalone file.  Move it\ninto ext4.h, where should have been from the beginning.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ca0faba0e8ac844dc0279825eb8db876b5962ea5",
      "tree": "186acf88dda5958f44ec80349778f815cb172895",
      "parents": [
        "d444c3c38189b3f18337a213855ac1c07af4e2d9"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 03 16:33:44 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun May 03 16:33:44 2009 -0400"
      },
      "message": "ext4: Move the ext4_sb.h header file into ext4.h\n\nThere is no longer a reason for a separate ext4_sb.h header file, so\nmove it into ext4.h just to make life easier for developers to find\nthe relevant data structures and typedefs.  Should also speed up\ncompiles slightly, too.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d444c3c38189b3f18337a213855ac1c07af4e2d9",
      "tree": "180b83e442c9ab72e1553a19140e3f1169806d28",
      "parents": [
        "75507efb1372b6acf1aa6bf00ebd49ce196fd994"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 13:44:33 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 13:44:33 2009 -0400"
      },
      "message": "ext4: Move the ext4_i.h header file into ext4.h\n\nThere is no longer a reason for a separate ext4_i.h header file, so\nmove it into ext4.h just to make life easier for developers to find\nthe relevant data structures and typedefs.  Should also speed up\ncompiles slightly, too.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8df9675f8b498d0bfa1f0b5b06f56bf1ff366dd5",
      "tree": "38fd56a82049f50b4d774af47b9d39f116071755",
      "parents": [
        "9ca92389c5312a51e819c15c762f0abdc7f3129b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 08:50:38 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri May 01 08:50:38 2009 -0400"
      },
      "message": "ext4: Avoid races caused by on-line resizing and SMP memory reordering\n\nExt4\u0027s on-line resizing adds a new block group and then, only at the\nlast step adjusts s_groups_count.  However, it\u0027s possible on SMP\nsystems that another CPU could see the updated the s_group_count and\nnot see the newly initialized data structures for the just-added block\ngroup.  For this reason, it\u0027s important to insert a SMP read barrier\nafter reading s_groups_count and before reading any (for example) the\nnew block group descriptors allowed by the increased value of\ns_groups_count.\n\nUnfortunately, we rather blatently violate this locking protocol\ndocumented in fs/ext4/resize.c.  Fortunately, (1) on-line resizes\nhappen relatively rarely, and (2) it seems rare that the filesystem\ncode will immediately try to use just-added block group before any\nmemory ordering issues resolve themselves.  So apparently problems\nhere are relatively hard to hit, since ext3 has been vulnerable to the\nsame issue for years with no one apparently complaining.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "395d73413c5656c6d7706ae91dcb441f9b7e3074",
      "tree": "7fadabe996f70d7918583fa2312d4fad19397fcb",
      "parents": [
        "c226fd659fa7b6a7b038df5ae6856a68514bacde",
        "06705bff9114531a997a7d0c2520bea0f2927410"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:57:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 10:57:49 2009 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (33 commits)\n  ext4: Regularize mount options\n  ext4: fix locking typo in mballoc which could cause soft lockup hangs\n  ext4: fix typo which causes a memory leak on error path\n  jbd2: Update locking coments\n  ext4: Rename pa_linear to pa_type\n  ext4: add checks of block references for non-extent inodes\n  ext4: Check for an valid i_mode when reading the inode from disk\n  ext4: Use WRITE_SYNC for commits which are caused by fsync()\n  ext4: Add auto_da_alloc mount option\n  ext4: Use struct flex_groups to calculate get_orlov_stats()\n  ext4: Use atomic_t\u0027s in struct flex_groups\n  ext4: remove /proc tuning knobs\n  ext4: Add sysfs support\n  ext4: Track lifetime disk writes\n  ext4: Fix discard of inode prealloc space with delayed allocation.\n  ext4: Automatically allocate delay allocated blocks on rename\n  ext4: Automatically allocate delay allocated blocks on close\n  ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl\n  ext4: Simplify delalloc code by removing mpage_da_writepages()\n  ext4: Save stack space by removing fake buffer heads\n  ...\n"
    },
    {
      "commit": "c2ec175c39f62949438354f603f4aa170846aabb",
      "tree": "f2c9bf1bec2deabe2d3a5092405b027637b6ead3",
      "parents": [
        "c2fdf3a9b2d52842808a8e551b53b55dd9b45030"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Mar 31 15:23:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:14 2009 -0700"
      },
      "message": "mm: page_mkwrite change prototype to match fault\n\nChange the page_mkwrite prototype to take a struct vm_fault, and return\nVM_FAULT_xxx flags.  There should be no functional change.\n\nThis makes it possible to return much more detailed error information to\nthe VM (and also can provide more information eg.  virtual_address to the\ndriver, which might be important in some special cases).\n\nThis is required for a subsequent fix.  And will also make it easier to\nmerge page_mkwrite() with fault() in future.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Artem Bityutskiy \u003cdedekind@infradead.org\u003e\nCc: Felix Blyakher \u003cfelixb@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "60e58e0f30e723464c2a7d34b71b8675566c572d",
      "tree": "2797ae1bccdad12d53c989a6dccea1c8ffd2bce3",
      "parents": [
        "643d00ccc311664188c8209bf8b596a30e139c3a"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Thu Jan 22 18:13:05 2009 +0100"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Mar 26 02:18:34 2009 +0100"
      },
      "message": "ext4: quota reservation for delayed allocation\n\nUses quota reservation/claim/release to handle quota properly for delayed\nallocation in the three steps: 1) quotas are reserved when data being copied\nto cache when block allocation is defered 2) when new blocks are allocated.\nreserved quotas are converted to the real allocated quota, 2) over-booked\nquotas for metadata blocks are released back.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nAcked-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "afd4672dc7610b7feef5190168aa917cc2e417e4",
      "tree": "53a3aa709232b00473c8da70b792b350150956ff",
      "parents": [
        "7d39db14a42cbd719c7515b9da8f85a2eb6a0633"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 16 23:12:23 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 16 23:12:23 2009 -0400"
      },
      "message": "ext4: Add auto_da_alloc mount option\n\nAdd a mount option which allows the user to disable automatic\nallocation of blocks whose allocation by delayed allocation when the\nfile was originally truncated or when the file is renamed over an\nexisting file.  This feature is intended to save users from the\neffects of naive application writers, but it reduces the effectiveness\nof the delayed allocation code.  This mount option disables this\nsafety feature, which may be desirable for prodcutions systems where\nthe risk of unclean shutdowns or unexpected system crashes is low.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7d39db14a42cbd719c7515b9da8f85a2eb6a0633",
      "tree": "5c93b9f76c9895183d1e973ed296cd9b7a1d9a0e",
      "parents": [
        "9f24e4208f7ee2748f157368b63287dc903fcf60"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 04 19:31:53 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 04 19:31:53 2009 -0500"
      },
      "message": "ext4: Use struct flex_groups to calculate get_orlov_stats()\n\nInstead of looping over all of the block groups in a flex group\nsumming their summary statistics, start tracking used_dirs in struct\nflex_groups, and use struct flex_groups instead.  This should save a\nbit of CPU for mkdir-heavy workloads.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9f24e4208f7ee2748f157368b63287dc903fcf60",
      "tree": "255989fe69ebfb2b031dc7cf6dbe975df67c711a",
      "parents": [
        "b713a5ec55bf73c833f9883cdd761b20ee61a1ab"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 04 19:09:10 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Mar 04 19:09:10 2009 -0500"
      },
      "message": "ext4: Use atomic_t\u0027s in struct flex_groups\n\nReduce pressure on the sb_bgl_lock family of locks by using atomic_t\u0027s\nto track the number of free blocks and inodes in each flex_group.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n\n"
    },
    {
      "commit": "b713a5ec55bf73c833f9883cdd761b20ee61a1ab",
      "tree": "77bbc689f442cad3ce8ca21d7b2c7cea2738d519",
      "parents": [
        "3197ebdb130473a92760100cbfe0d7e671838f48"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 31 09:11:14 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 31 09:11:14 2009 -0400"
      },
      "message": "ext4: remove /proc tuning knobs\n\nRemove tuning knobs in /proc/fs/ext4/\u003cdev/* since they have been\nreplaced by knobs in sysfs at /sys/fs/ext4/\u003cdev\u003e/*.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "afc32f7ee9febc020c73da61402351d4c90437f3",
      "tree": "7b78aaaac87eb704074f6ece996b2c78a69fbe18",
      "parents": [
        "d6014301b5599fba395c42a1e96a7fe86f7d0b2d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Feb 28 19:39:58 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Feb 28 19:39:58 2009 -0500"
      },
      "message": "ext4: Track lifetime disk writes\n\nAdd a new superblock value which tracks the lifetime amount of writes\nto the filesystem.  This is useful in estimating the amount of wear on\nsolid state drives (SSD\u0027s) caused by writes to the filesystem.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "7d8f9f7d150dded7b68e61ca6403a1f166fb4edf",
      "tree": "79572041ae1b5737bc8d75037ff86903469430eb",
      "parents": [
        "ccd2506bd43113659aa904d5bea5d1300605e2a6"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Feb 24 08:21:14 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Feb 24 08:21:14 2009 -0500"
      },
      "message": "ext4: Automatically allocate delay allocated blocks on close\n\nWhen closing a file that had been previously truncated, force any\ndelay allocated blocks that to be allocated so that if the filesystem\nis mounted with data\u003dordered, the data blocks will be pushed out to\ndisk along with the journal commit.  Many application programs expect\nthis, so we do this to avoid zero length files if the system crashes\nunexpectedly.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ccd2506bd43113659aa904d5bea5d1300605e2a6",
      "tree": "99a95645b3c2c092427b7c537c5628d502cd9c22",
      "parents": [
        "f63e6005bc63acc0a6bc3bdb8f971dcfbd827185"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Feb 26 01:04:07 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Feb 26 01:04:07 2009 -0500"
      },
      "message": "ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl\n\nAdd an ioctl which forces all of the delay allocated blocks to be\nallocated.  This also provides a function ext4_alloc_da_blocks() which\nwill be used by the following commits to force files to be fully\nallocated to preserve application-expected ext3 behaviour.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a4912123b688e057084e6557cef8924f7ae5bbde",
      "tree": "34e88705d6617b52caa0f87692b480119a9c9e2e",
      "parents": [
        "2dc6b0d48ca0599837df21b14bb8393d0804af57"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 12 12:18:34 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Mar 12 12:18:34 2009 -0400"
      },
      "message": "ext4: New inode/block allocation algorithms for flex_bg filesystems\n\nThe find_group_flex() inode allocator is now only used if the\nfilesystem is mounted using the \"oldalloc\" mount option.  It is\nreplaced with the original Orlov allocator that has been updated for\nflex_bg filesystems (it should behave the same way if flex_bg is\ndisabled).  The inode allocator now functions by taking into account\neach flex_bg group, instead of each block group, when deciding whether\nor not it\u0027s time to allocate a new directory into a fresh flex_bg.\n\nThe block allocator has also been changed so that the first block\ngroup in each flex_bg is preferred for use for storing directory\nblocks.  This keeps directory blocks close together, which is good for\nspeeding up e2fsck since large directories are more likely to look\nlike this:\n\ndebugfs:  stat /home/tytso/Maildir/cur\nInode: 1844562   Type: directory    Mode:  0700   Flags: 0x81000\nGeneration: 1132745781    Version: 0x00000000:0000ad71\nUser: 15806   Group: 15806   Size: 1060864\nFile ACL: 0    Directory ACL: 0\nLinks: 2   Blockcount: 2072\nFragment:  Address: 0    Number: 0    Size: 0\n ctime: 0x499c0ff4:164961f4 -- Wed Feb 18 08:41:08 2009\n atime: 0x499c0ff4:00000000 -- Wed Feb 18 08:41:08 2009\n mtime: 0x49957f51:00000000 -- Fri Feb 13 09:10:25 2009\ncrtime: 0x499c0f57:00d51440 -- Wed Feb 18 08:38:31 2009\nSize of extra inode fields: 28\nBLOCKS:\n(0):7348651, (1-258):7348654-7348911\nTOTAL: 259\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    }
  ],
  "next": "2dc6b0d48ca0599837df21b14bb8393d0804af57"
}
