)]}'
{
  "log": [
    {
      "commit": "d705ae6b133f9f6a8beee617b1224b6a5c99c5da",
      "tree": "b1a0b09ae01f8385e66c021c338106b88e8d23f8",
      "parents": [
        "7ada1dd62804ca9ce1cb8666c6e563cd92fa50c1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 15 09:45:49 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 15 09:45:49 2012 +0100"
      },
      "message": "block: replace icq-\u003echanged with icq-\u003eflags\n\nicq-\u003echanged was used for ICQ_*_CHANGED bits.  Rename it to flags and\naccess it under ioc-\u003elock instead of using atomic bitops.\nioc_get_changed() is added so that the changed part can be fetched and\ncleared as before.\n\nicq-\u003eflags will be used to carry other flags.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nTested-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "07c2bd37350c9b1af71b35d05f16e300a6602948",
      "tree": "e45ee2952fb78d6d8f2372c8ea1f854da825fa90",
      "parents": [
        "050c8ea80e3e90019d9e981c6a117ef614e882ed"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 08 09:19:42 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 08 09:19:42 2012 +0100"
      },
      "message": "block: don\u0027t call elevator callbacks for plug merges\n\nPlug merge calls two elevator callbacks outside queue lock -\nelevator_allow_merge_fn() and elevator_bio_merged_fn().  Although\nattempt_plug_merge() suggests that elevator is guaranteed to be there\nthrough the existing request on the plug list, nothing prevents plug\nmerge from calling into dying or initializing elevator.\n\nFor regular merges, bypass ensures elvpriv count to reach zero, which\nin turn prevents merges as all !ELVPRIV requests get REQ_SOFTBARRIER\nfrom forced back insertion.  Plug merge doesn\u0027t check ELVPRIV, and, as\nthe requests haven\u0027t gone through elevator insertion yet, it doesn\u0027t\nhave SOFTBARRIER set allowing merges on a bypassed queue.\n\nThis, for example, leads to the following crash during elevator\nswitch.\n\n BUG: unable to handle kernel NULL pointer dereference at 0000000000000008\n IP: [\u003cffffffff813b34e9\u003e] cfq_allow_merge+0x49/0xa0\n PGD 112cbc067 PUD 115d5c067 PMD 0\n Oops: 0000 [#1] PREEMPT SMP\n CPU 1\n Modules linked in: deadline_iosched\n\n Pid: 819, comm: dd Not tainted 3.3.0-rc2-work+ #76 Bochs Bochs\n RIP: 0010:[\u003cffffffff813b34e9\u003e]  [\u003cffffffff813b34e9\u003e] cfq_allow_merge+0x49/0xa0\n RSP: 0018:ffff8801143a38f8  EFLAGS: 00010297\n RAX: 0000000000000000 RBX: ffff88011817ce28 RCX: ffff880116eb6cc0\n RDX: 0000000000000000 RSI: ffff880118056e20 RDI: ffff8801199512f8\n RBP: ffff8801143a3908 R08: 0000000000000000 R09: 0000000000000000\n R10: 0000000000000001 R11: 0000000000000000 R12: ffff880118195708\n R13: ffff880118052aa0 R14: ffff8801143a3d50 R15: ffff880118195708\n FS:  00007f19f82cb700(0000) GS:ffff88011fc80000(0000) knlGS:0000000000000000\n CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n CR2: 0000000000000008 CR3: 0000000112c6a000 CR4: 00000000000006e0\n DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n Process dd (pid: 819, threadinfo ffff8801143a2000, task ffff880116eb6cc0)\n Stack:\n  ffff88011817ce28 ffff880118195708 ffff8801143a3928 ffffffff81391bba\n  ffff88011817ce28 ffff880118195708 ffff8801143a3948 ffffffff81391bf1\n  ffff88011817ce28 0000000000000000 ffff8801143a39a8 ffffffff81398e3e\n Call Trace:\n  [\u003cffffffff81391bba\u003e] elv_rq_merge_ok+0x4a/0x60\n  [\u003cffffffff81391bf1\u003e] elv_try_merge+0x21/0x40\n  [\u003cffffffff81398e3e\u003e] blk_queue_bio+0x8e/0x390\n  [\u003cffffffff81396a5a\u003e] generic_make_request+0xca/0x100\n  [\u003cffffffff81396b04\u003e] submit_bio+0x74/0x100\n  [\u003cffffffff811d45c2\u003e] __blockdev_direct_IO+0x1ce2/0x3450\n  [\u003cffffffff811d0dc7\u003e] blkdev_direct_IO+0x57/0x60\n  [\u003cffffffff811460b5\u003e] generic_file_aio_read+0x6d5/0x760\n  [\u003cffffffff811986b2\u003e] do_sync_read+0xe2/0x120\n  [\u003cffffffff81199345\u003e] vfs_read+0xc5/0x180\n  [\u003cffffffff81199501\u003e] sys_read+0x51/0x90\n  [\u003cffffffff81aeac12\u003e] system_call_fastpath+0x16/0x1b\n\nThere are multiple ways to fix this including making plug merge check\nELVPRIV; however,\n\n* Calling into elevator outside queue lock is confusing and\n  error-prone.\n\n* Requests on plug list aren\u0027t known to the elevator.  They aren\u0027t on\n  the elevator yet, so there\u0027s no elevator specific state to update.\n\n* Given the nature of plug merges - collecting bio\u0027s for the same\n  purpose from the same issuer - elevator specific restrictions aren\u0027t\n  applicable.\n\nSo, simply don\u0027t call into elevator methods from plug merge by moving\nelv_bio_merged() from bio_attempt_*_merge() to blk_queue_bio(), and\nusing blk_try_merge() in attempt_plug_merge().\n\nThis is based on Jens\u0027 patch to skip elevator_allow_merge_fn() from\nplug merge.\n\nNote that this makes per-cgroup merged stats skip plug merging.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c4F16F3CA.90904@kernel.dk\u003e\nOriginal-patch-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "11a3122f6cf2d988a77eb8883d0fc49cd013a6d5",
      "tree": "ded8ea8a2982754ff0c58448a7ed2e59487104cb",
      "parents": [
        "822bfa51ce44f2c63c300fdb76dc99c4d5a5ca9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "message": "block: strip out locking optimization in put_io_context()\n\nput_io_context() performed a complex trylock dancing to avoid\ndeferring ioc release to workqueue.  It was also broken on UP because\ntrylock was always assumed to succeed which resulted in unbalanced\npreemption count.\n\nWhile there are ways to fix the UP breakage, even the most\npathological microbench (forced ioc allocation and tight fork/exit\nloop) fails to show any appreciable performance benefit of the\noptimization.  Strip it out.  If there turns out to be workloads which\nare affected by this change, simpler optimization from the discussion\nthread can be applied later.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c1328514611.21268.66.camel@sli10-conroe\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "df0793abb929e66606fa25f3875ff1b89de5ad32",
      "tree": "fa53e6e4e7f4a6773f45173132bbfd77908f7c17",
      "parents": [
        "90a4c0f51e8e44111a926be6f4c87af3938a79c3"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 19 09:20:09 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Jan 19 09:20:09 2012 +0100"
      },
      "message": "block,cfq: change code order\n\ncfq_slice_expired will change saved_workload_slice. It should be called\nfirst so saved_workload_slice is correctly set to 0 after workload type\nis changed.\nThis fixes the code order changed by 54b466e44b1c7.\n\nTested-by: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "54b466e44b1c7809144bbd8cd6be3f85877ca46f",
      "tree": "01c99a8b6fff843ac7c327b8a0c777039e2c405e",
      "parents": [
        "b3c9dd182ed3bdcdaf0e42625a35924b0497afdc"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jan 17 21:26:11 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jan 17 21:26:11 2012 +0100"
      },
      "message": "cfq-iosched: fix use-after-free of cfqq\n\nWith the changes in life time management between the cfq IO contexts\nand the cfq queues, we now risk having cfqd-\u003eactive_queue being\nfreed when cfq_slice_expired() is being called. cfq_preempt_queue()\ncaches this queue and uses it after calling said function, causing\na use-after-free condition. This triggers the following oops,\nwhen cfqq_type() attempts to dereference it:\n\nBUG: unable to handle kernel paging request at ffff8800746c4f0c\nIP: [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\nPGD 18d4063 PUD 1fe15067 PMD 1ffb9067 PTE 80000000746c4160\nOops: 0000 [#1] SMP DEBUG_PAGEALLOC\nCPU 3\nModules linked in:\n\nPid: 1, comm: init Not tainted 3.2.0-josef+ #367 Bochs Bochs\nRIP: 0010:[\u003cffffffff81266d59\u003e]  [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\nRSP: 0018:ffff880079c11778  EFLAGS: 00010046\nRAX: 0000000000000000 RBX: ffff880076f3df08 RCX: 0000000000000000\nRDX: 0000000000000006 RSI: ffff880074271888 RDI: ffff8800746c4f08\nRBP: ffff880079c11778 R08: 0000000000000078 R09: 0000000000000001\nR10: 09f911029d74e35b R11: 09f911029d74e35b R12: ffff880076f337f0\nR13: ffff8800746c4f08 R14: ffff8800746c4f08 R15: 0000000000000002\nFS:  00007f62fd44f700(0000) GS:ffff88007cd80000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\nCR2: ffff8800746c4f0c CR3: 0000000076c21000 CR4: 00000000000006e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess init (pid: 1, threadinfo ffff880079c10000, task ffff880079c0a040)\nStack:\n ffff880079c117c8 ffffffff812683d8 ffff880079c117a8 ffffffff8125de43\n ffff8800744fcf48 ffff880074b43e98 ffff8800770c8828 ffff880074b43e98\n 0000000000000003 0000000000000000 ffff880079c117f8 ffffffff81254149\nCall Trace:\n [\u003cffffffff812683d8\u003e] cfq_insert_request+0x3f5/0x47c\n [\u003cffffffff8125de43\u003e] ? blk_recount_segments+0x20/0x31\n [\u003cffffffff81254149\u003e] __elv_add_request+0x1ca/0x200\n [\u003cffffffff8125aa99\u003e] blk_queue_bio+0x2ef/0x312\n [\u003cffffffff81258f7b\u003e] generic_make_request+0x9f/0xe0\n [\u003cffffffff8125907b\u003e] submit_bio+0xbf/0xca\n [\u003cffffffff81136ec7\u003e] submit_bh+0xdf/0xfe\n [\u003cffffffff81176d04\u003e] ext3_bread+0x50/0x99\n [\u003cffffffff811785b3\u003e] dx_probe+0x38/0x291\n [\u003cffffffff81178864\u003e] ext3_dx_find_entry+0x58/0x219\n [\u003cffffffff81178ad5\u003e] ext3_find_entry+0xb0/0x406\n [\u003cffffffff8110c4d5\u003e] ? cache_alloc_debugcheck_after.isra.46+0x14d/0x1a0\n [\u003cffffffff8110cfbd\u003e] ? kmem_cache_alloc+0xef/0x191\n [\u003cffffffff8117a330\u003e] ext3_lookup+0x39/0xe1\n [\u003cffffffff81119461\u003e] d_alloc_and_lookup+0x45/0x6c\n [\u003cffffffff8111ac41\u003e] do_lookup+0x1e4/0x2f5\n [\u003cffffffff8111aef6\u003e] link_path_walk+0x1a4/0x6ef\n [\u003cffffffff8111b557\u003e] path_lookupat+0x59/0x5ea\n [\u003cffffffff8127406c\u003e] ? __strncpy_from_user+0x30/0x5a\n [\u003cffffffff8111bce0\u003e] do_path_lookup+0x23/0x59\n [\u003cffffffff8111cfd6\u003e] user_path_at_empty+0x53/0x99\n [\u003cffffffff8107b37b\u003e] ? remove_wait_queue+0x51/0x56\n [\u003cffffffff8111d02d\u003e] user_path_at+0x11/0x13\n [\u003cffffffff811141f5\u003e] vfs_fstatat+0x3a/0x64\n [\u003cffffffff8111425a\u003e] vfs_stat+0x1b/0x1d\n [\u003cffffffff81114359\u003e] sys_newstat+0x1a/0x33\n [\u003cffffffff81060e12\u003e] ? task_stopped_code+0x42/0x42\n [\u003cffffffff815d6712\u003e] system_call_fastpath+0x16/0x1b\nCode: 89 e6 48 89 c7 e8 fa ca fe ff 85 c0 74 06 4c 89 2b 41 b6 01 5b 44 89 f0 41 5c 41 5d 41 5e 5d c3 55 48 89 e5 66 66 66 66 90 31 c0 \u003c8b\u003e 57 04 f6 c6 01 74 0b 83 e2 20 83 fa 01 19 c0 83 c0 02 5d c3\nRIP  [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\n RSP \u003cffff880079c11778\u003e\nCR2: ffff8800746c4f0c\n\nGet rid of the caching of cfqd-\u003eactive_queue, and reorder the\ncheck so that it happens before we expire the active queue.\n\nThanks to Tejun for pin pointing the error location.\n\nReported-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nTested-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "4a0b75c7d02c2bd46ed227d4ba5941ba8a0aba5d",
      "tree": "a5a0c37a44c87227539ebc356178cc80435144d9",
      "parents": [
        "f1f8cc94651738b418ba54c039df536303b91704"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Dec 16 14:00:22 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 16 14:00:22 2011 +0100"
      },
      "message": "block, cfq: fix empty queue crash caused by request merge\n\nAll requests of a queue could be merged to other requests of other queue.\nSuch queue will not have request in it, but it\u0027s in service tree. This\nwill cause kernel oops.\nI encounter a BUG_ON() in cfq_dispatch_request() with next patch, but the\nissue should exist without the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f1f8cc94651738b418ba54c039df536303b91704",
      "tree": "eb8bc5a33dec104ab32a935a5bb1e1da2e7cdd34",
      "parents": [
        "9b84cacd013996f244d85b3d873287c2a8f88658"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move icq creation and rq-\u003eelv.icq association to block core\n\nNow block layer knows everything necessary to create and associate\nicq\u0027s with requests.  Move ioc_create_icq() to blk-ioc.c and update\nget_request() such that, if elevator_type-\u003eicq_size is set, requests\nare automatically associated with their matching icq\u0027s before\nelv_set_request().  io_context reference is also managed by block core\non request alloc/free.\n\n* Only ioprio/cgroup changed handling remains from cfq_get_cic().\n  Collapsed into cfq_set_request().\n\n* This removes queue kicking on icq allocation failure (for now).  As\n  icq allocation failure is rare and the only effect of queue kicking\n  achieved was possibily accelerating queue processing, this change\n  shouldn\u0027t be noticeable.\n\n  There is a larger underlying problem.  Unlike request allocation,\n  icq allocation is not guaranteed to succeed eventually after\n  retries.  The number of icq is unbound and thus mempool can\u0027t be the\n  solution either.  This effectively adds allocation dependency on\n  memory free path and thus possibility of deadlock.\n\n  This usually wouldn\u0027t happen because icq allocation is not a hot\n  path and, even when the condition triggers, it\u0027s highly unlikely\n  that none of the writeback workers already has icq.\n\n  However, this is still possible especially if elevator is being\n  switched under high memory pressure, so we better get it fixed.\n  Probably the only solution is just bypassing elevator and appending\n  to dispatch queue on any elevator allocation failure.\n\n* Comment added to explain how icq\u0027s are managed and synchronized.\n\nThis completes cleanup of io_context interface.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9b84cacd013996f244d85b3d873287c2a8f88658",
      "tree": "a11b850f9c8b182a7a8141276244a831aaae5291",
      "parents": [
        "7e5a8794492e43e9eebb68a98a23be055888ccd0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: restructure io_cq creation path for io_context interface cleanup\n\nAdd elevator_ops-\u003eelevator_init_icq_fn() and restructure\ncfq_create_cic() and rename it to ioc_create_icq().\n\nThe new function expects its caller to pass in io_context, uses\nelevator_type-\u003eicq_cache, handles generic init, calls the new elevator\noperation for elevator specific initialization, and returns pointer to\ncreated or looked up icq.  This leaves cfq_icq_pool variable without\nany user.  Removed.\n\nThis prepares for io_context interface cleanup and doesn\u0027t introduce\nany functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "7e5a8794492e43e9eebb68a98a23be055888ccd0",
      "tree": "cc049a23b2c994f910d3101860bc1c2ecb7aa35f",
      "parents": [
        "3d3c2379feb177a5fd55bb0ed76776dc9d4f3243"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move io_cq exit/release to blk-ioc.c\n\nWith kmem_cache managed by blk-ioc, io_cq exit/release can be moved to\nblk-ioc too.  The odd -\u003eio_cq-\u003eexit/release() callbacks are replaced\nwith elevator_ops-\u003eelevator_exit_icq_fn() with unlinking from both ioc\nand q, and freeing automatically handled by blk-ioc.  The elevator\noperation only need to perform exit operation specific to the elevator\n- in cfq\u0027s case, exiting the cfqq\u0027s.\n\nAlso, clearing of io_cq\u0027s on q detach is moved to block core and\nautomatically performed on elevator switch and q release.\n\nBecause the q io_cq points to might be freed before RCU callback for\nthe io_cq runs, blk-ioc code should remember to which cache the io_cq\nneeds to be freed when the io_cq is released.  New field\nio_cq-\u003e__rcu_icq_cache is added for this purpose.  As both the new\nfield and rcu_head are used only after io_cq is released and the\nq/ioc_node fields aren\u0027t, they are put into unions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "3d3c2379feb177a5fd55bb0ed76776dc9d4f3243",
      "tree": "fafebbef8f0fb5b73ac4db24bff20dcd40b8bf12",
      "parents": [
        "47fdd4ca96bf4b28ac4d05d7a6e382df31d3d758"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move icq cache management to block core\n\nLet elevators set -\u003eicq_size and -\u003eicq_align in elevator_type and\nelv_register() and elv_unregister() respectively create and destroy\nkmem_cache for icq.\n\n* elv_register() now can return failure.  All callers updated.\n\n* icq caches are automatically named \"ELVNAME_io_cq\".\n\n* cfq_slab_setup/kill() are collapsed into cfq_init/exit().\n\n* While at it, minor indentation change for iosched_cfq.elevator_name\n  for consistency.\n\nThis will help moving icq management to block core.  This doesn\u0027t\nintroduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "47fdd4ca96bf4b28ac4d05d7a6e382df31d3d758",
      "tree": "bcb928575b66511345b00102a7e8cace84526e3e",
      "parents": [
        "a612fddf0d8090f2877305c9168b6c1a34fb5d90"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move io_cq lookup to blk-ioc.c\n\nNow that all io_cq related data structures are in block core layer,\nio_cq lookup can be moved from cfq-iosched.c to blk-ioc.c.\n\nLookup logic from cfq_cic_lookup() is moved to ioc_lookup_icq() with\nparameter return type changes (cfqd -\u003e request_queue, cfq_io_cq -\u003e\nio_cq) and cfq_cic_lookup() becomes thin wrapper around\ncfq_cic_lookup().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a612fddf0d8090f2877305c9168b6c1a34fb5d90",
      "tree": "b59047a1670469362e1ea44093522224bdcf5aae",
      "parents": [
        "c58698073218f2c8f2fc5982fa3938c2d3803b9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n\nMost of icq management is about to be moved out of cfq into blk-ioc.\nThis patch prepares for it.\n\n* Move cfqd-\u003eicq_list to request_queue-\u003eicq_list\n\n* Make request explicitly point to icq instead of through elevator\n  private data.  -\u003eelevator_private[3] is replaced with sub struct elv\n  which contains icq pointer and priv[2].  cfq is updated accordingly.\n\n* Meaningless clearing of -\u003eelevator_private[0] removed from\n  elv_set_request().  At that point in code, the field was guaranteed\n  to be %NULL anyway.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c58698073218f2c8f2fc5982fa3938c2d3803b9f",
      "tree": "ccd2403fd8674051a062efd2c22e6fdd179b7b8f",
      "parents": [
        "22f746e235a5cbee2a6ca9887b1be2aa7d31fe71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: reorganize cfq_io_context into generic and cfq specific parts\n\nCurrently io_context and cfq logics are mixed without clear boundary.\nMost of io_context is independent from cfq but cfq_io_context handling\nlogic is dispersed between generic ioc code and cfq.\n\ncfq_io_context represents association between an io_context and a\nrequest_queue, which is a concept useful outside of cfq, but it also\ncontains fields which are useful only to cfq.\n\nThis patch takes out generic part and put it into io_cq (io\ncontext-queue) and the rest into cfq_io_cq (cic moniker remains the\nsame) which contains io_cq.  The following changes are made together.\n\n* cfq_ttime and cfq_io_cq now live in cfq-iosched.c.\n\n* All related fields, functions and constants are renamed accordingly.\n\n* ioc-\u003eioc_data is now \"struct io_cq *\" instead of \"void *\" and\n  renamed to icq_hint.\n\nThis prepares for io_context API cleanup.  Documentation is currently\nsparse.  It will be added later.\n\nChanges in this patch are mechanical and don\u0027t cause functional\nchange.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f2dbd76a0a994bc1d5a3d0e7c844cc373832e86c",
      "tree": "cae6a4333ee6e5eb76ef133dfdee95e1943c0ab1",
      "parents": [
        "1238033c79e92e5c315af12e45396f1a78c73dec"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "message": "block, cfq: replace current_io_context() with create_io_context()\n\nWhen called under queue_lock, current_io_context() triggers lockdep\nwarning if it hits allocation path.  This is because io_context\ninstallation is protected by task_lock which is not IRQ safe, so it\ntriggers irq-unsafe-lock -\u003e irq -\u003e irq-safe-lock -\u003e irq-unsafe-lock\ndeadlock warning.\n\nGiven the restriction, accessor + creator rolled into one doesn\u0027t work\ntoo well.  Drop current_io_context() and let the users access\ntask-\u003eio_context directly inside queue_lock combined with explicit\ncreation using create_io_context().\n\nFuture ioc updates will further consolidate ioc access and the create\ninterface will be unexported.\n\nWhile at it, relocate ioc internal interface declarations in blk.h and\nadd section comments before and after.\n\nThis patch does not introduce functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "1238033c79e92e5c315af12e45396f1a78c73dec",
      "tree": "0f205155f811930f0cf43716e56fa57ea1f792b9",
      "parents": [
        "b50b636bce6293fa858cc7ff6c3ffe4920d90006"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "message": "block, cfq: kill cic-\u003ekey\n\nNow that lazy paths are removed, cfqd_dead_key() is meaningless and\ncic-\u003eq can be used whereever cic-\u003ekey is used.  Kill cic-\u003ekey.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b50b636bce6293fa858cc7ff6c3ffe4920d90006",
      "tree": "65a4c509ff491aa89bf4d1a5f3e26d600eeea49f",
      "parents": [
        "b9a1920837bc53430d339380e393a6e4c372939f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: kill ioc_gone\n\nNow that cic\u0027s are immediately unlinked under both locks, there\u0027s no\nneed to count and drain cic\u0027s before module unload.  RCU callback\ncompletion is waited with rcu_barrier().\n\nWhile at it, remove residual RCU operations on cic_list.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b9a1920837bc53430d339380e393a6e4c372939f",
      "tree": "e3f7b8389fe58ebf88381ad404ad408cef9792c2",
      "parents": [
        "b2efa05265d62bc29f3a64400fad4b44340eedb8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: remove delayed unlink\n\nNow that all cic\u0027s are immediately unlinked from both ioc and queue,\nlazy dropping from lookup path and trimming on elevator unregister are\nunnecessary.  Kill them and remove now unused elevator_ops-\u003etrim().\n\nThis also leaves call_for_each_cic() without any user.  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b2efa05265d62bc29f3a64400fad4b44340eedb8",
      "tree": "4555f0b5f0025c099997b81f7b3f8bc48b44220d",
      "parents": [
        "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: unlink cfq_io_context\u0027s immediately\n\ncic is association between io_context and request_queue.  A cic is\nlinked from both ioc and q and should be destroyed when either one\ngoes away.  As ioc and q both have their own locks, locking becomes a\nbit complex - both orders work for removal from one but not from the\nother.\n\nCurrently, cfq tries to circumvent this locking order issue with RCU.\nioc-\u003elock nests inside queue_lock but the radix tree and cic\u0027s are\nalso protected by RCU allowing either side to walk their lists without\ngrabbing lock.\n\nThis rather unconventional use of RCU quickly devolves into extremely\nfragile convolution.  e.g. The following is from cfqd going away too\nsoon after ioc and q exits raced.\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n [   88.503444]\n Pid: 599, comm: hexdump Not tainted 3.1.0-rc10-work+ #158 Bochs Bochs\n RIP: 0010:[\u003cffffffff81397628\u003e]  [\u003cffffffff81397628\u003e] cfq_exit_single_io_context+0x58/0xf0\n ...\n Call Trace:\n  [\u003cffffffff81395a4a\u003e] call_for_each_cic+0x5a/0x90\n  [\u003cffffffff81395ab5\u003e] cfq_exit_io_context+0x15/0x20\n  [\u003cffffffff81389130\u003e] exit_io_context+0x100/0x140\n  [\u003cffffffff81098a29\u003e] do_exit+0x579/0x850\n  [\u003cffffffff81098d5b\u003e] do_group_exit+0x5b/0xd0\n  [\u003cffffffff81098de7\u003e] sys_exit_group+0x17/0x20\n  [\u003cffffffff81b02f2b\u003e] system_call_fastpath+0x16/0x1b\n\nThe only real hot path here is cic lookup during request\ninitialization and avoiding extra locking requires very confined use\nof RCU.  This patch makes cic removal from both ioc and request_queue\nperform double-locking and unlink immediately.\n\n* From q side, the change is almost trivial as ioc-\u003elock nests inside\n  queue_lock.  It just needs to grab each ioc-\u003elock as it walks\n  cic_list and unlink it.\n\n* From ioc side, it\u0027s a bit more difficult because of inversed lock\n  order.  ioc needs its lock to walk its cic_list but can\u0027t grab the\n  matching queue_lock and needs to perform unlock-relock dancing.\n\n  Unlinking is now wholly done from put_io_context() and fast path is\n  optimized by using the queue_lock the caller already holds, which is\n  by far the most common case.  If the ioc accessed multiple devices,\n  it tries with trylock.  In unlikely cases of fast path failure, it\n  falls back to full double-locking dance from workqueue.\n\nDouble-locking isn\u0027t the prettiest thing in the world but it\u0027s *far*\nsimpler and more understandable than RCU trick without adding any\nmeaningful overhead.\n\nThis still leaves a lot of now unnecessary RCU logics.  Future patches\nwill trim them.\n\n-v2: Vivek pointed out that cic-\u003eq was being dereferenced after\n     cic-\u003erelease() was called.  Updated to use local variable @this_q\n     instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2",
      "tree": "c0ad51e3136286a9c1e1728fb1cfd7a322e8cf83",
      "parents": [
        "216284c352a0061f5b20acff2c4e50fb43fea183"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: fix cic lookup locking\n\n* cfq_cic_lookup() may be called without queue_lock and multiple tasks\n  can execute it simultaneously for the same shared ioc.  Nothing\n  prevents them racing each other and trying to drop the same dead cic\n  entry multiple times.\n\n* smp_wmb() in cfq_exit_cic() doesn\u0027t really do anything and nothing\n  prevents cfq_cic_lookup() seeing stale cic-\u003ekey.  This usually\n  doesn\u0027t blow up because by the time cic is exited, all requests have\n  been drained and new requests are terminated before going through\n  elevator.  However, it can still be triggered by plug merge path\n  which doesn\u0027t grab queue_lock and thus can\u0027t check DEAD state\n  reliably.\n\nThis patch updates lookup locking such that,\n\n* Lookup is always performed under queue_lock.  This doesn\u0027t add any\n  more locking.  The only issue is cfq_allow_merge() which can be\n  called from plug merge path without holding any lock.  For now, this\n  is worked around by using cic of the request to merge into, which is\n  guaranteed to have the same ioc.  For longer term, I think it would\n  be best to separate out plug merge method from regular one.\n\n* Spurious ioc-\u003elock locking around cic lookup hint assignment\n  dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "216284c352a0061f5b20acff2c4e50fb43fea183",
      "tree": "01611f6d35c041a941269cb3dd3926c0711722ae",
      "parents": [
        "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: fix race condition in cic creation path and tighten locking\n\ncfq_get_io_context() would fail if multiple tasks race to insert cic\u0027s\nfor the same association.  This patch restructures\ncfq_get_io_context() such that slow path insertion race is handled\nproperly.\n\nNote that the restructuring also makes cfq_get_io_context() called\nunder queue_lock and performs both ioc and cfqd insertions while\nholding both ioc and queue locks.  This is part of on-going locking\ntightening and will be used to simplify synchronization rules.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d",
      "tree": "ec24aa4b076f54fcfb0558d5113f5c5e0f4bc173",
      "parents": [
        "283287a52e3c3f7f8f9da747f4b8c5202740d776"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: move ioc ioprio/cgroup changed handling to cic\n\nioprio/cgroup change was handled by marking the changed state in ioc\nand, on the following access to the ioc, performing RCU-protected\niteration through all cic\u0027s grabbing the matching queue_lock.\n\nThis patch moves the changed state to each cic.  When ioprio or cgroup\nchanges, the respective bit is set on all cic\u0027s of the ioc and when\neach of those cic (not ioc) is accessed, change is applied for that\nspecific ioc-queue pair.\n\nThis also fixes the following two race conditions between setting and\nclearing of changed states.\n\n* Missing barrier between assign/load of ioprio and ioprio_changed\n  allowed applying old ioprio.\n\n* Change requests could happen between application of change and\n  clearing of changed variables.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "283287a52e3c3f7f8f9da747f4b8c5202740d776",
      "tree": "b5b145bcdcefc24deb68cd91bb16582286dce171",
      "parents": [
        "09ac46c429464c919d04bb737b27edd84d944f02"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: misc updates to cfq_io_context\n\nMake the following changes to prepare for ioc/cic management cleanup.\n\n* Add cic-\u003eq so that ioc can determine the associated queue without\n  querying cfq.  This will eventually replace -\u003ekey.\n\n* Factor out cfq_release_cic() from cic_free_func().  This function\n  assumes that the caller handled locking.\n\n* Rename __cfq_exit_single_io_context() to cfq_exit_cic() and make it\n  take only @cic.\n\n* Restructure cfq_cic_link() for future updates.\n\nThis patch doesn\u0027t introduce any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6e736be7f282fff705db7c34a15313281b372a76",
      "tree": "1683e00e073ee4bd3027798f92ae2d368404d44b",
      "parents": [
        "42ec57a8f68311bbbf4ff96a5d33c8a2e90b9d05"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block: make ioc get/put interface more conventional and fix race on alloction\n\nIgnoring copy_io() during fork, io_context can be allocated from two\nplaces - current_io_context() and set_task_ioprio().  The former is\nalways called from local task while the latter can be called from\ndifferent task.  The synchornization between them are peculiar and\ndubious.\n\n* current_io_context() doesn\u0027t grab task_lock() and assumes that if it\n  saw %NULL -\u003eio_context, it would stay that way until allocation and\n  assignment is complete.  It has smp_wmb() between alloc/init and\n  assignment.\n\n* set_task_ioprio() grabs task_lock() for assignment and does\n  smp_read_barrier_depends() between \"ioc \u003d task-\u003eio_context\" and \"if\n  (ioc)\".  Unfortunately, this doesn\u0027t achieve anything - the latter\n  is not a dependent load of the former.  ie, if ioc itself were being\n  dereferenced \"ioc-\u003exxx\", it would mean something (not sure what tho)\n  but as the code currently stands, the dependent read barrier is\n  noop.\n\nAs only one of the the two test-assignment sequences is task_lock()\nprotected, the task_lock() can\u0027t do much about race between the two.\nNothing prevents current_io_context() and set_task_ioprio() allocating\nits own ioc for the same task and overwriting the other\u0027s.\n\nAlso, set_task_ioprio() can race with exiting task and create a new\nioc after exit_io_context() is finished.\n\nioc get/put doesn\u0027t have any reason to be complex.  The only hot path\nis accessing the existing ioc of %current, which is simple to achieve\ngiven that -\u003eio_context is never destroyed as long as the task is\nalive.  All other paths can happily go through task_lock() like all\nother task sub structures without impacting anything.\n\nThis patch updates ioc get/put so that it becomes more conventional.\n\n* alloc_io_context() is replaced with get_task_io_context().  This is\n  the only interface which can acquire access to ioc of another task.\n  On return, the caller has an explicit reference to the object which\n  should be put using put_io_context() afterwards.\n\n* The functionality of current_io_context() remains the same but when\n  creating a new ioc, it shares the code path with\n  get_task_io_context() and always goes through task_lock().\n\n* get_io_context() now means incrementing ref on an ioc which the\n  caller already has access to (be that an explicit refcnt or implicit\n  %current one).\n\n* PF_EXITING inhibits creation of new io_context and once\n  exit_io_context() is finished, it\u0027s guaranteed that both ioc\n  acquisition functions return %NULL.\n\n* All users are updated.  Most are trivial but\n  smp_read_barrier_depends() removal from cfq_get_io_context() needs a\n  bit of explanation.  I suppose the original intention was to ensure\n  ioc-\u003eioprio is visible when set_task_ioprio() allocates new\n  io_context and installs it; however, this wouldn\u0027t have worked\n  because set_task_ioprio() doesn\u0027t have wmb between init and install.\n  There are other problems with this which will be fixed in another\n  patch.\n\n* While at it, use NUMA_NO_NODE instead of -1 for wildcard node\n  specification.\n\n-v2: Vivek spotted contamination from debug patch.  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a73f730d013ff2788389fd0c46ad3e5510f124e6",
      "tree": "773987c8cbec56745d46f46382ad268ed91adf98",
      "parents": [
        "8ba61435d73f2274e12d4d823fde06735e8f6a54"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003ecic_index to q-\u003eid\n\ncfq allocates per-queue id using ida and uses it to index cic radix\ntree from io_context.  Move it to q-\u003eid and allocate on queue init and\nfree on queue release.  This simplifies cfq a bit and will allow for\nfurther improvements of io context life-cycle management.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "65299a3b788bd274bed92f9fa3232082c9f3ea70",
      "tree": "191c0afe31c15ac4c1bab96e0a07fddb097d0de8",
      "parents": [
        "5dc06c5a70b79a323152bec7e55783e705767e63"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Aug 23 14:50:29 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Aug 23 14:50:29 2011 +0200"
      },
      "message": "block: separate priority boosting from REQ_META\n\nAdd a new REQ_PRIO to let requests preempt others in the cfq I/O schedule,\nand lave REQ_META purely for marking requests as metadata in blktrace.\n\nAll existing callers of REQ_META except for XFS are updated to also\nset REQ_PRIO for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b53d1ed734a2b9af8da115b836b658daa7d47a48",
      "tree": "07ed12caa6fd50f97568f419448cf03906d980c4",
      "parents": [
        "4853abaae7e4a2af938115ce9071ef8684fb7af4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Aug 19 08:34:48 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Aug 19 08:34:48 2011 +0200"
      },
      "message": "Revert \"cfq: Remove special treatment for metadata rqs.\"\n\nWe have a kernel build regression since 3.1-rc1, which is about 10%\nregression. The kernel source is in an ext3 filesystem.\nAlex Shi bisect it to commit:\ncommit a07405b7802691d29ab3b23bdc76ee6d006aad0b\nAuthor: Justin TerAvest \u003cteravest@google.com\u003e\nDate:   Sun Jul 10 22:09:19 2011 +0200\n\n    cfq: Remove special treatment for metadata rqs.\n\nApparently this is caused by lack metadata preemption, where ext3/ext4\ndo use READ_META. I didn\u0027t see a way to fix the issue, so suggest\nreverting the patch.\n\nThis reverts commit a07405b7802691d29ab3b23bdc76ee6d006aad0b.\n\nReported-by: Alex Shi\u003calex.shi@intel.com\u003e\nReported-by: Shaohua Li\u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a5395b83b78f62ccf5e3af854aacd025c2a6e7b5",
      "tree": "9705672ce8d806582abe667f06b4d302954b1795",
      "parents": [
        "e5a94f56845bb4b272d82e84b5a1e2080b07ba82"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Aug 02 09:24:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Aug 02 09:24:09 2011 +0200"
      },
      "message": "cfq-iosched: Reduce linked group count upon group destruction\n\nFQ keeps track of number of groups which are linked on blkcg-\u003eblkg_list.\nThis is useful to avoid races between queue exit and cgroup exit code\npaths. So if at the request queue exit time linked group count is not\nzero, that means there are some group out there which is yet to be\ndeleted under rcu read period and queue exit code should wait for\non rcu period.\n\nIn my previous patch I forgot to decrease the number of group count.\nSo in current form, we nr_blkcg_linked_grps is always non-zero and\nwe will always wait one rcu period (if BLK_CGROUP\u003dy). The side effect\nof this is that it can increase boot time. I am surprised, nobody\ncomplained so far.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7700fc4f675fa38094e78e345b594363a2fd895b",
      "tree": "000ae1fb3d825240b7e78ad8d3db66be168ffe94",
      "parents": [
        "f5f2b6ceb23e02ff35c6dbc6a39aa776ace99cda"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 12 14:24:56 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 14:24:56 2011 +0200"
      },
      "message": "CFQ: add think time check for group\n\nCurrently when the last queue of a group has no request, we don\u0027t expire\nthe queue to hope request from the group comes soon, so the group doesn\u0027t\nmiss its share. But if the think time is big, the assumption isn\u0027t correct\nand we just waste bandwidth. In such case, we don\u0027t do idle.\n\n[global]\nruntime\u003d30\ndirect\u003d1\n\n[test1]\ncgroup\u003dtest1\ncgroup_weight\u003d1000\nrw\u003drandread\nioengine\u003dlibaio\nsize\u003d500m\nruntime\u003d30\ndirectory\u003d/mnt\nfilename\u003dfile1\nthinktime\u003d9000\n\n[test2]\ncgroup\u003dtest2\ncgroup_weight\u003d1000\nrw\u003drandread\nioengine\u003dlibaio\nsize\u003d500m\nruntime\u003d30\ndirectory\u003d/mnt\nfilename\u003dfile2\n\n\tpatched\t\tbase\ntest1\t64k\t\t39k\ntest2\t548k\t\t540k\ntotal\t604k\t\t578k\n\ngroup1 gets much better throughput because it waits less time.\n\nTo check if the patch changes behavior of queue without think time. I also\ntried to give test1 2ms think time or no think time. The test result is stable.\nThe thoughput doesn\u0027t change with/without the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f5f2b6ceb23e02ff35c6dbc6a39aa776ace99cda",
      "tree": "19ea26a1832c03c1c221675d3372b86abd12cc83",
      "parents": [
        "383cd7213f95a2784ab5038fe292844178768b82"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 12 14:24:55 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 14:24:55 2011 +0200"
      },
      "message": "CFQ: add think time check for service tree\n\nCurrently when the last queue of a service tree has no request, we don\u0027t\nexpire the queue to hope request from the service tree comes soon, so the\nservice tree doesn\u0027t miss its share. But if the think time is big, the\nassumption isn\u0027t correct and we just waste bandwidth. In such case, we\ndon\u0027t do idle.\n\n[global]\nruntime\u003d10\ndirect\u003d1\n\n[test1]\nrw\u003drandread\nioengine\u003dlibaio\nsize\u003d500m\ndirectory\u003d/mnt\nfilename\u003dfile1\nthinktime\u003d9000\n\n[test2]\nrw\u003dread\nioengine\u003dlibaio\nsize\u003d1G\ndirectory\u003d/mnt\nfilename\u003dfile2\n\n\tpatched\t\tbase\ntest1\t41k/s\t\t33k/s\ntest2\t15868k/s\t15789k/s\ntotal\t15902k/s\t15817k/s\n\nA slightly better\n\nTo check if the patch changes behavior of queue without think time. I also\ntried to give test1 2ms think time or no think time. The test has variation\neven without the patch, but the average throughput doesn\u0027t change with/without\nthe patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "383cd7213f95a2784ab5038fe292844178768b82",
      "tree": "625de0648246daff30a9030e350c29584d29441e",
      "parents": [
        "4aede84b33d6beb401136a3deca0651ae07c5e99"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 12 14:24:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 14:24:35 2011 +0200"
      },
      "message": "CFQ: move think time check variables to a separate struct\n\nMove the variables to do think time check to a sepatate struct. This is\nto prepare adding think time check for service tree and group. No\nfunctional change.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4aede84b33d6beb401136a3deca0651ae07c5e99",
      "tree": "831266dbb15227584da5011ae4bb1e5038a69677",
      "parents": [
        "a07405b7802691d29ab3b23bdc76ee6d006aad0b"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Jul 12 08:31:45 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 08:35:10 2011 +0200"
      },
      "message": "fixlet: Remove fs_excl from struct task.\n\nfs_excl is a poor man\u0027s priority inheritance for filesystems to hint to\nthe block layer that an operation is important. It was never clearly\nspecified, not widely adopted, and will not prevent starvation in many\ncases (like across cgroups).\n\nfs_excl was introduced with the time sliced CFQ IO scheduler, to\nindicate when a process held FS exclusive resources and thus needed\na boost.\n\nIt doesn\u0027t cover all file systems, and it was never fully complete.\nLets kill it.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a07405b7802691d29ab3b23bdc76ee6d006aad0b",
      "tree": "8ca155acb56662e9807af2fa91b801b9f0d25495",
      "parents": [
        "316cc67d5e03801a5ee4ac660a4dfe9e02aed475"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Sun Jul 10 22:09:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jul 10 22:09:19 2011 +0200"
      },
      "message": "cfq: Remove special treatment for metadata rqs.\n\nThere is no consistency among filesystems from what bios (or requests)\nare marked as being metadata. It\u0027s interesting to expose this in traces,\nbut we shouldn\u0027t schedule the requests differently based on whether or\nnot they\u0027re marked as being metadata.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "04bf7869ca0fd12009aee301cac2264a36df4d98",
      "tree": "66cb81ebf8b76560a31433c2c493dc430c914af9",
      "parents": [
        "d2f31a5fd60d168b00fc4f7617b68a1287b21e90",
        "7b28afe01ab6ffb5f152f47831b44933facd2328"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-3.1/core\n\nConflicts:\n\tblock/blk-throttle.c\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "726e99ab88db059fe1422e15376ae404f8c66eb4",
      "tree": "8d9373239aa568f28631e253d9fd07bc78b312c3",
      "parents": [
        "3181faa85bda3dc3f5e630a1846526c9caaa38e3"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Jun 27 09:03:48 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 27 09:36:06 2011 +0200"
      },
      "message": "cfq-iosched: make code consistent\n\nioc-\u003eioc_data is rcu protectd, so uses correct API to access it.\nThis doesn\u0027t change any behavior, but just make code consistent.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: stable@kernel.org # after ab4bd22d\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3181faa85bda3dc3f5e630a1846526c9caaa38e3",
      "tree": "1017c61ebf8a7711ac400e2a728e188ec5770001",
      "parents": [
        "258e43fdb00c73d424b114ae3850accd55b27cbb"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Jun 27 09:03:47 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 27 09:36:06 2011 +0200"
      },
      "message": "cfq-iosched: fix a rcu warning\n\nI got a rcu warnning at boot. the ioc-\u003eioc_data is rcu_deferenced, but\ndoesn\u0027t hold rcu_read_lock.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: stable@kernel.org # after ab4bd22d\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fd16d263194aa6b50b215eb593a567b59d744d6e",
      "tree": "555aac4bd0104ea85643f1a3550c9bc1cbac9256",
      "parents": [
        "dd7740933842202fccaa9ebcba6bce0507b3f6d6"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jun 13 10:42:49 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 13 20:18:49 2011 +0200"
      },
      "message": "block: Add __attribute__((format(printf...) and fix fallout\n\nUse the compiler to verify format strings and arguments.\n\nFix fallout.\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "08e8138adebdd511e0955e8d6c051904bb4082af",
      "tree": "f73e9adc3e0164bf427f297312dff95c370db5ee",
      "parents": [
        "fdd514e16bb2531c0c61ae8a1f87740ce217f630"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jun 13 10:42:49 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 13 10:42:49 2011 +0200"
      },
      "message": "block: Add __attribute__((format(printf...) and fix fallout\n\nUse the compiler to verify format strings and arguments.\n\nFix fallout.\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8aea45451b252e4be09ee9974c5658bb47c81625",
      "tree": "7b838405229f32fb7937fac49c95b2d1294fb59b",
      "parents": [
        "9b50902db5eb8a220160fb89e95aa11967998d12"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Mon Jun 06 05:07:54 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:57:25 2011 +0200"
      },
      "message": "CFQ: make two functions static\n\nCorrectly suggested by sparse.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9b50902db5eb8a220160fb89e95aa11967998d12",
      "tree": "ad025360c616398f2b0aea1f0789a2f8174496b1",
      "parents": [
        "796d5116c407690b14fd5bda136aa67a39e7061a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jun 05 06:01:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:57:21 2011 +0200"
      },
      "message": "cfq-iosched: fix locking around ioc-\u003eioc_data assignment\n\nSince we are modifying this RCU pointer, we need to hold\nthe lock protecting it around it.\n\nThis fixes a potential reuse and double free of a cfq\nio_context structure. The bug has been in CFQ for a long\ntime, it hit very few people but those it did hit seemed\nto see it a lot.\n\nTracked in RH bugzilla here:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d577968\n\nCredit goes to Paul Bolle for figuring out that the issue\nwas around the one-hit ioc-\u003eioc_data cache. Thanks to his\nhard work the issue is now fixed.\n\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ab4bd22d3cce6977dc039664cc2d052e3147d662",
      "tree": "70cd3b540a8efef5d737da68272f67d2265c356a",
      "parents": [
        "23c79d31a3dd2602ee1a5ff31303b2d7a2d3c159"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jun 05 06:01:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:56:49 2011 +0200"
      },
      "message": "cfq-iosched: fix locking around ioc-\u003eioc_data assignment\n\nSince we are modifying this RCU pointer, we need to hold\nthe lock protecting it around it.\n\nThis fixes a potential reuse and double free of a cfq\nio_context structure. The bug has been in CFQ for a long\ntime, it hit very few people but those it did hit seemed\nto see it a lot.\n\nTracked in RH bugzilla here:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d577968\n\nCredit goes to Paul Bolle for figuring out that the issue\nwas around the one-hit ioc-\u003eioc_data cache. Thanks to his\nhard work the issue is now fixed.\n\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "796d5116c407690b14fd5bda136aa67a39e7061a",
      "tree": "bb0522aacb0a923e6636c82aff143df95ea1d730",
      "parents": [
        "1fa7b6a29c61358cc2ca6f64cef4aa0e1a7ca74c"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Thu Jun 02 21:19:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 02 21:19:05 2011 +0200"
      },
      "message": "iosched: prevent aliased requests from starving other I/O\n\nHi, Jens,\n\nIf you recall, I posted an RFC patch for this back in July of last year:\nhttp://lkml.org/lkml/2010/7/13/279\n\nThe basic problem is that a process can issue a never-ending stream of\nasync direct I/Os to the same sector on a device, thus starving out\nother I/O in the system (due to the way the alias handling works in both\ncfq and deadline).  The solution I proposed back then was to start\ndispatching from the fifo after a certain number of aliases had been\ndispatched.  Vivek asked why we had to treat aliases differently at all,\nand I never had a good answer.  So, I put together a simple patch which\nallows aliases to be added to the rb tree (it adds them to the right,\nthough that doesn\u0027t matter as the order isn\u0027t guaranteed anyway).  I\nthink this is the preferred solution, as it doesn\u0027t break up time slices\nin CFQ or batches in deadline.  I\u0027ve tested it, and it does solve the\nstarvation issue.  Let me know what you think.\n\nCheers,\nJeff\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "28304f485c3627cc5e1665b92e26eb7fcfe98088",
      "tree": "c885abcc932d5ae28fdeb49027ea5eafaaafd376",
      "parents": [
        "4c49ff3fe128ca68dabd07537415c419ad7f82f9"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "message": "cfq-iosched: Remove bogus check in queue_fail path\n\nqueue_fail can only be reached if cic is NULL, so its check for cic must\nbe bogus.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4495a7d41dbda03841c2a1c2a5ce7135a45131ba",
      "tree": "9c5044963151f3c058d9e20ef88c4a856497fe27",
      "parents": [
        "ea9d6553b3b3044e7374774cc33bb1b2eee19dd3"
      ],
      "author": {
        "name": "Kyungmin Park",
        "email": "kyungmin.park@samsung.com",
        "time": "Tue May 31 10:04:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 31 19:49:44 2011 +0200"
      },
      "message": "CFQ: Fix typo and remove unnecessary semicolon\n\nFix comment typo and remove unnecessary semicolon at macro\n\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1547010e6e15a3f44f49381246421a1e19de526e",
      "tree": "560796824e489a5d5c0b6de7a143d9a48a558d83",
      "parents": [
        "20359f27e8ff115f7cddf3da5b3a6cdcca2e650d"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "message": "cfq-iosched: free cic_index if cfqd allocation fails\n\nWhen struct cfq_data allocation fails, cic_index need to be freed.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "20359f27e8ff115f7cddf3da5b3a6cdcca2e650d",
      "tree": "b87c86545f68c5c660f3aeaf4cf3e366fa7db668",
      "parents": [
        "229836bd63c5413a4f8eed93d610b432be141e9b"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "message": "cfq-iosched: remove unused \u0027group_changed\u0027 in cfq_service_tree_add()\n\nThe \u0027group_changed\u0027 variable is initialized to 0 and never changed, so\nchecking the variable is meaningless.\n\nIt is a leftover from 0bbfeb832042 (\"cfq-iosched: Always provide group\niosolation.\"). Let\u0027s get rid of it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "229836bd63c5413a4f8eed93d610b432be141e9b",
      "tree": "a55fa492dbcde4c8f179d58d07165bdff872c34e",
      "parents": [
        "b9f8ce059940064a732da49b5d6e618381dad956"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "message": "cfq-iosched: reduce bit operations in cfq_choose_req()\n\nReduce the number of bit operations in cfq_choose_req() on average\n(and worst) cases.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b9f8ce059940064a732da49b5d6e618381dad956",
      "tree": "850281e8dd7bf5813d2960c2d42177803072bc02",
      "parents": [
        "4cbadbd16e2fb727f6926597e0a580829e6222f1"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "message": "cfq-iosched: algebraic simplification in cfq_prio_to_maxrq()\n\nSimplify the calculation in cfq_prio_to_maxrq(), plus replace CFQ_PRIO_LISTS to\nIOPRIO_BE_NR since they are the same and IOPRIO_BE_NR looks more reasonable in\nthis context IMHO.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2abae55f5a41d29f21b5b259c33d218c950d5c90",
      "tree": "69169fa89fb25fcf7521999d7fca91664262bfc7",
      "parents": [
        "345227d705f2318e9bc088e79fe71a38bb5fe82b"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "message": "cfq-iosched: Fix a memory leak of per cpu stats for root group\n\nWe allocated per cpu stats struct for root group but did not free it.\nFix it.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5624a4e445e2ec27582984b068d7bf7f127cee10",
      "tree": "0827c83c6e5f5fa83bd0dadc1bc395c0f0657dae",
      "parents": [
        "4843c69d496a8d2e4caab6182fe016b9a79136e0"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:28 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Make dispatch stats per cpu\n\nCurrently we take blkg_stat lock for even updating the stats. So even if\na group has no throttling rules (common case for root group), we end\nup taking blkg_lock, for updating the stats.\n\nMake dispatch stats per cpu so that these can be updated without taking\nblkg lock.\n\nIf cpu goes offline, these stats simply disappear. No protection has\nbeen provided for that yet. Do we really need anything for that?\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f469a7b4d5b1d1d053200a9015fd25d59c057f49",
      "tree": "2c68c0689e40955b186e350b15d44d0b260f4655",
      "parents": [
        "56edf7d75db5b14d628b46623c414ffbeed68d7f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:23 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-cgroup: Allow sleeping while dynamically allocating a group\n\nCurrently, all the cfq_group or throtl_group allocations happen while\nwe are holding -\u003equeue_lock and sleeping is not allowed.\n\nSoon, we will move to per cpu stats and also need to allocate the\nper group stats. As one can not call alloc_percpu() from atomic\ncontext as it can sleep, we need to drop -\u003equeue_lock, allocate the\ngroup, retake the lock and continue processing.\n\nIn throttling code, I check the queue DEAD flag again to make sure\nthat driver did not call blk_cleanup_queue() in the mean time.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "56edf7d75db5b14d628b46623c414ffbeed68d7f",
      "tree": "7d7ff46f03676154d0edf3da85c8e738d506ad92",
      "parents": [
        "3e59cf9d66a87763fef6c232a4a8dc664461ca50"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:22 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "cfq-iosched: Fix a possible race with cfq cgroup removal code\n\nblkg-\u003ekey \u003d cfqd is an rcu protected pointer and hence we used to do\ncall_rcu(cfqd-\u003ercu_head) to free up cfqd after one rcu grace period.\n\nThe problem here is that even though cfqd is around, there are no\ngurantees that associated request queue (td-\u003equeue) or q-\u003equeue_lock\nis still around. A driver might have called blk_cleanup_queue() and\nrelease the lock.\n\nIt might happen that after freeing up the lock we call\nblkg-\u003ekey-\u003equeue-\u003equeue_ock and crash. This is possible in following\npath.\n\nblkiocg_destroy()\n blkio_unlink_group_fn()\n  cfq_unlink_blkio_group()\n\nHence, wait for an rcu peirod if there are groups which have not\nbeen unlinked from blkcg-\u003eblkg_list. That way, if there are any groups\nwhich are taking cfq_unlink_blkio_group() path, can safely take queue\nlock.\n\nThis is how we have taken care of race in throttling logic also.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3e59cf9d66a87763fef6c232a4a8dc664461ca50",
      "tree": "2a7a0618092f29ac72b3723e0e3e64a7e4227716",
      "parents": [
        "a23e68695593d00b35a6cddf8e9c9ec03505ecb9"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:21 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "cfq-iosched: Get rid of redundant function parameter \"create\"\n\nNobody seems to be using cfq_find_alloc_cfqg() function parameter \"create\".\nGet rid of that.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "70087dc38cc77ca8f46059564c00338777734762",
      "tree": "2ffd5885a12acb44d90d3c3c1a578387bad94a32",
      "parents": [
        "02e352287a40bd456eb78df705bf888bc3161d3f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 16 15:24:08 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 16 15:24:08 2011 +0200"
      },
      "message": "blk-throttle: Use task_subsys_state() to determine a task\u0027s blkio_cgroup\n\nCurrentlly we first map the task to cgroup and then cgroup to\nblkio_cgroup. There is a more direct way to get to blkio_cgroup\nfrom task using task_subsys_state(). Use that.\n\nThe real reason for the fix is that it also avoids a race in generic\ncgroup code. During remount/umount rebind_subsystems() is called and\nit can do following with and rcu protection.\n\ncgrp-\u003esubsys[i] \u003d NULL;\n\nThat means if somebody got hold of cgroup under rcu and then it tried\nto do cgroup-\u003esubsys[] to get to blkio_cgroup, it would get NULL which\nis wrong. I was running into this race condition with ltp running on a\nupstream derived kernel and that lead to crash.\n\nSo ideally we should also fix cgroup generic code to wait for rcu\ngrace period before setting pointer to NULL. Li Zefan is not very keen\non introducing synchronize_wait() as he thinks it will slow\ndown moun/remount/umount operations.\n\nSo for the time being atleast fix the kernel crash by taking a more\ndirect route to blkio_cgroup.\n\nOne tester had reported a crash while running LTP on a derived kernel\nand with this fix crash is no more seen while the test has been\nrunning for over 6 days.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5f45c69589b7d2953584e6cd0b31e35dbe960ad0",
      "tree": "7f920cebcbbe6a1435975e355cee15289ddbc428",
      "parents": [
        "bd900d4580107c899d43b262fbbd995f11097a43"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 09:10:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 09:10:35 2011 +0200"
      },
      "message": "cfq-iosched: read_lock() does not always imply rcu_read_lock()\n\nFor some configurations of CONFIG_PREEMPT that is not true. So\nget rid of __call_for_each_cic() and always uses the explicitly\nrcu_read_lock() protected call_for_each_cic() instead.\n\nThis fixes a potential bug related to IO scheduler removal or\nonline switching.\n\nThanks to Paul McKenney for clarifying this.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "24ecfbe27f65563909b14492afda2f1c21f7c044",
      "tree": "a7e51d903c400d0925f87be5f3069a5a44e0af24",
      "parents": [
        "4521cc4ed5173f92714f6999a69910c3385fed68"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 18 11:41:33 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 11:41:33 2011 +0200"
      },
      "message": "block: add blk_run_queue_async\n\nInstead of overloading __blk_run_queue to force an offload to kblockd\nadd a new blk_run_queue_async helper to do it explicitly.  I\u0027ve kept\nthe blk_queue_stopped check for now, but I suspect it\u0027s not needed\nas the check we do when the workqueue items runs should be enough.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "c4ade94fc00f8b34589719d8a347f658b6d3951e",
      "tree": "24868fc90f85ce3cba1b8218e771ce00506c3f51",
      "parents": [
        "62a37f6badd1ac97ba07d543b5d4be2f9cb17217"
      ],
      "author": {
        "name": "Li, Shaohua",
        "email": "shaohua.li@intel.com",
        "time": "Wed Mar 23 08:30:34 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 23 08:30:34 2011 +0100"
      },
      "message": "cfq-iosched: removing unnecessary think time checking\n\nRemoving think time checking. A high thinktime queue might means the queue\ndispatches several requests and then do away. Limitting such queue seems\nmeaningless. And also this can simplify code. This is suggested by Vivek.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "62a37f6badd1ac97ba07d543b5d4be2f9cb17217",
      "tree": "b659ac7b4c9fce787694bb8a33affa229d1cd552",
      "parents": [
        "04521db04e9a11e74b0252d222051cb194487f4d"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Wed Mar 23 08:25:44 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 23 08:25:44 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t clear queue stats when preempt.\n\nFor v2, I added back lines to cfq_preempt_queue() that were removed\nduring updates for accounting unaccounted_time. Thanks for pointing out\nthat I\u0027d missed these, Vivek.\n\nPrevious commit \"cfq-iosched: Don\u0027t set active queue in preempt\" wrongly\ncleared stats for preempting queues when it shouldn\u0027t have, because when\nwe choose a queue to preempt, it still isn\u0027t necessarily scheduled next.\n\nThanks to Vivek Goyal for figuring this out and understanding how the\npreemption code works.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "eda5e0c91fed2d2a38a341b0957263406d330274",
      "tree": "d09564b4ef18dc8f9703a3d67def655b24b992c8",
      "parents": [
        "1e9bb8808ac11094d711d20d580e7b45a4992d0c"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 22 21:26:49 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:26:49 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t set active queue in preempt\n\nCommit \"Add unaccounted time to timeslice_used\" changed the behavior of\ncfq_preempt_queue to set cfqq active. Vivek pointed out that other\npreemption rules might get involved, so we shouldn\u0027t manually set which\nqueue is active.\n\nThis cleans up the code to just clear the queue stats at preemption\ntime.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8184f93eced1e304721c2a55c00d87d5a14f8907",
      "tree": "b5ed43533eee883bc25920c191cb095584d29822",
      "parents": [
        "95f28604a65b1c40b6c6cd95e58439cd7ded3add"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Thu Mar 17 16:12:36 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 17 16:12:36 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t update group weights when on service tree\n\nVersion 3 is updated to apply to for-2.6.39/core.\n\nFor version 2, I took Vivek\u0027s advice and made sure we update the group\nweight from cfq_group_service_tree_add().\n\nIf a weight was updated while a group is on the service tree, the\ncalculation for the total weight of the service tree can be adjusted\nimproperly, which either leads to bad service tree weights, or\npotentially crashes (if total_weight becomes 0).\n\nThis patch defers updates to the weight until a group is off the service\ntree.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "167400d34070ebbc408dc0f447c4ddb4bf837360",
      "tree": "19100b0511a7e3e18f6f61d90a5fe5f1c40f59c4",
      "parents": [
        "1f940bdfc0d03265d178d9dfd840d854819f797d"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Sat Mar 12 16:54:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Mar 12 16:54:00 2011 +0100"
      },
      "message": "blk-cgroup: Add unaccounted time to timeslice_used.\n\nThere are two kind of times that tasks are not charged for: the first\nseek and the extra time slice used over the allocated timeslice. Both\nof these exported as a new unaccounted_time stat.\n\nI think it would be good to have this reported in \u0027time\u0027 as well, but\nthat is probably a separate discussion.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b873c5d692d4d5453cceed18bb06c62bb1a73ac0",
      "tree": "f9d5816bc26ced37f187a141ee6c74c7b8e00fcf",
      "parents": [
        "a60327107b56573c305ecc78e471dbdbb4d2f426",
        "e83a46bbb1d4c03defd733a64b727632a40059ad"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:40:21 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:40:21 2011 +0100"
      },
      "message": "Merge branch \u0027block-for-2.6.39-core\u0027 of ssh://master.kernel.org/pub/scm/linux/kernel/git/tj/misc into for-2.6.39/core\n"
    },
    {
      "commit": "a60327107b56573c305ecc78e471dbdbb4d2f426",
      "tree": "239521730642bc2f263d1daa9c49737467d6c1b9",
      "parents": [
        "ef8a41df8c140f10108de75b01b6369d6e49113c"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Mon Mar 07 09:28:09 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:28:09 2011 +0100"
      },
      "message": "cfq-iosched: Fix update_vdisktime logic\n\nThe update_vdisktime logic is broken since commit\nb54ce60eb7f61f8e314b8b241b0469eda3bb1d42, st-\u003emin_vdisktime never makes\na progress. Fix it.\n\nThanks Vivek for pointing it out.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfen@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ef8a41df8c140f10108de75b01b6369d6e49113c",
      "tree": "2407ce27d3b51205a56193f26db1c1b40a5c556f",
      "parents": [
        "93803e0140c6216b68fe926ccc611297120da273"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Mar 07 09:26:29 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:26:29 2011 +0100"
      },
      "message": "cfq-iosched: give busy sync queue no dispatch limit\n\nIf there are a sync and an async queue and the sync queue\u0027s think time\nis small, we can ignore the sync queue\u0027s dispatch quantum. Because the\nsync queue will always preempt the async queue, we don\u0027t need to care\nabout async\u0027s latency.  This can fix a performance regression of\naiostress test, which is introduced by commit f8ae6e3eb825. The issue\nshould exist even without the commit, but the commit amplifies the\nimpact.\n\nThe initial post does the same optimization for RT queue too, but since\nI have no real workload for it, Vivek suggests to drop it.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "93803e0140c6216b68fe926ccc611297120da273",
      "tree": "c70e354f3029a00f83293b0d6bedf6738437ebab",
      "parents": [
        "da527770007fce8e4541947d47918248286da875"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 08:59:06 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 08:59:06 2011 +0100"
      },
      "message": "cfq-iosched: fix race in cfq_set_request()\n\nWe need to hold the queue lock over the reference increment,\nit\u0027s not atomic anymore.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e83a46bbb1d4c03defd733a64b727632a40059ad",
      "tree": "c4bc4822b2d3af1bf38095f531adc0a2aac054a5",
      "parents": [
        "da527770007fce8e4541947d47918248286da875",
        "fd51469fb68b987032e46297e0a4fe9020063c20"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "message": "Merge branch \u0027for-linus\u0027 of ../linux-2.6-block into block-for-2.6.39/core\n\nThis merge creates two set of conflicts.  One is simple context\nconflicts caused by removal of throtl_scheduled_delayed_work() in\nfor-linus and removal of throtl_shutdown_timer_wq() in\nfor-2.6.39/core.\n\nThe other is caused by commit 255bb490c8 (block: blk-flush shouldn\u0027t\ncall directly into q-\u003erequest_fn() __blk_run_queue()) in for-linus\ncrashing with FLUSH reimplementation in for-2.6.39/core.  The conflict\nisn\u0027t trivial but the resolution is straight-forward.\n\n* __blk_run_queue() calls in flush_end_io() and flush_data_end_io()\n  should be called with @force_kblockd set to %true.\n\n* elv_insert() in blk_kick_flush() should use\n  %ELEVATOR_INSERT_REQUEUE.\n\nBoth changes are to avoid invoking -\u003erequest_fn() directly from\nrequest completion path and closely match the changes in the commit\n255bb490c8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76",
      "tree": "c8071cf8cc1aef9e776697b72aaca5a22a47c3d7",
      "parents": [
        "291d24f6d9e7bbef81454fade8a44720665c7302"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "message": "block: add @force_kblockd to __blk_run_queue()\n\n__blk_run_queue() automatically either calls q-\u003erequest_fn() directly\nor schedules kblockd depending on whether the function is recursed.\nblk-flush implementation needs to be able to explicitly choose\nkblockd.  Add @force_kblockd.\n\nAll the current users are converted to specify %false for the\nparameter and this patch doesn\u0027t introduce any behavior change.\n\nstable: This is prerequisite for fixing ide oops caused by the new\n        blk-flush implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0bbfeb8320421989d3e12bd95fae86b9ac0712aa",
      "tree": "a23bb6686bd2586fe7c27d0773c63f9aeb254cd1",
      "parents": [
        "6fae9c25134baffbeeb20031479e7ff6f6d8eec0"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 01 15:05:08 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:05:08 2011 -0500"
      },
      "message": "cfq-iosched: Always provide group isolation.\n\nEffectively, make group_isolation\u003d1 the default and remove the tunable.\nThe setting group_isolation\u003d0 was because by default we idle on\nsync-noidle tree and on fast devices, this can be very harmful for\nthroughput.\n\nHowever, this problem can also be addressed by tuning slice_idle and\npossibly group_idle on faster storage devices.\n\nThis change simplifies the CFQ code by removing the feature entirely.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6fae9c25134baffbeeb20031479e7ff6f6d8eec0",
      "tree": "c9ab89992ce5293a43cd455a81dc8a5926a28a5e",
      "parents": [
        "c186794dbb466b45cf40f942f2d09d6d5b4b0e42",
        "f5412be599602124d2bdd49947b231dd77c0bf99"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:04:39 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:04:39 2011 -0500"
      },
      "message": "Merge commit \u0027v2.6.38-rc6\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c186794dbb466b45cf40f942f2d09d6d5b4b0e42",
      "tree": "07ccd819bb6cced2c19053d2ed97ebaac88f824e",
      "parents": [
        "9d5a4e946ce5352f19400b6370f4cd8e72806278"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Feb 11 11:08:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Feb 11 11:08:00 2011 +0100"
      },
      "message": "block: share request flush fields with  elevator_private\n\nFlush requests are never put on the IO scheduler.  Convert request\nstructure\u0027s elevator_private* into an array and have the flush fields\nshare a union with it.\n\nReclaim the space lost in \u0027struct request\u0027 by moving \u0027completion_data\u0027\nback in the union with \u0027rb_node\u0027.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02a8f01b5a9f396d0327977af4c232d0f94c45fd",
      "tree": "ace818b81f26c30c473af698882dc9786d13afe5",
      "parents": [
        "be2c6b1990904dbd43f3d9b90fa2c530504375cd"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Wed Feb 09 14:20:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Feb 09 14:22:36 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t wait if queue already has requests.\n\nCommit 7667aa0630407bc07dc38dcc79d29cc0a65553c1 added logic to wait for\nthe last queue of the group to become busy (have at least one request),\nso that the group does not lose out for not being continuously\nbacklogged. The commit did not check for the condition that the last\nqueue already has some requests. As a result, if the queue already has\nrequests, wait_busy is set. Later on, cfq_select_queue() checks the\nflag, and decides that since the queue has a request now and wait_busy\nis set, the queue is expired.  This results in early expiration of the\nqueue.\n\nThis patch fixes the problem by adding a check to see if queue already\nhas requests. If it does, wait_busy is not set. As a result, time slices\ndo not expire early.\n\nThe queues with more than one request are usually buffered writers.\nTesting shows improvement in isolation between buffered writers.\n\nCc: stable@kernel.org\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ba5bd520f679c450fb6efa439618703bd0956daa",
      "tree": "f3957e89e43c4955ae261ea96da570f36450f51f",
      "parents": [
        "68264e9d6781f7163e92c517769bb470fa43f6cd"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "message": "cfq: rename a function to give it more appropriate name\n\no Rename a function to give it more approprate name. We are calculating\n  cfq queue slice and function name gives the impression as if cfq group\n  slice length is being calculated.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c553f8e335c00a7cff3ab3f13e793b13d3f2207f",
      "tree": "f9371c9e1191711dd2e774e04d99f3fa90d697fa",
      "parents": [
        "f8ae6e3eb8251be32c6e913393d9f8d9e0609489"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "message": "block cfq: compensate preempted queue even if it has no slice assigned\n\nIf a queue is preempted before it gets slice assigned, the queue doesn\u0027t get\ncompensation, which looks unfair. For such queue, we compensate it for a whole\nslice.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f8ae6e3eb8251be32c6e913393d9f8d9e0609489",
      "tree": "50b096572a4f8e7992e7e7e2e599e77d334c2b5b",
      "parents": [
        "52cfd503ad7176d23a5dd7af3981744feb60622f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "message": "block cfq: make queue preempt work for queues from different workload\n\nI got this:\n             fio-874   [007]  2157.724514:   8,32   m   N cfq874 preempt\n             fio-874   [007]  2157.724519:   8,32   m   N cfq830 slice expired t\u003d1\n             fio-874   [007]  2157.724520:   8,32   m   N cfq830 sl_used\u003d1 disp\u003d0 charge\u003d1 iops\u003d0 sect\u003d0\n             fio-874   [007]  2157.724521:   8,32   m   N cfq830 set_active wl_prio:0 wl_type:0\n             fio-874   [007]  2157.724522:   8,32   m   N cfq830 Not idling. st-\u003ecount:1\n\ncfq830 is an async queue, and preempted by a sync queue cfq874. But since we\nhave cfqg-\u003esaved_workload_slice mechanism, the preempt is a nop.\nLooks currently our preempt is totally broken if the two queues are not from\nthe same workload type.\nBelow patch fixes it. This will might make async queue starvation, but it\u0027s\nwhat our old code does before cgroup is added.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "275220f0fcff1adf28a717076e00f575edf05fda",
      "tree": "d249bccc80c64443dab211639050c4fb14332648",
      "parents": [
        "fe3c560b8a22cb28e54fe8950abef38e88d75831",
        "81c5e2ae33c4b19e53966b427e33646bf6811830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block: (43 commits)\n  block: ensure that completion error gets properly traced\n  blktrace: add missing probe argument to block_bio_complete\n  block cfq: don\u0027t use atomic_t for cfq_group\n  block cfq: don\u0027t use atomic_t for cfq_queue\n  block: trace event block fix unassigned field\n  block: add internal hd part table references\n  block: fix accounting bug on cross partition merges\n  kref: add kref_test_and_get\n  bio-integrity: mark kintegrityd_wq highpri and CPU intensive\n  block: make kblockd_workqueue smarter\n  Revert \"sd: implement sd_check_events()\"\n  block: Clean up exit_io_context() source code.\n  Fix compile warnings due to missing removal of a \u0027ret\u0027 variable\n  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n  block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n  cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n  fs/splice: Pull buf-\u003eops-\u003econfirm() from splice_from_pipe actors\n  cdrom: export cdrom_check_events()\n  sd: implement sd_check_events()\n  sr: implement sr_check_events()\n  ...\n"
    },
    {
      "commit": "329a67815b596d23daf0caa588ae0800e925320f",
      "tree": "5fcf8a7c4a4d43b2cc7dc220d6bb25bdf27d153f",
      "parents": [
        "30d7b9448f03f2c82d0fd44738674cc156a8ce0a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_group\n\ncfq_group-\u003eref is used with queue_lock hold, the only exception is\ncfq_set_request, which looks like a bug to me, so ref doesn\u0027t need\nto be an atomic and atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "30d7b9448f03f2c82d0fd44738674cc156a8ce0a",
      "tree": "f925a59dfe6a7b2da5240e9d43d873de7b1de273",
      "parents": [
        "b7908c1035af7652cd613991b54dbff9c8b6bd3a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_queue\n\ncfq_queue-\u003eref is used with queue_lock hold, so ref doesn\u0027t need to be an atomic\nand atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7278c9c19bd85cf33213a2e0b538a18d3ac8ad00",
      "tree": "e080ada1f8cc00fef4600976f8cf489cc94d1c03",
      "parents": [
        "a8adbe378b56acd5945df70753c7e8f6fe223304"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n\nWhen cfq_choose_cfqg() is called in select_queue(), there must be at least one\nbacklogged CFQ queue waiting for dispatching, hence there must be at least one\nbacklogged CFQ group on service tree. So we never call choose_service_tree()\nwith cfqg \u003d\u003d NULL.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e4ea0c16a85d221ebcc3a21f32e321440459e0fc",
      "tree": "47acf4da84f9a448e6eb6172a5440ccc60696ed9",
      "parents": [
        "760701bfe14faee8ea0608a9cab2046071d98a39"
      ],
      "author": {
        "name": "Shaohua Li writes",
        "email": "shaohua.li@intel.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "message": "block cfq: select new workload if priority changed\n\nIf priority is changed, continuing to check workload_expires and service tree\ncount of the previous workload does not make sense. We should always choose\nthe workload with lowest key of new priority in such case.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "760701bfe14faee8ea0608a9cab2046071d98a39",
      "tree": "780193b7803aced7ecb2a53f0ce43150eb8ebeab",
      "parents": [
        "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of on_st flag\n\nIt\u0027s able to check whether a CFQ group on a service tree by\nchecking \"cfqg-\u003erb_node\". There\u0027s no need to maintain an\nextra flag here.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42",
      "tree": "fcf25315bb0ef06ad7f9017f84fce9021768682f",
      "parents": [
        "f30195c50245d8ace628e1978b1daa8df86e7224"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of st-\u003eactive\n\nWhen a cfq group is running, it won\u0027t be dequeued from service tree, so\nthere\u0027s no need to store the active one in st-\u003eactive. Just gid rid of it.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a02056349cdea2252cd2b21643ebf025e83a29f2",
      "tree": "b7c889d6cbe8e7188d07d99a5c9da858c53a5b6c",
      "parents": [
        "34db1d595ef6f183fbc1e42cda45a3dfa0035258",
        "e53beacd23d9cb47590da6a7a7f6d417b941a994"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "message": "Merge branch \u0027v2.6.37-rc2\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "2b9408a45978dcda77407859148deeccf403c372",
      "tree": "52fc549e7cc879c6dea98554f75da24df31c07cf",
      "parents": [
        "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t schedule a dispatch for a non-idle queue\n\nVivek suggests we don\u0027t need schedule a dispatch when an idle queue\nbecomes nonidle. And he is right, cfq_should_preempt already covers\nthe logic.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07",
      "tree": "2ba1aadf339af7d69931151e9d51f8054753ff85",
      "parents": [
        "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t idle if a deep seek queue is slow\n\nIf a deep seek queue slowly deliver requests but disk is much faster, idle\nfor the queue just wastes disk throughput. If the queue delevers all requests\nbefore half its slice is used, the patch disable idle for it.\nIn my test, application delivers 32 requests one time, the disk can accept\n128 requests at maxium and disk is fast. without the patch, the throughput\nis just around 30m/s, while with it, the speed is about 80m/s. The disk is\na SSD, but is detected as a rotational disk. I can configure it as SSD, but\nI thought the deep seek queue logic should be fixed too, for example,\nconsidering a fast raid.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4",
      "tree": "b39812dc8fd9ae552c361a84a10dcd61d2caaab5",
      "parents": [
        "c1e44756fdb7b363fd22cb5514dced40752e36c5"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "message": "cfq-iosched: schedule dispatch for noidle queue\n\nA queue is idle at cfq_dispatch_requests(), but it gets noidle later. Unless\nother task explictly does unplug or all requests are drained, we will not\ndeliever requests to the disk even cfq_arm_slice_timer doesn\u0027t make the\nqueue idle. For example, cfq_should_idle() returns true because of\nservice_tree-\u003ecount \u003d\u003d 1, and then other queues are added. Note, I didn\u0027t\nsee obvious performance impacts so far with the patch, but just thought\nthis could be a problem.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1e44756fdb7b363fd22cb5514dced40752e36c5",
      "tree": "796ca172be3270043efa02d5d0bb2552e48cd9d8",
      "parents": [
        "f6f94e2ab1b33f0082ac22d71f66385a60d8157f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "message": "cfq-iosched: do cleanup\n\nSome functions should return boolean.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b595076a180a56d1bb170e6eceda6eb9d76f4cd3",
      "tree": "bc01ec7283808013e0b8ce7713fd6fc40f810429",
      "parents": [
        "6aaccece1c483f189f76f1282b3984ff4c7ecb0a"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "message": "tree-wide: fix comment/printk typos\n\n\"gadget\", \"through\", \"command\", \"maintain\", \"maintain\", \"controller\", \"address\",\n\"between\", \"initiali[zs]e\", \"instead\", \"function\", \"select\", \"already\",\n\"equal\", \"access\", \"management\", \"hierarchy\", \"registration\", \"interest\",\n\"relative\", \"memory\", \"offset\", \"already\",\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "e9dd2b6837e26fe202708cce5ea4bb4ee3e3482e",
      "tree": "f42fd892495bfc4cbb740d06b016d267c9c42d00",
      "parents": [
        "4f3a29dadaf999a273f1e7fe2476595d0283eef3",
        "b4627321e18582dcbdeb45d77df29d3177107c65"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block: (39 commits)\n  cfq-iosched: Fix a gcc 4.5 warning and put some comments\n  block: Turn bvec_k{un,}map_irq() into static inline functions\n  block: fix accounting bug on cross partition merges\n  block: Make the integrity mapped property a bio flag\n  block: Fix double free in blk_integrity_unregister\n  block: Ensure physical block size is unsigned int\n  blkio-throttle: Fix possible multiplication overflow in iops calculations\n  blkio-throttle: limit max iops value to UINT_MAX\n  blkio-throttle: There is no need to convert jiffies to milli seconds\n  blkio-throttle: Fix link failure failure on i386\n  blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n  blkio: Add root group to td-\u003etg_list\n  blkio: deletion of a cgroup was causes oops\n  blkio: Do not export throttle files if CONFIG_BLK_DEV_THROTTLING\u003dn\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: revert bad fix for memory hotplug causing bounces\n  Fix compile error in blk-exec.c for !CONFIG_DETECT_HUNG_TASK\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: Prevent hang_check firing during long I/O\n  cfq: improve fsync performance for small files\n  ...\n\nFix up trivial conflicts due to __rcu sparse annotation in include/linux/genhd.h\n"
    },
    {
      "commit": "b4627321e18582dcbdeb45d77df29d3177107c65",
      "tree": "f494dae7f39f219d73aa9752dfd3844293d65f50",
      "parents": [
        "11a691bea48887c27425cc40bf291e74c922df25"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 22 09:48:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 22 09:48:43 2010 +0200"
      },
      "message": "cfq-iosched: Fix a gcc 4.5 warning and put some comments\n\n- Andi encountedred following warning with gcc 4.5\n\n  linux/block/cfq-iosched.c: In function ‘cfq_dispatch_requests’:\n  linux/block/cfq-iosched.c:2156:3: warning: array subscript is above array\n  bounds\n\n- Warning happens due to following code.\n\n  slice \u003d group_slice * count /\n\t\tmax_t(unsigned, cfqg-\u003ebusy_queues_avg[cfqd-\u003eserving_prio],\n\t\tcfq_group_busy_queues_wl(cfqd-\u003eserving_prio, cfqd, cfqg));\n\n  gcc is complaining about cfqg-\u003ebusy_queues_avg[] being indexed by CFQ\n  prio classes (RT, BE and IDLE) while the array size is only 2.\n\n- At run time, we never access cfqg-\u003ebusy_queues_avg[IDLE] and return from\n  function before this code hits.\n\n- To fix warning increase the array size though it will remain unused. This\n  patch also puts some comments to clarify some of the confusions.\n\n- I have taken Jens\u0027s patch and modified it a bit.\n\n- Compile tested with gcc 4.4 and boot tested. I don\u0027t have gcc 4.5\n  running, Andi can you please test it with gcc 4.5 to make sure it\n  worked.\n\nReported-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fe0714377ee2ca161bf2afb7773e22f15f1786d4",
      "tree": "09f5e8686d741d012333c92251b8cc66793ef916",
      "parents": [
        "02977e4af7ed3b478c505e50491ffdf3e1314cf4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "message": "blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n\no Currently any cgroup throttle limit changes are processed asynchronousy and\n  the change does not take affect till a new bio is dispatched from same group.\n\no It might happen that a user sets a redicuously low limit on throttling.\n  Say 1 bytes per second on reads. In such cases simple operations like mount\n  a disk can wait for a very long time.\n\no Once bio is throttled, there is no easy way to come out of that wait even if\n  user increases the read limit later.\n\no This patch fixes it. Now if a user changes the cgroup limits, we recalculate\n  the bio dispatch time according to new limits.\n\no Can\u0027t take queueu lock under blkcg_lock, hence after the change I wake\n  up the dispatch thread again which recalculates the time. So there are some\n  variables being synchronized across two threads without lock and I had to\n  make use of barriers. Hoping I have used barriers correctly. Any review of\n  memory barrier code especially will help.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "180be2a0420a0d680285e9352c0db85016b9ed2a",
      "tree": "455f9f890a52bf728c4d8ab96f8773ff41347a5c",
      "parents": [
        "a45dc2d2b8d1afa57c91dcfac224e50ffcd3f805"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Sep 14 08:47:11 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Sep 21 11:49:17 2010 +0200"
      },
      "message": "cfq-iosched: fix a kernel OOPs when usb key is inserted\n\nMike reported a kernel crash when a usb key hotplug is performed while all\nkernel thrads are not in a root cgroup and are running in one of the child\ncgroups of blkio controller.\n\n\tBUG: unable to handle kernel NULL pointer dereference at 0000002c\n\tIP: [\u003cc11c7b08\u003e] cfq_get_queue+0x232/0x412\n\t*pde \u003d 00000000\n\tOops: 0000 [#1] PREEMPT\n\tlast sysfs file: /sys/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host3/scsi_host/host3/uevent\n\n\t[..]\n\tPid: 30039, comm: scsi_scan_3 Not tainted 2.6.35.2-fg.roam #1 Volvi2                         /Aspire 4315\n\tEIP: 0060:[\u003cc11c7b08\u003e] EFLAGS: 00010086 CPU: 0\n\tEIP is at cfq_get_queue+0x232/0x412\n\tEAX: f705f9c0 EBX: e977abac ECX: 00000000 EDX: 00000000\n\tESI: f00da400 EDI: f00da4ec EBP: e977a800 ESP: dff8fd00\n\t DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068\n\tProcess scsi_scan_3 (pid: 30039, ti\u003ddff8e000 task\u003df6b6c9a0 task.ti\u003ddff8e000)\n\tStack:\n\t 00000000 00000000 00000001 01ff0000 f00da508 00000000 f00da524 f00da540\n\t\u003c0\u003e e7994940 dd631750 f705f9c0 e977a820 e977ac44 f00da4d0 00000001 f6b6c9a0\n\t\u003c0\u003e 00000010 00008010 0000000b 00000000 00000001 e977a800 dd76fac0 00000246\n\tCall Trace:\n\t [\u003cc11c7f10\u003e] ? cfq_set_request+0x228/0x34c\n\t [\u003cc11c7ce8\u003e] ? cfq_set_request+0x0/0x34c\n\t [\u003cc11bb3b9\u003e] ? elv_set_request+0xf/0x1c\n\t [\u003cc11bdd51\u003e] ? get_request+0x1ad/0x22f\n\t [\u003cc11bddf2\u003e] ? get_request_wait+0x1f/0x11a\n\t [\u003cc11d013b\u003e] ? kvasprintf+0x33/0x3b\n\t [\u003cc127b537\u003e] ? scsi_execute+0x1d/0x103\n\t [\u003cc127b675\u003e] ? scsi_execute_req+0x58/0x83\n\t [\u003cc127c391\u003e] ? scsi_probe_and_add_lun+0x188/0x7c2\n\t [\u003cc12718c6\u003e] ? attribute_container_add_device+0x15/0xfa\n\t [\u003cc11c95d1\u003e] ? kobject_get+0xf/0x13\n\t [\u003cc126d1db\u003e] ? get_device+0x10/0x14\n\t [\u003cc127be93\u003e] ? scsi_alloc_target+0x217/0x24d\n\t [\u003cc127cbd8\u003e] ? __scsi_scan_target+0x95/0x480\n\t [\u003cc10204eb\u003e] ? dequeue_entity+0x14/0x1fe\n\t [\u003cc1020491\u003e] ? update_curr+0x165/0x1ab\n\t [\u003cc1020491\u003e] ? update_curr+0x165/0x1ab\n\t [\u003cc127d00d\u003e] ? scsi_scan_channel+0x4a/0x76\n\t [\u003cc127d0b0\u003e] ? scsi_scan_host_selected+0x77/0xad\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc127d137\u003e] ? do_scsi_scan_host+0x51/0x56\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc127d14a\u003e] ? do_scan_async+0xe/0x11a\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc10354c5\u003e] ? kthread+0x5e/0x63\n\t [\u003cc1035467\u003e] ? kthread+0x0/0x63\n\t [\u003cc1002af6\u003e] ? kernel_thread_helper+0x6/0x10\n\tCode: 44 24 1c 54 83 44 24 18 54 83 fa 03 75 94 8b 06 c7 86 64 02 00 00 01 00 00 00 83 e0 03 09 f0 89 06 8b 44 24 28 8b 90 58 01 00 00 \u003c8b\u003e 42 2c 85 c0 75 03 8b 42 08 8d 54 24 48 52 8d 4c 24 50 51 68\n\tEIP: [\u003cc11c7b08\u003e] cfq_get_queue+0x232/0x412 SS:ESP 0068:dff8fd00\n\tCR2: 000000000000002c\n\t---[ end trace 9a88306573f69b12 ]---\n\nThe problem here is that we don\u0027t have bdi-\u003edev information available when\nthread does some IO.  Hence when dev_name() tries to access bdi-\u003edev, it\ncrashes.\n\nThis problem does not happen if kernel threads are in root group as root\ngroup is statically allocated at device initialization time and we don\u0027t\nhit this piece of code.\n\nFix it by delaying the filling of major and minor number information of\ndevice in blk_group.  Initially a blk_group is created with 0 as device\ninformation and this information is filled later once some more IO comes\nin from same group.\n\nReported-by: Mike Kazantsev \u003cmk.fraggod@gmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "749ef9f8423054e326f3a246327ed2db4b6d395f",
      "tree": "388df763e4e731f5d9b4d8dcaedca641521571e3",
      "parents": [
        "6d0aed7a38d06284db2a0e46c0a072b0c1c3299b"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Mon Sep 20 15:24:50 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 20 15:24:50 2010 +0200"
      },
      "message": "cfq: improve fsync performance for small files\n\nFsync performance for small files achieved by cfq on high-end disks is\nlower than what deadline can achieve, due to idling introduced between\nthe sync write happening in process context and the journal commit.\n\nMoreover, when competing with a sequential reader, a process writing\nsmall files and fsync-ing them is starved.\n\nThis patch fixes the two problems by:\n- marking journal commits as WRITE_SYNC, so that they get the REQ_NOIDLE\n  flag set,\n- force all queues that have REQ_NOIDLE requests to be put in the noidle\n  tree.\n\nHaving the queue associated to the fsync-ing process and the one associated\n to journal commits in the noidle tree allows:\n- switching between them without idling,\n- fairness vs. competing idling queues, since they will be serviced only\n  after the noidle tree expires its slice.\n\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nTested-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "062a644d6121d5e2f51c0b2ca0cbc5155ebf845b",
      "tree": "250626a8ee11efa8e598692904e12ac26c29cab5",
      "parents": [
        "af41d7bd9b685ab4e8f930627874ba4f4728e128"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Sep 15 17:06:33 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 08:42:04 2010 +0200"
      },
      "message": "blk-cgroup: Prepare the base for supporting more than one IO control policies\n\no This patch prepares the base for introducing new IO control policies.\n  Currently all the code is written knowing there is only one policy\n  and that is proportional bandwidth. Creating infrastructure for newer\n  policies to come in.\n\no Also there were many functions which were generated using macro. It was\n  very confusing. Got rid of those.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c4e7893ebc3a5c507b53f59b9de448db20849944",
      "tree": "bcb89e402cf8c36c33d70f04dc5fd434e1d58321",
      "parents": [
        "80bdf0c78fff075dfa21576273c8b0c7db22bdfe"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:25:03 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:25:03 2010 +0200"
      },
      "message": "cfq-iosched: blktrace print per slice sector stats\n\no Divyesh had gotten rid of this code in the past. I want to re-introduce it\n  back as it helps me a lot during debugging.\n\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nReviewed-by: Divyesh Shah \u003cdpshah@google.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "80bdf0c78fff075dfa21576273c8b0c7db22bdfe",
      "tree": "f9075075f282e1e2adf1b2cb1fbc25991df7c6af",
      "parents": [
        "02b35081fc98f681411586d3acf9eaad8b8f6e07"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:24:26 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:24:26 2010 +0200"
      },
      "message": "cfq-iosched: Implement tunable group_idle\n\no Implement a new tunable group_idle, which allows idling on the group\n  instead of a cfq queue. Hence one can set slice_idle \u003d 0 and not idle\n  on the individual queues but idle on the group. This way on fast storage\n  we can get fairness between groups at the same time overall throughput\n  improves.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02b35081fc98f681411586d3acf9eaad8b8f6e07",
      "tree": "66cc8c375205a5b032859cdcb0b9b82f04f97443",
      "parents": [
        "b6508c1618e7aab085f191efb41b7b019a94ea38"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:23:53 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:23:53 2010 +0200"
      },
      "message": "cfq-iosched: Do group share accounting in IOPS when slice_idle\u003d0\n\no Implement another CFQ mode where we charge group in terms of number\n  of requests dispatched instead of measuring the time. Measuring in terms\n  of time is not possible when we are driving deeper queue depths and there\n  are requests from multiple cfq queues in the request queue.\n\no This mode currently gets activated if one sets slice_idle\u003d0 and associated\n  disk supports NCQ. Again the idea is that on an NCQ disk with idling disabled\n  most of the queues will dispatch 1 or more requests and then cfq queue\n  expiry happens and we don\u0027t have a way to measure time. So start providing\n  fairness in terms of IOPS.\n\no Currently IOPS mode works only with cfq group scheduling. CFQ is following\n  different scheduling algorithms for queue and group scheduling. These IOPS\n  stats are used only for group scheduling hence in non-croup mode nothing\n  should change.\n\no For CFQ group scheduling one can disable slice idling so that we don\u0027t idle\n  on queue and drive deeper request queue depths (achieving better throughput),\n  at the same time group idle is enabled so one should get service\n  differentiation among groups.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b6508c1618e7aab085f191efb41b7b019a94ea38",
      "tree": "9568819705ebbdc3f4bca2d3d0290fe1a0773085",
      "parents": [
        "75230ff2751e88d594a13a70eae2c146f45e323b"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:23:33 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:23:33 2010 +0200"
      },
      "message": "cfq-iosched: Do not idle if slice_idle\u003d0\n\nDo not idle either on cfq queue or service tree if slice_idle\u003d0. User does\nnot want any queue or service tree idling. Currently even if slice_idle\u003d0,\nwe were waiting for request to finish before expiring the queue and that\ncan lead to lower queue depths.\n\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7b6d91daee5cac6402186ff224c3af39d79f4a0e",
      "tree": "b1518cf0b6c301178e0a320f80610cd5b3aa7625",
      "parents": [
        "33659ebbae262228eef4e0fe990f393d1f0ed941"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "message": "block: unify flags for struct bio and struct request\n\nRemove the current bio flags and reuse the request flags for the bio, too.\nThis allows to more easily trace the type of I/O from the filesystem\ndown to the block driver.  There were two flags in the bio that were\nmissing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I\u0027ve\nrenamed two request flags that had a superflous RW in them.\n\nNote that the flags are in bio.h despite having the REQ_ name - as\nblkdev.h includes bio.h that is the only way to go for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    }
  ],
  "next": "33659ebbae262228eef4e0fe990f393d1f0ed941"
}
