)]}'
{
  "log": [
    {
      "commit": "932bb305ba2a01cd62809644d569f004e77a4355",
      "tree": "f03c1389c2902285e7e964210729bbbf2505d607",
      "parents": [
        "c254c9ec14d5c418c8f36ea7573edae2470a1dc1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Mar 13 22:45:25 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 13 22:45:25 2012 -0400"
      },
      "message": "jbd2: remove bh_state lock from checkpointing code\n\nAll accesses to checkpointing entries in journal_head are protected\nby j_list_lock. Thus __jbd2_journal_remove_checkpoint() doesn\u0027t really\nneed bh_state lock.\n\nAlso the only part of journal head that the rest of checkpointing code\nneeds to check is jh-\u003eb_transaction which is safe to read under\nj_list_lock.\n\nSo we can safely remove bh_state lock from all of checkpointing code which\nmakes it considerably prettier.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "96c866782b5e0cbdcd8e4d921d0a893278430830",
      "tree": "00a822f18c9583977c03918ccdcb766c707d8a06",
      "parents": [
        "79feb521a44705262d15cc819a4117a447b11ea7"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Mar 13 22:24:54 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 13 22:24:54 2012 -0400"
      },
      "message": "jbd2: fix BH_JWrite setting in checkpointing code\n\nBH_JWrite bit should be set when buffer is written to the journal. So\ncheckpointing shouldn\u0027t set this bit when writing out buffer. This didn\u0027t\ncause any observable bug since BH_JWrite bit is used only for debugging\npurposes but it\u0027s good to have this consistent.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "79feb521a44705262d15cc819a4117a447b11ea7",
      "tree": "a4de6ed084b7a68c0885049d94841ce8334b64a7",
      "parents": [
        "a78bb11d7acd525623c6a0c2ff4e213d527573fa"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Mar 13 22:22:54 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 13 22:22:54 2012 -0400"
      },
      "message": "jbd2: issue cache flush after checkpointing even with internal journal\n\nWhen we reach jbd2_cleanup_journal_tail(), there is no guarantee that\ncheckpointed buffers are on a stable storage - especially if buffers were\nwritten out by jbd2_log_do_checkpoint(), they are likely to be only in disk\u0027s\ncaches. Thus when we update journal superblock effectively removing old\ntransaction from journal, this write of superblock can get to stable storage\nbefore those checkpointed buffers which can result in filesystem corruption\nafter a crash. Thus we must unconditionally issue a cache flush before we\nupdate journal superblock in these cases.\n\nA similar problem can also occur if journal superblock is written only in\ndisk\u0027s caches, other transaction starts reusing space of the transaction\ncleaned from the log and power failure happens. Subsequent journal replay would\nstill try to replay the old transaction but some of it\u0027s blocks may be already\noverwritten by the new transaction. For this reason we must use WRITE_FUA when\nupdating log tail and we must first write new log tail to disk and update\nin-memory information only after that.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "24bcc89c7e7c64982e6192b4952a0a92379fc341",
      "tree": "0661b6c83fa9bb681f3aa32264323ce96c264958",
      "parents": [
        "31d4f3a2f3c73f279ff96a7135d7202ef6833f12"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Mar 13 15:41:04 2012 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Mar 13 15:41:04 2012 -0400"
      },
      "message": "jbd2: split updating of journal superblock and marking journal empty\n\nThere are three case of updating journal superblock. In the first case, we want\nto mark journal as empty (setting s_sequence to 0), in the second case we want\nto update log tail, in the third case we want to update s_errno. Split these\ncases into separate functions. It makes the code slightly more straightforward\nand later patches will make the distinction even more important.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "0c2022eccb01630c037f2024531e9ff1afbe1564",
      "tree": "704d54db298e64a84fd60330fd7985d27117d98c",
      "parents": [
        "18aadd47f88464928b5ce57791c2e8f9f2aaece0"
      ],
      "author": {
        "name": "Yongqiang Yang",
        "email": "xiaoqiangnk@gmail.com",
        "time": "Mon Feb 20 17:53:02 2012 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 20 17:53:02 2012 -0500"
      },
      "message": "jbd2: allocate transaction from separate slab cache\n\nThere is normally only a handful of these active at any one time, but\nputting them in a separate slab cache makes debugging memory\ncorruption problems easier.  Manish Katiyar also wanted this make it\neasier to test memory failure scenarios in the jbd2 layer.\n\nCc: Manish Katiyar \u003cmkatiyar@gmail.com\u003e\nSigned-off-by: Yongqiang Yang \u003cxiaoqiangnk@gmail.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "2201c590dd6e802795e21e69e3c152c519f1568e",
      "tree": "a617a8578dd181bbcb83c0e3c6198a3dc836eef8",
      "parents": [
        "3d2b158262826e8b75bbbfb7b97010838dd92ac7"
      ],
      "author": {
        "name": "Seiji Aguchi",
        "email": "seiji.aguchi@hds.com",
        "time": "Mon Feb 20 17:53:01 2012 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Feb 20 17:53:01 2012 -0500"
      },
      "message": "jbd2: add drop_transaction/update_superblock_end tracepoints\n\nThis patch adds trace_jbd2_drop_transaction and\ntrace_jbd2_update_superblock_end because there are similar tracepoints\nin jbd and they are needed in jbd2 as well.\n\nReviewed-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: Seiji Aguchi \u003cseiji.aguchi@hds.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n\n"
    },
    {
      "commit": "90802ed9c3dbab2e067bd9fc67a30e66e6774e8f",
      "tree": "ac379380a669ad3c2a7ab0c3d923f1e9644ae885",
      "parents": [
        "05183189ee5df8799b22c56d93f0f69b8490e33f"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Mon Dec 05 13:00:34 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Dec 06 09:53:40 2011 +0100"
      },
      "message": "treewide: Fix comment and string typo \u0027bufer\u0027\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "d3ad8434aa83ef7c88bc91edcfe012cdcbab9f3e",
      "tree": "f94f65f0191334b8d7d071ff3f9342621d82f9cc",
      "parents": [
        "890879cfa08f5ceaa09810611f46e890f7d57ff6"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Jun 27 12:36:29 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 27 12:36:29 2011 -0400"
      },
      "message": "jbd2: use WRITE_SYNC in journal checkpoint\n\nIn journal checkpoint, we write the buffer and wait for its finish.\nBut in cfq, the async queue has a very low priority, and in our test,\nif there are too many sync queues and every queue is filled up with\nrequests, the write request will be delayed for quite a long time and\nall the tasks which are waiting for journal space will end with errors like:\n\nINFO: task attr_set:3816 blocked for more than 120 seconds.\n\"echo 0 \u003e /proc/sys/kernel/hung_task_timeout_secs\" disables this message.\nattr_set      D ffff880028393480     0  3816      1 0x00000000\n ffff8802073fbae8 0000000000000086 ffff8802140847c8 ffff8800283934e8\n ffff8802073fb9d8 ffffffff8103e456 ffff8802140847b8 ffff8801ed728080\n ffff8801db4bc080 ffff8801ed728450 ffff880028393480 0000000000000002\nCall Trace:\n [\u003cffffffff8103e456\u003e] ? __dequeue_entity+0x33/0x38\n [\u003cffffffff8103caad\u003e] ? need_resched+0x23/0x2d\n [\u003cffffffff814006a6\u003e] ? thread_return+0xa2/0xbc\n [\u003cffffffffa01f6224\u003e] ? jbd2_journal_dirty_metadata+0x116/0x126 [jbd2]\n [\u003cffffffffa01f6224\u003e] ? jbd2_journal_dirty_metadata+0x116/0x126 [jbd2]\n [\u003cffffffff81400d31\u003e] __mutex_lock_common+0x14e/0x1a9\n [\u003cffffffffa021dbfb\u003e] ? brelse+0x13/0x15 [ext4]\n [\u003cffffffff81400ddb\u003e] __mutex_lock_slowpath+0x19/0x1b\n [\u003cffffffff81400b2d\u003e] mutex_lock+0x1b/0x32\n [\u003cffffffffa01f927b\u003e] __jbd2_journal_insert_checkpoint+0xe3/0x20c [jbd2]\n [\u003cffffffffa01f547b\u003e] start_this_handle+0x438/0x527 [jbd2]\n [\u003cffffffff8106f491\u003e] ? autoremove_wake_function+0x0/0x3e\n [\u003cffffffffa01f560b\u003e] jbd2_journal_start+0xa1/0xcc [jbd2]\n [\u003cffffffffa02353be\u003e] ext4_journal_start_sb+0x57/0x81 [ext4]\n [\u003cffffffffa024a314\u003e] ext4_xattr_set+0x6c/0xe3 [ext4]\n [\u003cffffffffa024aaff\u003e] ext4_xattr_user_set+0x42/0x4b [ext4]\n [\u003cffffffff81145adb\u003e] generic_setxattr+0x6b/0x76\n [\u003cffffffff81146ac0\u003e] __vfs_setxattr_noperm+0x47/0xc0\n [\u003cffffffff81146bb8\u003e] vfs_setxattr+0x7f/0x9a\n [\u003cffffffff81146c88\u003e] setxattr+0xb5/0xe8\n [\u003cffffffff81137467\u003e] ? do_filp_open+0x571/0xa6e\n [\u003cffffffff81146d26\u003e] sys_fsetxattr+0x6b/0x91\n [\u003cffffffff81002d32\u003e] system_call_fastpath+0x16/0x1b\n\nSo this patch tries to use WRITE_SYNC in __flush_batch so that the request will\nbe moved into sync queue and handled by cfq timely. We also use the new plug,\nsot that all the WRITE_SYNC requests can be given as a whole when we unplug it.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nReported-by: Robin Dong \u003csanbai@taobao.com\u003e\n"
    },
    {
      "commit": "de1b794130b130e77ffa975bb58cb843744f9ae5",
      "tree": "8c4b37582128dc36c2b7385294fba58d017ce3e8",
      "parents": [
        "1fb74cda1b5e9c6207225fda5ef7504e815ce0e0"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jun 13 15:38:22 2011 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jun 13 15:38:22 2011 -0400"
      },
      "message": "jbd2: Fix oops in jbd2_journal_remove_journal_head()\n\njbd2_journal_remove_journal_head() can oops when trying to access\njournal_head returned by bh2jh(). This is caused for example by the\nfollowing race:\n\n\tTASK1\t\t\t\t\tTASK2\n  jbd2_journal_commit_transaction()\n    ...\n    processing t_forget list\n      __jbd2_journal_refile_buffer(jh);\n      if (!jh-\u003eb_transaction) {\n        jbd_unlock_bh_state(bh);\n\t\t\t\t\tjbd2_journal_try_to_free_buffers()\n\t\t\t\t\t  jbd2_journal_grab_journal_head(bh)\n\t\t\t\t\t  jbd_lock_bh_state(bh)\n\t\t\t\t\t  __journal_try_to_free_buffer()\n\t\t\t\t\t  jbd2_journal_put_journal_head(jh)\n        jbd2_journal_remove_journal_head(bh);\n\njbd2_journal_put_journal_head() in TASK2 sees that b_jcount \u003d\u003d 0 and\nbuffer is not part of any transaction and thus frees journal_head\nbefore TASK1 gets to doing so. Note that even buffer_head can be\nreleased by try_to_free_buffers() after\njbd2_journal_put_journal_head() which adds even larger opportunity for\noops (but I didn\u0027t see this happen in reality).\n\nFix the problem by making transactions hold their own journal_head\nreference (in b_jcount). That way we don\u0027t have to remove journal_head\nexplicitely via jbd2_journal_remove_journal_head() and instead just\nremove journal_head when b_jcount drops to zero. The result of this is\nthat [__]jbd2_journal_refile_buffer(),\n[__]jbd2_journal_unfile_buffer(), and\n__jdb2_journal_remove_checkpoint() can free journal_head which needs\nmodification of a few callers. Also we have to be careful because once\njournal_head is removed, buffer_head might be freed as well. So we\nhave to get our own buffer_head reference where it matters.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\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": "5c2178e785244341d1e6f2bc3b62f20a337cc44f",
      "tree": "669b8108fbe2708dff06dce25be6d70f68c553c4",
      "parents": [
        "a1c6c5698d53db4c47a25c3a8d11731a4d7b8370"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:04 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:04 2010 -0400"
      },
      "message": "jbd2: Add sanity check for attempts to start handle during umount\n\nAn attempt to modify the file system during the call to\njbd2_destroy_journal() can lead to a system lockup.  So add some\nchecking to make it much more obvious when this happens to and to\ndetermine where the offending code is located.\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": "9cb569d601e0b93e01c20a22872270ec663b75f6",
      "tree": "80b2568fae48018806e82f8884062dae8a5494ae",
      "parents": [
        "87e99511ea54510ffb60b98001d108794d5037f8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Aug 11 17:06:24 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 01:09:01 2010 -0400"
      },
      "message": "remove SWRITE* I/O types\n\nThese flags aren\u0027t real I/O types, but tell ll_rw_block to always\nlock the buffer instead of giving up on a failed trylock.\n\nInstead add a new write_dirty_buffer helper that implements this semantic\nand use it from the existing SWRITE* callers.  Note that the ll_rw_block\ncode had a bug where it didn\u0027t promote WRITE_SYNC_PLUG properly, which\nthis patch fixes.\n\nIn the ufs code clean up the helper that used to call ll_rw_block\nto mirror sync_dirty_buffer, which is the function it implements for\ncompound buffers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a931da6ac9331a6c80dd91c199105806f2336188",
      "tree": "2d4ea766def9a98d21c2379f41e796b0e57ccd6b",
      "parents": [
        "a51dca9cd3bb4ec5a05bfb6feabf024a5c808a37"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 03 21:35:12 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Aug 03 21:35:12 2010 -0400"
      },
      "message": "jbd2: Change j_state_lock to be a rwlock_t\n\nLockstat reports have shown that j_state_lock is a major source of\nlock contention, especially on systems with more than 4 CPU cores.  So\nchange it to be a read/write spinlock.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "a51dca9cd3bb4ec5a05bfb6feabf024a5c808a37",
      "tree": "31256b4fa3ec1d0e1e27196607499877c662ee86",
      "parents": [
        "8b67f04ab9de5d8f3a71aef72bf02c995a506db5"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 02 08:43:25 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Aug 02 08:43:25 2010 -0400"
      },
      "message": "jbd2: Use atomic variables to avoid taking t_handle_lock in jbd2_journal_stop\n\nBy using an atomic_t for t_updates and t_outstanding credits, this\nshould allow us to not need to take transaction t_handle_lock in\njbd2_journal_stop().\n\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": "71f2be213a0009098819e5c04f75ff19f84f2122",
      "tree": "af3dcbb307a8cccc24670945c14c4b3d32bbd2c0",
      "parents": [
        "1f2acb6017d8528135ec3b01ab7cd2be6ea0630b"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 07:45:44 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 07:45:44 2009 -0500"
      },
      "message": "ext4: Add new tracepoint for jbd2_cleanup_journal_tail\n\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": "bf6993276f74d46776f35c45ddef29b981b1d1c6",
      "tree": "5c9cb128fed29a83add1932b12443edaa6fd06cc",
      "parents": [
        "296c355cd6443d89fa251885a8d78778fe111dc4"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 00:32:06 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 30 00:32:06 2009 -0400"
      },
      "message": "jbd2: Use tracepoints for history file\n\nThe /proc/fs/jbd2/\u003cdev\u003e/history was maintained manually; by using\ntracepoints, we can get all of the existing functionality of the /proc\nfile plus extra capabilities thanks to the ftrace infrastructure.  We\nsave memory as a bonus.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "879c5e6b7cb4c689d08ca9b2e353d8ab3dc425d5",
      "tree": "8b58103d6773a47d6fc29b47024e8b4092487c88",
      "parents": [
        "65795efbd380a832ae508b04dba8f8e53f0b84d9"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:47:48 2009 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Jun 17 11:47:48 2009 -0400"
      },
      "message": "jbd2: convert instrumentation from markers to tracepoints\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "fb68407b0d9efba962c03f55009c797e22f024bc",
      "tree": "b3f33f513969d6f77c5b6a6f71b662057d3440a5",
      "parents": [
        "c3a326a657562dab81acf05aee106dc1fe345eb4"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Nov 06 17:50:21 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Nov 06 17:50:21 2008 -0500"
      },
      "message": "jbd2: Call journal commit callback without holding j_list_lock\n\nAvoid freeing the transaction in __jbd2_journal_drop_transaction() so\nthe journal commit callback can run without holding j_list_lock, to\navoid lock contention on this spinlock.\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": "1a0d3786dd57dbd74f340322054c3d618b999dcf",
      "tree": "b10b3ed6cb60ee34a4e8140e60da2ecc34b52f32",
      "parents": [
        "498e5f24158da7bf8fa48074a70e370e22844492"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Nov 05 00:09:22 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Nov 05 00:09:22 2008 -0500"
      },
      "message": "jbd2: Remove a large array of bh\u0027s from the stack of the checkpoint routine\n\njbd2_log_do_checkpoint()n is one of the kernel\u0027s largest stack users.\nMove the array of buffer head\u0027s from the stack of jbd2_log_do_checkpoint()\nto the in-core journal structure.\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "8c3f25d8950c3e9fe6c9849f88679b3f2a071550",
      "tree": "61b51da53175a5dafb3607bdc04609d04370d74c",
      "parents": [
        "e219cca082f52e7dfea41f3be264b7b5eb204227"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Nov 06 22:38:07 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Nov 06 22:38:07 2008 -0500"
      },
      "message": "jbd2: don\u0027t give up looking for space so easily in __jbd2_log_wait_for_space\n\nCommit 23f8b79e introducd a regression because it assumed that if\nthere were no transactions ready to be checkpointed, that no progress\ncould be made on making space available in the journal, and so the\njournal should be aborted.  This assumption is false; it could be the\ncase that simply calling jbd2_cleanup_journal_tail() will recover the\nnecessary space, or, for small journals, the currently committing\ntransaction could be responsible for chewing up the required space in\nthe log, so we need to wait for the currently committing transaction\nto finish before trying to force a checkpoint operation.\n\nThis patch fixes a bug reported by Mihai Harpau at:\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d469582\n\nThis patch fixes a bug reported by François Valenduc at:\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d11840\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Duane Griffin \u003cduaneg@dghda.com\u003e\nCc: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "44519faf22ad6ce924ad0352d3dc200d9e0b66e8",
      "tree": "332dd28cf16439fc4c78ad198e04c12ff7c16e66",
      "parents": [
        "77e841de8abac4755cc83ca224fdf71418d65380"
      ],
      "author": {
        "name": "Hidehiro Kawai",
        "email": "hidehiro.kawai.ez@hitachi.com",
        "time": "Fri Oct 10 20:29:13 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 10 20:29:13 2008 -0400"
      },
      "message": "jbd2: fix error handling for checkpoint io\n\nWhen a checkpointing IO fails, current JBD2 code doesn\u0027t check the\nerror and continue journaling.  This means latest metadata can be\nlost from both the journal and filesystem.\n\nThis patch leaves the failed metadata blocks in the journal space\nand aborts journaling in the case of jbd2_log_do_checkpoint().\nTo achieve this, we need to do:\n\n1. don\u0027t remove the failed buffer from the checkpoint list where in\n   the case of __try_to_free_cp_buf() because it may be released or\n   overwritten by a later transaction\n2. jbd2_log_do_checkpoint() is the last chance, remove the failed\n   buffer from the checkpoint list and abort the journal\n3. when checkpointing fails, don\u0027t update the journal super block to\n   prevent the journaled contents from being cleaned.  For safety,\n   don\u0027t update j_tail and j_tail_sequence either\n4. when checkpointing fails, notify this error to the ext4 layer so\n   that ext4 don\u0027t clear the needs_recovery flag, otherwise the\n   journaled contents are ignored and cleaned in the recovery phase\n5. if the recovery fails, keep the needs_recovery flag\n6. prevent jbd2_cleanup_journal_tail() from being called between\n   __jbd2_journal_drop_transaction() and jbd2_journal_abort()\n   (a possible race issue between jbd2_log_do_checkpoint()s called by\n   jbd2_journal_flush() and __jbd2_log_wait_for_space())\n\nSigned-off-by: Hidehiro Kawai \u003chidehiro.kawai.ez@hitachi.com\u003e\nSigned-off-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\n\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": "23f8b79eae8a74e42a006ffa7c456e295c7e1c0d",
      "tree": "b62700cd7ff65268a50cfd8d8652d220f7c5c9a4",
      "parents": [
        "c806e68f5647109350ec546fee5b526962970fd2"
      ],
      "author": {
        "name": "Duane Griffin",
        "email": "duaneg@dghda.com",
        "time": "Wed Oct 08 23:28:31 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 08 23:28:31 2008 -0400"
      },
      "message": "jbd2: abort instead of waiting for nonexistent transaction\n\nThe __jbd2_log_wait_for_space function sits in a loop checkpointing\ntransactions until there is sufficient space free in the journal. \nHowever, if there are no transactions to be processed (e.g.  because the\nfree space calculation is wrong due to a corrupted filesystem) it will\nnever progress.\n\nCheck for space being required when no transactions are outstanding and\nabort the journal instead of endlessly looping.\n\nThis patch fixes the bug reported by Sami Liedes at:\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d10976\n\nSigned-off-by: Duane Griffin \u003cduaneg@dghda.com\u003e\nCc: Sami Liedes \u003csliedes@cc.hut.fi\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"
    },
    {
      "commit": "87c89c232c8f7b3820c33c3b9bc803e9358027da",
      "tree": "9a714242513ec3e5e1c28fad1bfff852efd033d5",
      "parents": [
        "678aaf481496b01473b778685eca231d6784098b"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "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": "jbd2: Remove data\u003dordered mode support using jbd buffer heads\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "95c354fe9f7d6decc08a92aa26eb233ecc2155bf",
      "tree": "ec9267032ea875e84216cfb20acb2cfc7c62149f",
      "parents": [
        "a95d67f87e1a5f1b4429be3ba3bf7b4051657908"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Wed Jan 30 13:31:20 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jan 30 13:31:20 2008 +0100"
      },
      "message": "spinlock: lockbreak cleanup\n\nThe break_lock data structure and code for spinlocks is quite nasty.\nNot only does it double the size of a spinlock but it changes locking to\na potentially less optimal trylock.\n\nPut all of that under CONFIG_GENERIC_LOCKBREAK, and introduce a\n__raw_spin_is_contended that uses the lock data itself to determine whether\nthere are waiters on the lock, to be used if CONFIG_GENERIC_LOCKBREAK is\nnot set.\n\nRename need_lockbreak to spin_needbreak, make it use spin_is_contended to\ndecouple it from the spinlock implementation, and make it typesafe (rwlocks\ndo not have any need_lockbreak sites -- why do they even get bloated up\nwith that break_lock then?).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "8e85fb3f305b24b79c6d9cb7a56d22b062335ad3",
      "tree": "9b037c1b1649bce1338911fd8ca3980229c1548a",
      "parents": [
        "4df3d265bf8f3762e1d77f554ee279c39dedb020"
      ],
      "author": {
        "name": "Johann Lombardi",
        "email": "johann.lombardi@bull.net",
        "time": "Mon Jan 28 23:58:27 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 28 23:58:27 2008 -0500"
      },
      "message": "jbd2: jbd2 stats through procfs\n\nThe patch below updates the jbd stats patch to 2.6.20/jbd2.\nThe initial patch was posted by Alex Tomas in December 2005\n(http://marc.info/?l\u003dlinux-ext4\u0026m\u003d113538565128617\u0026w\u003d2).\nIt provides statistics via procfs such as transaction lifetime and size.\n\nSometimes, investigating performance problems, i find useful to have\nstats from jbd about transaction\u0027s lifetime, size, etc. here is a\npatch for review and inclusion probably.\n\nfor example, stats after creation of 3M files in htree directory:\n\n[root@bob ~]# cat /proc/fs/jbd/sda/history\nR/C  tid   wait  run   lock  flush log   hndls  block inlog ctime write drop  close\nR    261   8260  2720  0     0     750   9892   8170  8187\nC    259                                                    750   0     4885  1\nR    262   20    2200  10    0     770   9836   8170  8187\nR    263   30    2200  10    0     3070  9812   8170  8187\nR    264   0     5000  10    0     1340  0      0     0\nC    261                                                    8240  3212  4957  0\nR    265   8260  1470  0     0     4640  9854   8170  8187\nR    266   0     5000  10    0     1460  0      0     0\nC    262                                                    8210  2989  4868  0\nR    267   8230  1490  10    0     4440  9875   8171  8188\nR    268   0     5000  10    0     1260  0      0     0\nC    263                                                    7710  2937  4908  0\nR    269   7730  1470  10    0     3330  9841   8170  8187\nR    270   0     5000  10    0     830   0      0     0\nC    265                                                    8140  3234  4898  0\nC    267                                                    720   0     4849  1\nR    271   8630  2740  20    0     740   9819   8170  8187\nC    269                                                    800   0     4214  1\nR    272   40    2170  10    0     830   9716   8170  8187\nR    273   40    2280  0     0     3530  9799   8170  8187\nR    274   0     5000  10    0     990   0      0     0\n\n\nwhere,\n\nR     - line for transaction\u0027s life from T_RUNNING to T_FINISHED\nC     - line for transaction\u0027s checkpointing\ntid   - transaction\u0027s id\nwait  - for how long we were waiting for new transaction to start\n         (the longest period journal_start() took in this transaction)\nrun   - real transaction\u0027s lifetime (from T_RUNNING to T_LOCKED\nlock  - how long we were waiting for all handles to close\n         (time the transaction was in T_LOCKED)\nflush - how long it took to flush all data (data\u003dordered)\nlog   - how long it took to write the transaction to the log\nhndls - how many handles got to the transaction\nblock - how many blocks got to the transaction\ninlog - how many blocks are written to the log (block + descriptors)\nctime - how long it took to checkpoint the transaction\nwrite - how many blocks have been written during checkpointing\ndrop  - how many blocks have been dropped during checkpointing\nclose - how many running transactions have been closed to checkpoint this one\n\nall times are in msec.\n\n\n[root@bob ~]# cat /proc/fs/jbd/sda/info\n280 transaction, each upto 8192 blocks\naverage:\n  1633ms waiting for transaction\n  3616ms running transaction\n  5ms transaction was being locked\n  1ms flushing data (in ordered mode)\n  1799ms logging transaction\n  11781 handles per transaction\n  5629 blocks per transaction\n  5641 logged blocks per transaction\n\nSigned-off-by: Johann Lombardi \u003cjohann.lombardi@bull.net\u003e\nSigned-off-by: Mariusz Kozlowski \u003cm.kozlowski@tuxland.pl\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\n"
    },
    {
      "commit": "f5a7a6b0d9b6af7d46124ed3f6b3995225cb62d0",
      "tree": "cbb2bc79a488461bf3bec9b60d15e21717dc8360",
      "parents": [
        "36df53f4a3e445175fc1e9d7f433599482ec6d7f"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jan 28 23:58:27 2008 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Mon Jan 28 23:58:27 2008 -0500"
      },
      "message": "jbd2: Fix assertion failure in fs/jbd2/checkpoint.c\n\nBefore we start committing a transaction, we call\n__journal_clean_checkpoint_list() to cleanup transaction\u0027s written-back\nbuffers.\n\nIf this call happens to remove all of them (and there were already some\nbuffers), __journal_remove_checkpoint() will decide to free the transaction\nbecause it isn\u0027t (yet) a committing transaction and soon we fail some\nassertion - the transaction really isn\u0027t ready to be freed :).\n\nWe change the check in __journal_remove_checkpoint() to free only a\ntransaction in T_FINISHED state.  The locking there is subtle though (as\neverywhere in JBD ;().  We use j_list_lock to protect the check and a\nsubsequent call to __journal_drop_transaction() and do the same in the end\nof journal_commit_transaction() which is the only place where a transaction\ncan get to T_FINISHED state.\n\nProbably I\u0027m too paranoid here and such locking is not really necessary -\ncheckpoint lists are processed only from log_do_checkpoint() where a\ntransaction must be already committed to be processed or from\n__journal_clean_checkpoint_list() where kjournald itself calls it and thus\ntransaction cannot change state either.  Better be safe if something\nchanges in future...\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: \u003clinux-ext4@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5886269962f94fa9185c32db3ec936c612503235",
      "tree": "2f24dabcf5791319ebb1fbdfb5dbc58284714275",
      "parents": [
        "01afd80626e98c2347bc25be92ee4a3faf314514"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "ukleinek@informatik.uni-freiburg.de",
        "time": "Wed May 09 07:51:49 2007 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Wed May 09 08:58:16 2007 +0200"
      },
      "message": "fix file specification in comments\n\nMany files include the filename at the beginning, serveral used a wrong one.\n\nSigned-off-by: Uwe Kleine-König \u003cukleinek@informatik.uni-freiburg.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "f7f4bccb729844a0fa873e224e3a6f7eeed095bb",
      "tree": "b5b8ce65b5c17b4a7d45e43a3530f2cc977fb894",
      "parents": [
        "470decc613ab2048b619a01028072d932d9086ee"
      ],
      "author": {
        "name": "Mingming Cao",
        "email": "cmm@us.ibm.com",
        "time": "Wed Oct 11 01:20:59 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:15 2006 -0700"
      },
      "message": "[PATCH] jbd2: rename jbd2 symbols to avoid duplication of jbd 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": "470decc613ab2048b619a01028072d932d9086ee",
      "tree": "5268576f5099040db94b8e984983c0bb28b2a9a7",
      "parents": [
        "02ea2104c55b625cf5b5d9ba8586a4fc17920f5c"
      ],
      "author": {
        "name": "Dave Kleikamp",
        "email": "shaggy@austin.ibm.com",
        "time": "Wed Oct 11 01:20:57 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 11 11:14:15 2006 -0700"
      },
      "message": "[PATCH] jbd2: initial copy of files from jbd\n\nThis is a simple copy of the files in fs/jbd to fs/jbd2 and\n/usr/incude/linux/[ext4_]jbd.h to /usr/include/[ext4_]jbd2.h\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"
    }
  ]
}
