)]}'
{
  "log": [
    {
      "commit": "491caa43639abcffaa645fbab372a7ef4ce2975c",
      "tree": "361ce8690a50681765a21fb6c0ed579034ae4b4e",
      "parents": [
        "93ef8541d5c3ad1a73057ff358a49d0ee7146d6f"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Mon Mar 05 10:29:52 2012 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 05 10:29:52 2012 -0500"
      },
      "message": "ext4: fix race between sync and completed io work\n\nThe following command line will leave the aio-stress process unkillable\non an ext4 file system (in my case, mounted on /mnt/test):\n\naio-stress -t 20 -s 10 -O -S -o 2 -I 1000 /mnt/test/aiostress.3561.4 /mnt/test/aiostress.3561.4.20 /mnt/test/aiostress.3561.4.19 /mnt/test/aiostress.3561.4.18 /mnt/test/aiostress.3561.4.17 /mnt/test/aiostress.3561.4.16 /mnt/test/aiostress.3561.4.15 /mnt/test/aiostress.3561.4.14 /mnt/test/aiostress.3561.4.13 /mnt/test/aiostress.3561.4.12 /mnt/test/aiostress.3561.4.11 /mnt/test/aiostress.3561.4.10 /mnt/test/aiostress.3561.4.9 /mnt/test/aiostress.3561.4.8 /mnt/test/aiostress.3561.4.7 /mnt/test/aiostress.3561.4.6 /mnt/test/aiostress.3561.4.5 /mnt/test/aiostress.3561.4.4 /mnt/test/aiostress.3561.4.3 /mnt/test/aiostress.3561.4.2\n\nThis is using the aio-stress program from the xfstests test suite.\nThat particular command line tells aio-stress to do random writes to\n20 files from 20 threads (one thread per file).  The files are NOT\npreallocated, so you will get writes to random offsets within the\nfile, thus creating holes and extending i_size.  It also opens the\nfile with O_DIRECT and O_SYNC.\n\nOn to the problem.  When an I/O requires unwritten extent conversion,\nit is queued onto the completed_io_list for the ext4 inode.  Two code\npaths will pull work items from this list.  The first is the\next4_end_io_work routine, and the second is ext4_flush_completed_IO,\nwhich is called via the fsync path (and O_SYNC handling, as well).\nThere are two issues I\u0027ve found in these code paths.  First, if the\nfsync path beats the work routine to a particular I/O, the work\nroutine will free the io_end structure!  It does not take into account\nthe fact that the io_end may still be in use by the fsync path.  I\u0027ve\nfixed this issue by adding yet another IO_END flag, indicating that\nthe io_end is being processed by the fsync path.\n\nThe second problem is that the work routine will make an assignment to\nio-\u003eflag outside of the lock.  I have witnessed this result in a hang\nat umount.  Moving the flag setting inside the lock resolved that\nproblem.\n\nThe problem was introduced by commit b82e384c7b (\"ext4: optimize\nlocking for end_io extent conversion\"), which first appeared in 3.2.\nAs such, the fix should be backported to that release (probably along\nwith the unwritten extent conversion race fix).\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCC: stable@kernel.org\n\n"
    },
    {
      "commit": "b82e384c7bb9a19036b4daf58fa216df7cd48aa0",
      "tree": "42bde122000b3bf3adf7eaa0328e0fdafdb3b5fd",
      "parents": [
        "4e298021216727cc27017c5032ade86167c66256"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Oct 31 10:56:32 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Oct 31 10:56:32 2011 -0400"
      },
      "message": "ext4: optimize locking for end_io extent conversion\n\nNow that we are doing the locking correctly, we need to grab the\ni_completed_io_lock() twice per end_io.  We can clean this up by\nremoving the structure from the i_complted_io_list, and use this as\nthe locking mechanism to prevent ext4_flush_completed_IO() racing\nagainst ext4_end_io_work(), instead of clearing the\nEXT4_IO_END_UNWRITTEN in io-\u003eflag.\n\nIn addition, if the ext4_convert_unwritten_extents() returns an error,\nwe no longer keep the end_io structure on the linked list.  This\ndoesn\u0027t help, because it tends to lock up the file system and wedges\nthe system.  That\u0027s one way to call attention to the problem, but it\ndoesn\u0027t help the overall robustness of the system.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "d73d5046a72467d4510825b99e2269e09ad80e15",
      "tree": "4ac8b5729e1aeffe8348557a7f77da1791c268cc",
      "parents": [
        "6d6a435190bdf2e04c9465cde5bdc3ac68cf11a4"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sun Oct 30 18:26:08 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Oct 30 18:26:08 2011 -0400"
      },
      "message": "ext4: Use correct locking for ext4_end_io_nolock()\n\nWe must hold i_completed_io_lock when manipulating anything on the\ni_completed_io_list linked list.  This includes io-\u003elock, which we\nwere checking in ext4_end_io_nolock().\n\nSo move this check to ext4_end_io_work().  This also has the bonus of\navoiding extra work if it is already done without needing to take the\nmutex.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e0cbee3e14195ef07b8ab6ff30930fb93d2e510a",
      "tree": "c1bdcede0da0bbc1f06b3335d5c35ebc8011e72b",
      "parents": [
        "1bce63d1a2a2c8929442b79acd4eab2e3db10a0b"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Tue Oct 18 10:57:51 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 18 10:57:51 2011 -0400"
      },
      "message": "ext4: functions should not be declared extern\n\nThe function declarations in ext4.h are already marked extern, so it\u0027s\nnot necessary to do so in the .c files.\n\nThis quiets the sparse noise:\n\nwarning: function \u0027ext4_flush_completed_IO\u0027 with external linkage has definition\nwarning: function \u0027ext4_init_inode_table\u0027 with external linkage has definition\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "60ad4466821a96913a9b567115e194ed1087c2d7",
      "tree": "cd488ba72a60f856b85a467763fb633cbe7ef2d9",
      "parents": [
        "1b8e94993c4752d98c33903aa836acc15f7e6d5c",
        "79a77c5ac34cc27ccbfbdf7113b41cdd93534eab"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 01 13:56:03 2011 -1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 01 13:56:03 2011 -1000"
      },
      "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: (60 commits)\n  ext4: prevent memory leaks from ext4_mb_init_backend() on error path\n  ext4: use EXT4_BAD_INO for buddy cache to avoid colliding with valid inode #\n  ext4: use ext4_msg() instead of printk in mballoc\n  ext4: use ext4_kvzalloc()/ext4_kvmalloc() for s_group_desc and s_group_info\n  ext4: introduce ext4_kvmalloc(), ext4_kzalloc(), and ext4_kvfree()\n  ext4: use the correct error exit path in ext4_init_inode_table()\n  ext4: add missing kfree() on error return path in add_new_gdb()\n  ext4: change umode_t in tracepoint headers to be an explicit __u16\n  ext4: fix races in ext4_sync_parent()\n  ext4: Fix overflow caused by missing cast in ext4_fallocate()\n  ext4: add action of moving index in ext4_ext_rm_idx for Punch Hole\n  ext4: simplify parameters of reserve_backup_gdb()\n  ext4: simplify parameters of add_new_gdb()\n  ext4: remove lock_buffer in bclean() and setup_new_group_blocks()\n  ext4: simplify journal handling in setup_new_group_blocks()\n  ext4: let setup_new_group_blocks() set multiple bits at a time\n  ext4: fix a typo in ext4_group_extend()\n  ext4: let ext4_group_add_blocks() handle 0 blocks quickly\n  ext4: let ext4_group_add_blocks() return an error code\n  ext4: rename ext4_add_groupblocks() to ext4_group_add_blocks()\n  ...\n\nFix up conflict in fs/ext4/inode.c: commit aacfc19c626e (\"fs: simplify\nthe blockdev_direct_IO prototype\") had changed the ext4_ind_direct_IO()\nfunction for the new simplified calling convention, while commit\ndae1e52cb126 (\"ext4: move ext4_ind_* functions from inode.c to\nindirect.c\") moved the function to another file.\n"
    },
    {
      "commit": "d59729f4e794f814b25ccd2aebfbe606242c4544",
      "tree": "96b7cfef8124c23b6a17ded73fddffc567d6f2a1",
      "parents": [
        "29ae07b702cb77dbc24b0843f15ee8cf8a642311"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 30 12:34:19 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Jul 30 12:34:19 2011 -0400"
      },
      "message": "ext4: fix races in ext4_sync_parent()\n\nFix problems if fsync() races against a rename of a parent directory\nas pointed out by Al Viro in his own inimitable way:\n\n\u003eWhile we are at it, could somebody please explain what the hell is ext4\n\u003edoing in\n\u003estatic int ext4_sync_parent(struct inode *inode)\n\u003e{\n\u003e        struct writeback_control wbc;\n\u003e        struct dentry *dentry \u003d NULL;\n\u003e        int ret \u003d 0;\n\u003e\n\u003e        while (inode \u0026\u0026 ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) {\n\u003e                ext4_clear_inode_state(inode, EXT4_STATE_NEWENTRY);\n\u003e                dentry \u003d list_entry(inode-\u003ei_dentry.next,\n\u003e                                    struct dentry, d_alias);\n\u003e                if (!dentry || !dentry-\u003ed_parent || !dentry-\u003ed_parent-\u003ed_inode)\n\u003e                        break;\n\u003e                inode \u003d dentry-\u003ed_parent-\u003ed_inode;\n\u003e                ret \u003d sync_mapping_buffers(inode-\u003ei_mapping);\n\u003e                ...\n\u003eNote that dentry obviously can\u0027t be NULL there.  dentry-\u003ed_parent is never\n\u003eNULL.  And dentry-\u003ed_parent would better not be negative, for crying out\n\u003eloud!  What\u0027s worse, there\u0027s no guarantees that dentry-\u003ed_parent will\n\u003eremain our parent over that sync_mapping_buffers() *and* that inode won\u0027t\n\u003ejust be freed under us (after rename() and memory pressure leading to\n\u003eeviction of what used to be our dentry-\u003ed_parent)......\n\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "02c24a82187d5a628c68edfe71ae60dc135cd178",
      "tree": "c8dbaba4d82e2b20ed4335910a564a1f7d90fcf6",
      "parents": [
        "22735068d53c7115e384bc88dea95b17e76a6839"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sat Jul 16 20:44:56 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:59 2011 -0400"
      },
      "message": "fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n\nBtrfs needs to be able to control how filemap_write_and_wait_range() is called\nin fsync to make it less of a painful operation, so push down taking i_mutex and\nthe calling of filemap_write_and_wait() down into the -\u003efsync() handlers.  Some\nfile systems can drop taking the i_mutex altogether it seems, like ext3 and\nocfs2.  For correctness sake I just pushed everything down in all cases to make\nsure that we keep the current behavior the same for everybody, and then each\nindividual fs maintainer can make up their mind about what to do from there.\nThanks,\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "93628ffb9ba67c154849ac6c387f98f5e3198b84",
      "tree": "5aeeedb16744a901f945897fda4822e3b852cec5",
      "parents": [
        "bbd2be36910728f485ac78ea36e0f4f5a38e691e"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue May 24 12:00:54 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue May 24 12:00:54 2011 -0400"
      },
      "message": "ext4: fix waiting and sending of a barrier in ext4_sync_file()\n\njbd2_log_start_commit() returns 1 only when we really start a\ntransaction.  But we also need to wait for a transaction when the\ncommit is already running.  Fix this problem by waiting for\ntransaction commit unconditionally (which is just a quick check if the\ntransaction is already committed).\n\nAlso we have to be more careful with sending of a barrier because when\ntransaction is being committed in parallel to ext4_sync_file()\nrunning, we cannot be sure that the barrier the journalling code sends\nhappens after we wrote all the data for fsync (note that not every\ndata writeout needs to trigger metadata changes thus commit of some\nmetadata changes can be running while other data is still written\nout). So use jbd2_will_send_data_barrier() helper to detect the common\ncases when we can be sure barrier will be issued by the commit code\nand issue the barrier ourselves in the remaining cases.\n\nReported-by: Edward Goggin \u003cegoggin@vmware.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "e8bbe8c401c61408ea226b33b824f231c8f9ccae",
      "tree": "ebba3b3228e43896fb5dbc281a06f75de0667a55",
      "parents": [
        "1be2add685181ba31554ffefa428b0f80a408bff"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon May 09 10:25:54 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 09 10:25:54 2011 -0400"
      },
      "message": "ext4: use EXT4FS_DEBUG instead of EXT4_DEBUG in fsync.c\n\nWe have EXT4FS_DEBUG for some old debug and CONFIG_EXT4_DEBUG\nfor the new mballoc debug, but there isn\u0027t any EXT4_DEBUG.\n\nAs CONFIG_EXT4_DEBUG seems to be only used in mballoc, use\nEXT4FS_DEBUG in fsync.c.\n\n[ It doesn\u0027t really matter; although I\u0027m including this commit for\n  consistency\u0027s sake.  The whole point of the #ifdef\u0027s is to disable\n  the debugging code.  In general you\u0027re not going to want to enable\n  all of the code protected by EXT4FS_DEBUG at the same time.  -- Ted ]\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a97b52022a73ec12e43f0b2c7d4bd1f40f89c81d",
      "tree": "1a35544915a5704fa59c63b43e9f46e20be1e296",
      "parents": [
        "18770c7c3a0ccd60017ac76b5d2e7d1f71376b94",
        "c8205636029fc869278c55b7336053b3e7ae3ef4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 11 15:45:47 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 11 15:45:47 2011 -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:\n  ext4: fix data corruption regression by reverting commit 6de9843dab3f\n  ext4: Allow indirect-block file to grow the file size to max file size\n  ext4: allow an active handle to be started when freezing\n  ext4: sync the directory inode in ext4_sync_parent()\n  ext4: init timer earlier to avoid a kernel panic in __save_error_info\n  jbd2: fix potential memory leak on transaction commit\n  ext4: fix a double free in ext4_register_li_request\n  ext4: fix credits computing for indirect mapped files\n  ext4: remove unnecessary [cm]time update of quota file\n  jbd2: move bdget out of critical section\n"
    },
    {
      "commit": "0893ed458b4b1d7c7667ca7ffb8b11febe7e7e6c",
      "tree": "a9a4e226a6bfa7a13e0cad545280e5e8ce2a80b2",
      "parents": [
        "0449641130f5652b344ef6fa39fa019d7e94660a"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Sun Apr 10 22:05:31 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Apr 10 22:05:31 2011 -0400"
      },
      "message": "ext4: sync the directory inode in ext4_sync_parent()\n\next4 has taken the stance that, in the absence of a journal,\nwhen an fsync/fdatasync of an inode is done, the parent\ndirectory should be sync\u0027ed if this inode entry is new.\next4_sync_parent(), which implements this, does indeed sync\nthe dirent pages for parent directories, but it does not\nsync the directory *inode*.  This patch fixes this.\n\nAlso now return error status from ext4_sync_parent().\n\nI tested this using a power fail test, which panics a\nmachine running a file server getting requests from a\nclient.  Without this patch, on about every other test run,\nthe server is missing many, many files that had been synced.\nWith this patch, on \u003e 6 runs, I see zero files being lost.\n\nGoogle-Bug-Id: 4179519\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "0562e0bad483d10e9651fbb8f21dc3d0bad57374",
      "tree": "19f6597f92c028badcb6df360ccac22240378e25",
      "parents": [
        "4596fe07679ff0fae904515691ea747467614871"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Mon Mar 21 21:38:05 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Mar 21 21:38:05 2011 -0400"
      },
      "message": "ext4: add more tracepoints and use dev_t in the trace buffer\n\n- Add more ext4 tracepoints.\n- Change ext4 tracepoints to use dev_t field with MAJOR/MINOR macros\nso that we can save 4 bytes in the ring buffer on some platforms.\n- Add sync_mode to ext4_da_writepages, ext4_da_write_pages, and\next4_da_writepages_result tracepoints. Also remove for_reclaim\nfield from ext4_da_writepages since it is usually not very useful.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3889fd57ea3c58209354862523275774fca9db03",
      "tree": "1e68fb9b2691c0b792a36be7d87c987e8508dac6",
      "parents": [
        "b40971426a837e9dc9c66e1b6bbcb3874eafe4e0"
      ],
      "author": {
        "name": "Jiaying Zhang",
        "email": "jiayingz@google.com",
        "time": "Mon Jan 10 12:47:05 2011 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 10 12:47:05 2011 -0500"
      },
      "message": "ext4: flush the i_completed_io_list during ext4_truncate\n\nTed first found the bug when running 2.6.36 kernel with dioread_nolock\nmount option that xfstests #13 complained about wrong file size during fsck.\nHowever, the bug exists in the older kernels as well although it is\nsomehow harder to trigger.\n\nThe problem is that ext4_end_io_work() can happen after we have truncated an\ninode to a smaller size. Then when ext4_end_io_work() calls \next4_convert_unwritten_extents(), we may reallocate some blocks that have \nbeen truncated, so the inode size becomes inconsistent with the allocated\nblocks. \n\nThe following patch flushes the i_completed_io_list during truncate to reduce \nthe risk that some pending end_io requests are executed later and convert \nalready truncated blocks to initialized. \n\nNote that although the fix helps reduce the problem a lot there may still \nbe a race window between vmtruncate() and ext4_end_io_work(). The fundamental\nproblem is that if vmtruncate() is called without either i_mutex or i_alloc_sem\nheld, it can race with an ongoing write request so that the io_end request is\nprocessed later when the corresponding blocks have been truncated.\n\nTed and I have discussed the problem offline and we saw a few ways to fix\nthe race completely:\n\na) We guarantee that i_mutex lock and i_alloc_sem write lock are both hold \nwhenever vmtruncate() is called. The i_mutex lock prevents any new write\nrequests from entering writeback and the i_alloc_sem prevents the race\nfrom ext4_page_mkwrite(). Currently we hold both locks if vmtruncate()\nis called from do_truncate(), which is probably the most common case.\nHowever, there are places where we may call vmtruncate() without holding\neither i_mutex or i_alloc_sem. I would like to ask for other people\u0027s\nopinions on what locks are expected to be held before calling vmtruncate().\nThere seems a disagreement among the callers of that function.\n\nb) We change the ext4 write path so that we change the extent tree to contain \nthe newly allocated blocks and update i_size both at the same time --- when \nthe write of the data blocks is completed.\n\nc) We add some additional locking to synchronize vmtruncate() and \next4_end_io_work(). This approach may have performance implications so we\nneed to be careful.\n\nAll of the above proposals may require more substantial changes, so\nwe may consider to take the following patch as a bandaid.\n\nSigned-off-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "a107e5a3a473a2ea62bd5af24e11b84adf1486ff",
      "tree": "d36c2cb38d8be88d4d75cdebc354aa140aa0e470",
      "parents": [
        "e3e1288e86a07cdeb0aee5860a2dff111c6eff79",
        "a269029d0e2192046be4c07ed78a45022469ee4c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 23:44:47 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 23:44:47 2010 -0400"
      },
      "message": "Merge branch \u0027next\u0027 into upstream-merge\n\nConflicts:\n\tfs/ext4/inode.c\n\tfs/ext4/mballoc.c\n\tinclude/trace/events/ext4.h\n"
    },
    {
      "commit": "4a873a472b3bbcfd425d7ae210afdec28c04e2e5",
      "tree": "88aa333bfafcc5303b7a3074865f51f67ad836b9",
      "parents": [
        "bf89d16f6ef5389f1b9d8046e838ec87b9b3f8b9"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:14 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:14 2010 -0400"
      },
      "message": "ext4: move flush_completed_IO to fs/ext4/fsync.c and make it static\n\nFix a namespace leak by moving the function to the file where it is\nused and making it static.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "dd3932eddf428571762596e17b65f5dc92ca361b",
      "tree": "57cec5ae2f862037f78b7e993323d77955bb6463",
      "parents": [
        "8786fb70ccb36c7cff64680bb80c46d3a09d44db"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Sep 16 20:51:46 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 20:52:58 2010 +0200"
      },
      "message": "block: remove BLKDEV_IFL_WAIT\n\nAll the blkdev_issue_* helpers can only sanely be used for synchronous\ncaller.  To issue cache flushes or barriers asynchronously the caller needs\nto set up a bio by itself with a completion callback to move the asynchronous\nstate machine ahead.  So drop the BLKDEV_IFL_WAIT flag that is always\nspecified when calling blkdev_issue_* and also remove the now unused flags\nargument to blkdev_issue_flush and blkdev_issue_zeroout.  For\nblkdev_issue_discard we need to keep it for the secure discard flag, which\ngains a more descriptive name and loses the bitops vs flag confusion.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1b061d9247f71cd15edc4c4c4600191a903642c0",
      "tree": "30d92ca82d8286e7a45fba108230ecd23e61673b",
      "parents": [
        "7ea8085910ef3dd4f3cad6845aaa2b580d39b115"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed May 26 17:53:41 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:06:06 2010 -0400"
      },
      "message": "rename the generic fsync implementations\n\nWe don\u0027t name our generic fsync implementations very well currently.\nThe no-op implementation for in-memory filesystems currently is called\nsimple_sync_file which doesn\u0027t make too much sense to start with,\nthe the generic one for simple filesystems is called simple_fsync\nwhich can lead to some confusion.\n\nThis patch renames the generic file fsync method to generic_file_fsync\nto match the other generic_file_* routines it is supposed to be used\nwith, and the no-op implementation to noop_fsync to make it obvious\nwhat to expect.  In addition add some documentation for both methods.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\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": "e4ce30f3779c2ddaa7dfaa4042209e5dbacbada5",
      "tree": "cc64c1dcd16b5dbf71ebc8338b339e6fb04abaee",
      "parents": [
        "b899ebeb05da4287ce845976727e3e83dadd25d5",
        "14ece1028b3ed53ffec1b1213ffc6acaf79ad77c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 10:26:37 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 10:26:37 2010 -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: (40 commits)\n  ext4: Make fsync sync new parent directories in no-journal mode\n  ext4: Drop whitespace at end of lines\n  ext4: Fix compat EXT4_IOC_ADD_GROUP\n  ext4: Conditionally define compat ioctl numbers\n  tracing: Convert more ext4 events to DEFINE_EVENT\n  ext4: Add new tracepoints to track mballoc\u0027s buddy bitmap loads\n  ext4: Add a missing trace hook\n  ext4: restart ext4_ext_remove_space() after transaction restart\n  ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted\n  ext4: Avoid crashing on NULL ptr dereference on a filesystem error\n  ext4: Use bitops to read/modify i_flags in struct ext4_inode_info\n  ext4: Convert calls of ext4_error() to EXT4_ERROR_INODE()\n  ext4: Convert callers of ext4_get_blocks() to use ext4_map_blocks()\n  ext4: Add new abstraction ext4_map_blocks() underneath ext4_get_blocks()\n  ext4: Use our own write_cache_pages()\n  ext4: Show journal_checksum option\n  ext4: Fix for ext4_mb_collect_stats()\n  ext4: check for a good block group before loading buddy pages\n  ext4: Prevent creation of files larger than RLIMIT_FSIZE using fallocate\n  ext4: Remove extraneous newlines in ext4_msg() calls\n  ...\n\nFixed up trivial conflict in fs/ext4/fsync.c\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": "0671e704658b9f26f85e78d51176daa861f955c7",
      "tree": "412b4ec94b565eabaab74312c5b7fd04341a6d4f",
      "parents": [
        "b57f95a38233a2e73b679bea4a5453a1cc2a1cc9"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Mon May 10 00:00:00 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon May 10 00:00:00 2010 -0400"
      },
      "message": "ext4: check missed return value in ext4_sync_file()\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fbd9b09a177a481eda256447c881f014f29034fe",
      "tree": "ef7e213045382f82a1e3e3cf134d196a1045dd7a",
      "parents": [
        "6b4517a7913a09d3259bb1d21c9cb300f12294bd"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Apr 28 17:55:06 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 28 19:47:36 2010 +0200"
      },
      "message": "blkdev: generalize flags for blkdev_issue_fn functions\n\nThe patch just convert all blkdev_issue_xxx function to common\nset of flags. Wait/allocation semantics preserved.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\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": "cc3e1bea5d87635c519da657303690f5538bb4eb",
      "tree": "727b348d0389a2fe6618fb224fe1d81d207668c4",
      "parents": [
        "034fb4c95fc0fed4ec4a50778127b92c6f2aec01"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 06:52:08 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 06:52:08 2009 -0500"
      },
      "message": "ext4, jbd2: Add barriers for file systems with exernal journals\n\nThis is a bit complicated because we are trying to optimize when we\nsend barriers to the fs data disk.  We could just throw in an extra\nbarrier to the data disk whenever we send a barrier to the journal\ndisk, but that\u0027s not always strictly necessary.\n\nWe only need to send a barrier during a commit when there are data\nblocks which are must be written out due to an inode written in\nordered mode, or if fsync() depends on the commit to force data blocks\nto disk.  Finally, before we drop transactions from the beginning of\nthe journal during a checkpoint operation, we need to guarantee that\nany blocks that were flushed out to the data disk are firmly on the\nrust platter before we drop the transaction from the journal.\n\nThanks to Oleg Drokin for pointing out this flaw in ext3/ext4.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\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": "6b17d902fdd241adfa4ce780df20547b28bf5801",
      "tree": "a5daca03108c565c58347d36b1dec70cf22ef1d1",
      "parents": [
        "1032988c71f3f85483b2b4319684d1205a704c02"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:24:57 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Nov 23 07:24:57 2009 -0500"
      },
      "message": "ext4: avoid issuing unnecessary barriers\n\nWe don\u0027t to issue an I/O barrier on an error or if we force commit\nbecause we are doing data journaling.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: stable@kernel.org\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": "fe188c0e084bdf3038dc0ac963c21d764f53f7da",
      "tree": "bb712f58f4c0356058825da75da57d0af450e01b",
      "parents": [
        "c7acb4c16646943180bd221c167a077e0a084f9c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 12 13:41:55 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 12 13:41:55 2009 -0400"
      },
      "message": "ext4: Assure that metadata blocks are written during fsync in no journal mode\n\nWhen there is no journal present, we must attach buffer heads\nassociated with extent tree and indirect blocks to the inode\u0027s\nmapping-\u003eprivate_list via mark_buffer_dirty_inode() so that\next4_sync_file() --- which is called to service fsync() and\nfdatasync() system calls --- can write out the inode\u0027s metadata blocks\nby calling sync_mapping_buffers().\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "5f3481e9a80c240f169b36ea886e2325b9aeb745",
      "tree": "435a8cf2be9c81a545f42d5af881450f8d121e74",
      "parents": [
        "d0646f7b636d067d715fab52a2ba9c6f0f46b0d7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Sep 05 21:42:42 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sat Sep 05 21:42:42 2009 -0400"
      },
      "message": "ext4: fix cache flush in ext4_sync_file\n\nWe need to flush the write cache unconditionally in -\u003efsync, otherwise\nwrites into already allocated blocks can get lost.  Writes into fully\nallocated files are very common when using disk images for\nvirtualization, and without this fix can easily lose data after\nan fdatasync, which is the typical implementation for a cache flush on\nthe virtual drive.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "9bffad1ed2a003a355ed1b42424a0ae3575275ed",
      "tree": "9016e7b0e04a0e5319680f9e1f89fc1abb13c765",
      "parents": [
        "879c5e6b7cb4c689d08ca9b2e353d8ab3dc425d5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:48:11 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:48:11 2009 -0400"
      },
      "message": "ext4: convert instrumentation from markers to tracepoints\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "ede86cc473defab74d778aeac14b19f43129d4d1",
      "tree": "19da8009accf1737171f5949413e46a9086d5fdc",
      "parents": [
        "23f8b79eae8a74e42a006ffa7c456e295c7e1c0d"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Oct 05 20:50:06 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Sun Oct 05 20:50:06 2008 -0400"
      },
      "message": "ext4: Add debugging markers that can be used by systemtap\n\nThis debugging markers are designed to debug problems such as the\nrandom filesystem latency problems reported by Arjan.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "af5bc92dded4d98dfeabc8b5b9812571345b263d",
      "tree": "5cfaf27e673a09d3ad1341c175559be0a3ea990d",
      "parents": [
        "e5f8eab8851dff162e7ade46f084cb8575dc45f7"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 22:25:24 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Sep 08 22:25:24 2008 -0400"
      },
      "message": "ext4: Fix whitespace checkpatch warnings/errors\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "d755fb384250d6bd7fd18a0930e71965acc8e72e",
      "tree": "7913bce90918cd26c8a5fe05f6c8943828e333bb",
      "parents": [
        "654b4908bc17a6318d18f3036fecc5155de92f55"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Fri Jul 11 19:27:31 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jul 11 19:27:31 2008 -0400"
      },
      "message": "ext4: call blkdev_issue_flush on fsync\n\nTo ensure that bits are truly on-disk after an fsync,\nwe should call blkdev_issue_flush if barriers are supported.\n\nInspired by an old thread on barriers, by reiserfs \u0026 xfs\nwhich do the same, and by a patch SuSE ships with their kernel\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3dcf54515aa4981a647ad74859199032965193a5",
      "tree": "b95d895bb2f6fa15be29411b15d538c21b0de930",
      "parents": [
        "216553c4b7f3e3e2beb4981cddca9b2027523928"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Apr 29 18:13:32 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Apr 29 18:13:32 2008 -0400"
      },
      "message": "ext4: move headers out of include/linux\n\nMove ext4 headers out of include/linux.  This is just the trivial move,\nthere\u0027s some more thing that could be done later. \n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "53c550e9750434ddc4275fe0405170e0d1b46731",
      "tree": "e810f7e68b54f41c8ab5d5dad9b1c7dd8068c61a",
      "parents": [
        "97bd42b9c8be748ad85b362ba3bd401f4d35be80"
      ],
      "author": {
        "name": "Hisashi Hifumi",
        "email": "hifumi.hisashi@oss.ntt.co.jp",
        "time": "Thu Apr 17 10:38:59 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Apr 17 10:38:59 2008 -0400"
      },
      "message": "ext4: fdatasync should skip metadata writeout when overwriting\n\nCurrently fdatasync is identical to fsync in ext3.\n\nI think fdatasync should skip journal flush in data\u003dordered and\ndata\u003dwriteback mode when it overwrites to already-instantiated blocks on\nHDD.  When I_DIRTY_DATASYNC flag is not set, fdatasync should skip journal\nwriteout because this indicates only atime or/and mtime updates.\n\nFollowing patch is the same approach of ext2\u0027s fsync code(ext2_sync_file).\n\nI did a performance test using the sysbench.\n\n#sysbench --num-threads\u003d128 --max-requests\u003d50000 --test\u003dfileio --file-total-size\u003d128G\n--file-test-mode\u003drndwr --file-fsync-mode\u003dfdatasync run\n\nThe result on ext3 was:\n\n\t-2.6.24\n\tOperations performed:  0 Read, 50080 Write, 59600 Other \u003d 109680 Total\n\tRead 0b  Written 782.5Mb  Total transferred 782.5Mb  (12.116Mb/sec)\n\t  775.45 Requests/sec executed\n\n\tTest execution summary:\n\t    total time:                          64.5814s\n\t    total number of events:              50080\n\t    total time taken by event execution: 3713.9836\n\t    per-request statistics:\n\t         min:                            0.0000s\n\t         avg:                            0.0742s\n\t         max:                            0.9375s\n\t         approx.  95 percentile:         0.2901s\n\n\tThreads fairness:\n\t    events (avg/stddev):           391.2500/23.26\n\t    execution time (avg/stddev):   29.0155/1.99\n\n\t-2.6.24-patched\n\tOperations performed:  0 Read, 50009 Write, 61596 Other \u003d 111605 Total\n\tRead 0b  Written 781.39Mb  Total transferred 781.39Mb  (16.419Mb/sec)\n\t1050.83 Requests/sec executed\n\n\tTest execution summary:\n\t    total time:                          47.5900s\n\t    total number of events:              50009\n\t    total time taken by event execution: 2934.5768\n\t    per-request statistics:\n \t         min:                            0.0000s\n\t         avg:                            0.0587s\n \t         max:                            0.8938s\n\t         approx.  95 percentile:         0.1993s\n\n\tThreads fairness:\n\t    events (avg/stddev):           390.6953/22.64\n\t    execution time (avg/stddev):   22.9264/1.17\n\nFilesystem I/O throughput was improved.\n\nSigned-off-by :Hisashi Hifumi \u003chifumi.hisashi@oss.ntt.co.jp\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: \u003clinux-ext4@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "ac39849ddc19c0bbb39068497139ac45bccd4321",
      "tree": "b5a6a17f1cd9c98374b91feafcf554bf5197c44d",
      "parents": [
        "d8dd0b45438d62fc4a93d8e3cee9985710d01e40"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Oct 16 18:38:25 2007 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 17 18:50:03 2007 -0400"
      },
      "message": "ext4: sparse fixes\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "dab291af8d6307a3075c3d67d0cc8f98e646cb94",
      "tree": "a2207ab3e2e00472e5e3c969ad0dd211fb9e4151",
      "parents": [
        "a920e9416b3469994860ab552dfd7fd5a5aff162"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Wed Oct 11 01:21:01 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:16 2006 -0700"
      },
      "message": "[PATCH] jbd2: enable building of jbd2 and have ext4 use it rather than jbd\n\nReworked from a patch by Mingming Cao and Randy Dunlap\n\nSigned-off-By: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: Dave Kleikamp \u003cshaggy@austin.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "617ba13b31fbf505cc21799826639ef24ed94af0",
      "tree": "2a41e8c993f7c1eed115ad24047d546ba56cbdf5",
      "parents": [
        "ac27a0ec112a089f1a5102bc8dffc79c8c815571"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Wed Oct 11 01:20:53 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:15 2006 -0700"
      },
      "message": "[PATCH] ext4: rename ext4 symbols to avoid duplication of ext3 symbols\n\nMingming Cao originally did this work, and Shaggy reproduced it using some\nscripts from her.\n\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: Dave Kleikamp \u003cshaggy@austin.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ac27a0ec112a089f1a5102bc8dffc79c8c815571",
      "tree": "bcbcc0a5a88bf99b35119d9d9d660a37c503d787",
      "parents": [
        "502717f4e112b18d9c37753a32f675bec9f2838b"
      ],
      "author": {
        "name": "Dave Kleikamp",
        "email": "shaggy@austin.ibm.com",
        "time": "Wed Oct 11 01:20:50 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:15 2006 -0700"
      },
      "message": "[PATCH] ext4: initial copy of files from ext3\n\nStart of the ext4 patch series.  See Documentation/filesystems/ext4.txt for\ndetails.\n\nThis is a simple copy of the files in fs/ext3 to fs/ext4 and\n/usr/incude/linux/ext3* to /usr/include/ex4*\n\nSigned-off-by: Dave Kleikamp \u003cshaggy@austin.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ]
}
