)]}'
{
  "log": [
    {
      "commit": "959d851caa48829eb85cb85aa949fd6b4c5d5bc6",
      "tree": "3ba9c94ec346275fb44c4f0d1cd2537cdff8d811",
      "parents": [
        "a5567932fc926739e29e98487128080f40c61710",
        "48ddbe194623ae089cc0576e60363f2d2e85662a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:30:01 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:55:00 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.5\u0027 of ../cgroup into block/for-3.5/core-merged\n\ncgroup/for-3.5 contains the following changes which blk-cgroup needs\nto proceed with the on-going cleanup.\n\n* Dynamic addition and removal of cftypes to make config/stat file\n  handling modular for policies.\n\n* cgroup removal update to not wait for css references to drain to fix\n  blkcg removal hang caused by cfq caching cfqgs.\n\nPull in cgroup/for-3.5 into block/for-3.5/core.  This causes the\nfollowing conflicts in block/blk-cgroup.c.\n\n* 761b3ef50e \"cgroup: remove cgroup_subsys argument from callbacks\"\n  conflicts with blkiocg_pre_destroy() addition and blkiocg_attach()\n  removal.  Resolved by removing @subsys from all subsys methods.\n\n* 676f7c8f84 \"cgroup: relocate cftype and cgroup_subsys definitions in\n  controllers\" conflicts with -\u003epre_destroy() and -\u003eattach() updates\n  and removal of modular config.  Resolved by dropping forward\n  declarations of the methods and applying updates to the relocated\n  blkio_subsys.\n\n* 4baf6e3325 \"cgroup: convert all non-memcg controllers to the new\n  cftype interface\" builds upon the previous item.  Resolved by adding\n  -\u003ebase_cftypes to the relocated blkio_subsys.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "24acfc34fba0b4f62ef9d5c2616eb0faa802b606",
      "tree": "42d07b0e4ad922b24853fe542cb9ab543aa8174c",
      "parents": [
        "b679281a6410676a41b175c5a185150a1ae42f9d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:24 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: interface update for ioc/icq creation functions\n\nMake the following interface updates to prepare for future ioc related\nchanges.\n\n* create_io_context() returning ioc only works for %current because it\n  doesn\u0027t increment ref on the ioc.  Drop @task parameter from it and\n  always assume %current.\n\n* Make create_io_context_slowpath() return 0 or -errno and rename it\n  to create_task_io_context().\n\n* Make ioc_create_icq() take @ioc as parameter instead of assuming\n  that of %current.  The caller, get_request(), is updated to create\n  ioc explicitly and then pass it into ioc_create_icq().\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": "5efd611351d1a847c72d74fb12ff4bd187c0cb2c",
      "tree": "bac28206d088426ab872eea98155cc100bd8d9b1",
      "parents": [
        "7ee9c5620504906e98451dc9a1945b2b9e892cb8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:12 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: add blkcg_{init|drain|exit}_queue()\n\nCurrently block core calls directly into blk-throttle for init, drain\nand exit.  This patch adds blkcg_{init|drain|exit}_queue() which wraps\nthe blk-throttle functions.  This is to give more control and\nvisiblity to blkcg core layer for proper layering.  Further patches\nwill add logic common to blkcg policies to the functions.\n\nWhile at it, collapse blk_throtl_release() into blk_throtl_exit().\nThere\u0027s no reason to keep them separate.\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": "d732580b4eb31553c63744a47d590f770cafb8f0",
      "tree": "ea4e8e21df1b639603693e6f5fdfc5a620cd8737",
      "parents": [
        "b2fab5acd28ead6f0dd6c3996ba23f0ef1772f15"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:14:58 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:21 2012 +0100"
      },
      "message": "block: implement blk_queue_bypass_start/end()\n\nRename and extend elv_queisce_start/end() to\nblk_queue_bypass_start/end() which are exported and supports nesting\nvia @q-\u003ebypass_depth.  Also add blk_queue_bypass() to test bypass\nstate.\n\nThis will be further extended and used for blkio_group management.\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": "7e4d960993331e92567f0180e45322a93e6780ba",
      "tree": "4d7444035303fc0b545e88afbd894176344fb2a3",
      "parents": [
        "de5bdff7a72acc281219be2b8edeeca1fd81c542",
        "164974a8f2a482f1abcb027c6d1a89dd79b14297"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Mar 01 10:26:41 2012 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Mar 01 10:26:43 2012 +0100"
      },
      "message": "Merge branch \u0027linus\u0027 into sched/core\n\nMerge reason: we\u0027ll queue up dependent patches.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "050c8ea80e3e90019d9e981c6a117ef614e882ed",
      "tree": "e1c53f17a93ba48b9aedb0c1560dfb022733845f",
      "parents": [
        "4e8670e26135d8fbfd5e084fddc1a8ed9f8eb4cb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 08 09:19:38 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 08 09:19:38 2012 +0100"
      },
      "message": "block: separate out blk_rq_merge_ok() and blk_try_merge() from elevator functions\n\nblk_rq_merge_ok() is the elevator-neutral part of merge eligibility\ntest.  blk_try_merge() determines merge direction and expects the\ncaller to have tested elv_rq_merge_ok() previously.\n\nelv_rq_merge_ok() now wraps blk_rq_merge_ok() and then calls\nelv_iosched_allow_merge().  elv_try_merge() is removed and the two\ncallers are updated to call elv_rq_merge_ok() explicitly followed by\nblk_try_merge().  While at it, make rq_merge_ok() functions return\nbool.\n\nThis is to prepare for plug merge update and doesn\u0027t introduce any\nbehavior change.\n\nThis is based on Jens\u0027 patch to skip elevator_allow_merge_fn() from\nplug merge.\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": "39be350127ec60a078edffe5b4915dafba4ba514",
      "tree": "9b1ad6ee75c3b5842434b697b96ccdfbe1a40a2f",
      "parents": [
        "cb297a3e433dbdcf7ad81e0564e7b804c941ff0d"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Jan 26 12:44:34 2012 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 27 13:28:48 2012 +0100"
      },
      "message": "sched, block: Unify cache detection\n\nThe block layer has some code trying to determine if two CPUs share a\ncache, the scheduler has a similar function. Expose the function used\nby the scheduler and make the block layer use it, thereby removing the\nblock layers usage of CONFIG_SCHED* and topology bits.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nLink: http://lkml.kernel.org/r/1327579450.2446.95.camel@twins\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": "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": "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": "22f746e235a5cbee2a6ca9887b1be2aa7d31fe71",
      "tree": "a9786fe9fdb994b5ff69794023e6e3e48e39e0b0",
      "parents": [
        "f8fc877d3c1f10457d0d73d8540a0c51a1fa718a"
      ],
      "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: remove elevator_queue-\u003eops\n\nelevator_queue-\u003eops points to the same ops struct -\u003eelevator_type.ops\nis pointing to.  The only effect of caching it in elevator_queue is\nshorter notation - it doesn\u0027t save any indirect derefence.\n\nRelocate elevator_type-\u003elist which used only during module init/exit\nto the end of the structure, rename elevator_queue-\u003eelevator_type to\n-\u003etype, and replace elevator_queue-\u003eops with elevator_queue-\u003etype.ops.\n\nThis 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": "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": "09ac46c429464c919d04bb737b27edd84d944f02",
      "tree": "0fb3b7344ead06d08dbd77470445821817c439b7",
      "parents": [
        "6e736be7f282fff705db7c34a15313281b372a76"
      ],
      "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: misc updates to blk_get_queue()\n\n* blk_get_queue() is peculiar in that it returns 0 on success and 1 on\n  failure instead of 0 / -errno or boolean.  Update it such that it\n  returns %true on success and %false on failure.\n\n* Make sure the caller checks for the return value.\n\n* Separate out __blk_get_queue() which doesn\u0027t check whether @q is\n  dead and put it in blk.h.  This will be used later.\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": "34f6055c80285e4efb3f602a9119db75239744dc",
      "tree": "eb05185976c1941d196d259c3dfc2a4cfa7469d1",
      "parents": [
        "1ba64edef6051d2ec79bb2fbd3a0c8f0df00ab55"
      ],
      "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: add blk_queue_dead()\n\nThere are a number of QUEUE_FLAG_DEAD tests.  Add blk_queue_dead()\nmacro and use it.\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": "c9a929dde3913780b5c416f4bb9d9ed804f509ce",
      "tree": "1acadc374d8f1faebdf07f08fae0993a38a8fd0d",
      "parents": [
        "bd87b5898a72b1aef6acf3705c61c9f6372adf0c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:42:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:42:16 2011 +0200"
      },
      "message": "block: fix request_queue lifetime handling by making blk_queue_cleanup() properly shutdown\n\nrequest_queue is refcounted but actually depdends on lifetime\nmanagement from the queue owner - on blk_cleanup_queue(), block layer\nexpects that there\u0027s no request passing through request_queue and no\nnew one will.\n\nThis is fundamentally broken.  The queue owner (e.g. SCSI layer)\ndoesn\u0027t have a way to know whether there are other active users before\ncalling blk_cleanup_queue() and other users (e.g. bsg) don\u0027t have any\nguarantee that the queue is and would stay valid while it\u0027s holding a\nreference.\n\nWith delay added in blk_queue_bio() before queue_lock is grabbed, the\nfollowing oops can be easily triggered when a device is removed with\nin-flight IOs.\n\n sd 0:0:1:0: [sdb] Stopping disk\n ata1.01: disabled\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n\n Pid: 648, comm: test_rawio Not tainted 3.1.0-rc3-work+ #56 Bochs Bochs\n RIP: 0010:[\u003cffffffff8137d651\u003e]  [\u003cffffffff8137d651\u003e] elv_rqhash_find+0x61/0x100\n ...\n Process test_rawio (pid: 648, threadinfo ffff880019efa000, task ffff880019ef8a80)\n ...\n Call Trace:\n  [\u003cffffffff8137d774\u003e] elv_merge+0x84/0xe0\n  [\u003cffffffff81385b54\u003e] blk_queue_bio+0xf4/0x400\n  [\u003cffffffff813838ea\u003e] generic_make_request+0xca/0x100\n  [\u003cffffffff81383994\u003e] submit_bio+0x74/0x100\n  [\u003cffffffff811c53ec\u003e] dio_bio_submit+0xbc/0xc0\n  [\u003cffffffff811c610e\u003e] __blockdev_direct_IO+0x92e/0xb40\n  [\u003cffffffff811c39f7\u003e] blkdev_direct_IO+0x57/0x60\n  [\u003cffffffff8113b1c5\u003e] generic_file_aio_read+0x6d5/0x760\n  [\u003cffffffff8118c1ca\u003e] do_sync_read+0xda/0x120\n  [\u003cffffffff8118ce55\u003e] vfs_read+0xc5/0x180\n  [\u003cffffffff8118cfaa\u003e] sys_pread64+0x9a/0xb0\n  [\u003cffffffff81afaf6b\u003e] system_call_fastpath+0x16/0x1b\n\nThis happens because blk_queue_cleanup() destroys the queue and\nelevator whether IOs are in progress or not and DEAD tests are\nsprinkled in the request processing path without proper\nsynchronization.\n\nSimilar problem exists for blk-throtl.  On queue cleanup, blk-throtl\nis shutdown whether it has requests in it or not.  Depending on\ntiming, it either oopses or throttled bios are lost putting tasks\nwhich are waiting for bio completion into eternal D state.\n\nThe way it should work is having the usual clear distinction between\nshutdown and release.  Shutdown drains all currently pending requests,\nmarks the queue dead, and performs partial teardown of the now\nunnecessary part of the queue.  Even after shutdown is complete,\nreference holders are still allowed to issue requests to the queue\nalthough they will be immmediately failed.  The rest of teardown\nhappens on release.\n\nThis patch makes the following changes to make blk_queue_cleanup()\nbehave as proper shutdown.\n\n* QUEUE_FLAG_DEAD is now set while holding both q-\u003eexit_mutex and\n  queue_lock.\n\n* Unsynchronized DEAD check in generic_make_request_checks() removed.\n  This couldn\u0027t make any meaningful difference as the queue could die\n  after the check.\n\n* blk_drain_queue() updated such that it can drain all requests and is\n  now called during cleanup.\n\n* blk_throtl updated such that it checks DEAD on grabbing queue_lock,\n  drains all throttled bios during cleanup and free td when queue is\n  released.\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": "bc16a4f933bc5ed50826b20561e4c3515061998b",
      "tree": "07c0dc65408932176c32df08e7a8adbbc2ca1d07",
      "parents": [
        "e3c78ca524d230bc145e902625e88c392a58ddf3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:33:01 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:33:01 2011 +0200"
      },
      "message": "block: reorganize throtl_get_tg() and blk_throtl_bio()\n\nblk_throtl_bio() and throtl_get_tg() have rather unusual interface.\n\n* throtl_get_tg() returns pointer to a valid tg or ERR_PTR(-ENODEV),\n  and drops queue_lock in the latter case.  Different locking context\n  depending on return value is error-prone and DEAD state is scheduled\n  to be protected by queue_lock anyway.  Move DEAD check inside\n  queue_lock and return valid tg or NULL.\n\n* blk_throtl_bio() indicates return status both with its return value\n  and in/out param **@bio.  The former is used to indicate whether\n  queue is found to be dead during throtl processing.  The latter\n  whether the bio is throttled.\n\n  There\u0027s no point in returning DEAD check result from\n  blk_throtl_bio().  The queue can die after blk_throtl_bio() is\n  finished but before make_request_fn() grabs queue lock.\n\n  Make it take *@bio instead and return boolean result indicating\n  whether the request is throttled or not.\n\nThis patch doesn\u0027t cause any visible functional difference.\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": "e3c78ca524d230bc145e902625e88c392a58ddf3",
      "tree": "833eb544dd4180fd626f60da17788aae7830f4dc",
      "parents": [
        "315fceee81155ef2aeed9316ca72aeea9347db5c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:32:38 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:32:38 2011 +0200"
      },
      "message": "block: reorganize queue draining\n\nReorganize queue draining related code in preparation of queue exit\nchanges.\n\n* Factor out actual draining from elv_quiesce_start() to\n  blk_drain_queue().\n\n* Make elv_quiesce_start/end() responsible for their own locking.\n\n* Replace open-coded ELVSWITCH clearing in elevator_switch() with\n  elv_quiesce_end().\n\nThis patch doesn\u0027t cause any visible functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "bc9fcbf9cb8ec76d340da16fbf48a9a316e14c52",
      "tree": "89376b8811a0d440328dc4f31ef062c811db1cc1",
      "parents": [
        "ece84241b93c4693bfe0a8ec9a043a16d216d0cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:18 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:18 2011 +0200"
      },
      "message": "block: move blk_throtl prototypes to block/blk.h\n\nblk_throtl interface is block internal and there\u0027s no reason to have\nthem in linux/blkdev.h.  Move them to block/blk.h.\n\nThis patch doesn\u0027t introduce any functional change.\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": "4853abaae7e4a2af938115ce9071ef8684fb7af4",
      "tree": "167eb7cb1b48541fa6d0ca5042f7452e2dd9e4de",
      "parents": [
        "bcf30e75b773b60379338768677a1301ef602ff9"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Mon Aug 15 21:37:25 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 15 21:37:25 2011 +0200"
      },
      "message": "block: fix flush machinery for stacking drivers with differring flush flags\n\nCommit ae1b1539622fb46e51b4d13b3f9e5f4c713f86ae, block: reimplement\nFLUSH/FUA to support merge, introduced a performance regression when\nrunning any sort of fsyncing workload using dm-multipath and certain\nstorage (in our case, an HP EVA).  The test I ran was fs_mark, and it\ndropped from ~800 files/sec on ext4 to ~100 files/sec.  It turns out\nthat dm-multipath always advertised flush+fua support, and passed\ncommands on down the stack, where those flags used to get stripped off.\nThe above commit changed that behavior:\n\nstatic inline struct request *__elv_next_request(struct request_queue *q)\n{\n        struct request *rq;\n\n        while (1) {\n-               while (!list_empty(\u0026q-\u003equeue_head)) {\n+               if (!list_empty(\u0026q-\u003equeue_head)) {\n                        rq \u003d list_entry_rq(q-\u003equeue_head.next);\n-                       if (!(rq-\u003ecmd_flags \u0026 (REQ_FLUSH | REQ_FUA)) ||\n-                           (rq-\u003ecmd_flags \u0026 REQ_FLUSH_SEQ))\n-                               return rq;\n-                       rq \u003d blk_do_flush(q, rq);\n-                       if (rq)\n-                               return rq;\n+                       return rq;\n                }\n\nNote that previously, a command would come in here, have\nREQ_FLUSH|REQ_FUA set, and then get handed off to blk_do_flush:\n\nstruct request *blk_do_flush(struct request_queue *q, struct request *rq)\n{\n        unsigned int fflags \u003d q-\u003eflush_flags; /* may change, cache it */\n        bool has_flush \u003d fflags \u0026 REQ_FLUSH, has_fua \u003d fflags \u0026 REQ_FUA;\n        bool do_preflush \u003d has_flush \u0026\u0026 (rq-\u003ecmd_flags \u0026 REQ_FLUSH);\n        bool do_postflush \u003d has_flush \u0026\u0026 !has_fua \u0026\u0026 (rq-\u003ecmd_flags \u0026\n        REQ_FUA);\n        unsigned skip \u003d 0;\n...\n        if (blk_rq_sectors(rq) \u0026\u0026 !do_preflush \u0026\u0026 !do_postflush) {\n                rq-\u003ecmd_flags \u0026\u003d ~REQ_FLUSH;\n\t\tif (!has_fua)\n\t\t\trq-\u003ecmd_flags \u0026\u003d ~REQ_FUA;\n\t        return rq;\n\t}\n\nSo, the flush machinery was bypassed in such cases (q-\u003eflush_flags \u003d\u003d 0\n\u0026\u0026 rq-\u003ecmd_flags \u0026 (REQ_FLUSH|REQ_FUA)).\n\nNow, however, we don\u0027t get into the flush machinery at all.  Instead,\n__elv_next_request just hands a request with flush and fua bits set to\nthe scsi_request_fn, even if the underlying request_queue does not\nsupport flush or fua.\n\nThe agreed upon approach is to fix the flush machinery to allow\nstacking.  While this isn\u0027t used in practice (since there is only one\nrequest-based dm target, and that target will now reflect the flush\nflags of the underlying device), it does future-proof the solution, and\nmake it function as designed.\n\nIn order to make this work, I had to add a field to the struct request,\ninside the flush structure (to store the original req-\u003eend_io).  Shaohua\nhad suggested overloading the union with rb_node and completion_data,\nbut the completion data is used by device mapper and can also be used by\nother drivers.  So, I didn\u0027t see a way around the additional field.\n\nI tested this patch on an HP EVA with both ext4 and xfs, and it recovers\nthe lost performance.  Comments and other testers, as always, are\nappreciated.\n\nCheers,\nJeff\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0eb8e885726a3a93206510092bbc7e39e272f6ef",
      "tree": "d866a663df8d7d0f6a405d7eba45d889c12ba8bb",
      "parents": [
        "af75cd3c67845ebe31d2df9a780889a5ebecef11",
        "0a58e077eb600d1efd7e54ad9926a75a39d7f8ae"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:36:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:36:16 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-2.6.40/core\n\nThis patch merges in a fix that missed 2.6.39 final.\n\nConflicts:\n\tblock/blk.h\n"
    },
    {
      "commit": "698567f3fa790fea37509a54dea855302dd88331",
      "tree": "7a1df976a0eb12cab03e82c18809a30d5482fee4",
      "parents": [
        "d70d0711edd8076ec2ce0ed109106e2df950681b",
        "61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:33:15 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:33:15 2011 +0200"
      },
      "message": "Merge commit \u0027v2.6.39\u0027 into for-2.6.40/core\n\nSince for-2.6.40/core was forked off the 2.6.39 devel tree, we\u0027ve\nhad churn in the core area that makes it difficult to handle\npatches for eg cfq or blk-throttle. Instead of requiring that they\nbe based in older versions with bugs that have been fixed later\nin the rc cycle, merge in 2.6.39 final.\n\nAlso fixes up conflicts in the below files.\n\nConflicts:\n\tdrivers/block/paride/pcd.c\n\tdrivers/cdrom/viocd.c\n\tdrivers/ide/ide-cd.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0a58e077eb600d1efd7e54ad9926a75a39d7f8ae",
      "tree": "eb1b325d28c0aa44b1dba3bdb0b31b662b2a1f7f",
      "parents": [
        "a2b9c1f6208126e6df6c02428c501f8853685812"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Wed May 18 16:20:10 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed May 18 19:30:32 2011 +0200"
      },
      "message": "block: add proper state guards to __elv_next_request\n\nblk_cleanup_queue() calls elevator_exit() and after this, we can\u0027t\ntouch the elevator without oopsing.  __elv_next_request() must check\nfor this state because in the refcounted queue model, we can still\ncall it after blk_cleanup_queue() has been called.\n\nThis was reported as causing an oops attributable to scsi.\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3ac0cc4508709d42ec9aa351086c7d38bfc0660c",
      "tree": "933d5ab6ff9b0763f36e614962abb5bdcc4a348a",
      "parents": [
        "f3876930952390a31c3a7fd68dd621464a36eb80"
      ],
      "author": {
        "name": "shaohua.li@intel.com",
        "email": "shaohua.li@intel.com",
        "time": "Fri May 06 11:34:41 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 11:36:25 2011 -0600"
      },
      "message": "block: hold queue if flush is running for non-queueable flush drive\n\nIn some drives, flush requests are non-queueable. When flush request is\nrunning, normal read/write requests can\u0027t run. If block layer dispatches\nsuch request, driver can\u0027t handle it and requeue it.  Tejun suggested we\ncan hold the queue when flush is running. This can avoid unnecessary\nrequeue.  Also this can improve performance. For example, we have\nrequest flush1, write1, flush 2. flush1 is dispatched, then queue is\nhold, write1 isn\u0027t inserted to queue. After flush1 is finished, flush2\nwill be dispatched. Since disk cache is already clean, flush2 will be\nfinished very soon, so looks like flush2 is folded to flush1.\n\nIn my test, the queue holding completely solves a regression introduced by\ncommit 53d63e6b0dfb95882ec0219ba6bbd50cde423794:\n\n    block: make the flush insertion use the tail of the dispatch list\n\n    It\u0027s not a preempt type request, in fact we have to insert it\n    behind requests that do specify INSERT_FRONT.\n\nwhich causes about 20% regression running a sysbench fileio\nworkload.\n\nStable: 2.6.39 only\n\nCc: stable@kernel.org\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c21e6beba8835d09bb80e34961430b13e60381c5",
      "tree": "cdf6f6d40130b95e641ab5db1de0f6ecc179054a",
      "parents": [
        "5f45c69589b7d2953584e6cd0b31e35dbe960ad0"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:32:46 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:32:46 2011 +0200"
      },
      "message": "block: get rid of QUEUE_FLAG_REENTER\n\nWe are currently using this flag to check whether it\u0027s safe\nto call into -\u003erequest_fn(). If it is set, we punt to kblockd.\nBut we get a lot of false positives and excessive punts to\nkblockd, which hurts performance.\n\nThe only real abuser of this infrastructure is SCSI. So export\nthe async queue run and convert SCSI over to use that. There\u0027s\nroom for improvement in that SCSI need not always use the async\ncall, but this fixes our performance issue and they can fix that\nup in due time.\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": "5e84ea3a9c662dc2d7a48703a4468fad954a3b7f",
      "tree": "3fa0fb26a7c8a970213584104cc2498ef46d60a3",
      "parents": [
        "4345caba340f051e10847924fc078ae18ed6695c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 21 10:14:27 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 21 10:14:27 2011 +0100"
      },
      "message": "block: attempt to merge with existing requests on plug flush\n\nOne of the disadvantages of on-stack plugging is that we potentially\nlose out on merging since all pending IO isn\u0027t always visible to\neverybody. When we flush the on-stack plugs, right now we don\u0027t do\nany checks to see if potential merge candidates could be utilized.\n\nCorrect this by adding a new insert variant, ELEVATOR_INSERT_SORT_MERGE.\nIt works just ELEVATOR_INSERT_SORT, but first checks whether we can\nmerge with an existing request before doing the insertion (if we fail\nmerging).\n\nThis fixes a regression with multiple processes issuing IO that\ncan be merged.\n\nThanks to Shaohua Li \u003cshaohua.li@intel.com\u003e for testing and fixing\nan accounting bug.\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": "ae1b1539622fb46e51b4d13b3f9e5f4c713f86ae",
      "tree": "c5cb540141003a3ec7ebf0b8c6e01653ab6aaef5",
      "parents": [
        "143a87f4c9c629067afea5b6703d66ea88c82f8e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 25 12:43:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jan 25 12:43:54 2011 +0100"
      },
      "message": "block: reimplement FLUSH/FUA to support merge\n\nThe current FLUSH/FUA support has evolved from the implementation\nwhich had to perform queue draining.  As such, sequencing is done\nqueue-wide one flush request after another.  However, with the\ndraining requirement gone, there\u0027s no reason to keep the queue-wide\nsequential approach.\n\nThis patch reimplements FLUSH/FUA support such that each FLUSH/FUA\nrequest is sequenced individually.  The actual FLUSH execution is\ndouble buffered and whenever a request wants to execute one for either\nPRE or POSTFLUSH, it queues on the pending queue.  Once certain\nconditions are met, a flush request is issued and on its completion\nall pending requests proceed to the next sequence.\n\nThis allows arbitrary merging of different type of flushes.  How they\nare merged can be primarily controlled and tuned by adjusting the\nabove said \u0027conditions\u0027 used to determine when to issue the next\nflush.\n\nThis is inspired by Darrick\u0027s patches to merge multiple zero-data\nflushes which helps workloads with highly concurrent fsync requests.\n\n* As flush requests are never put on the IO scheduler, request fields\n  used for flush share space with rq-\u003erb_node.  rq-\u003ecompletion_data is\n  moved out of the union.  This increases the request size by one\n  pointer.\n\n  As rq-\u003eelevator_private* are used only by the iosched too, it is\n  possible to reduce the request size further.  However, to do that,\n  we need to modify request allocation path such that iosched data is\n  not allocated for flush requests.\n\n* FLUSH/FUA processing happens on insertion now instead of dispatch.\n\n- Comments updated as per Vivek and Mike.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \"Darrick J. Wong\" \u003cdjwong@us.ibm.com\u003e\nCc: Shaohua Li \u003cshli@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "414b4ff5eecff0097d09c4a7da12e435fd503692",
      "tree": "cc7cd46c1455712af672b3ff872800b3da895837",
      "parents": [
        "3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 25 12:43:49 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jan 25 12:43:49 2011 +0100"
      },
      "message": "block: add REQ_FLUSH_SEQ\n\nrq \u003d\u003d \u0026q-\u003eflush_rq was used to determine whether a rq is part of a\nflush sequence, which worked because all requests in a flush sequence\nwere sequenced using the single dedicated request.  This is about to\nchange, so introduce REQ_FLUSH_SEQ flag to distinguish flush sequence\nrequests.\n\nThis patch doesn\u0027t cause any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f253b86b4ad1b3220544e75880510fd455ebd23f",
      "tree": "cc2dd76b8ffc8df4356c1e95bd15276169dd335e",
      "parents": [
        "35da7a307c535f9c2929cae277f3df425c9f9b1e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Oct 24 22:06:02 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Oct 24 22:06:02 2010 +0200"
      },
      "message": "Revert \"block: fix accounting bug on cross partition merges\"\n\nThis reverts commit 7681bfeeccff5efa9eb29bf09249a3c400b15327.\n\nConflicts:\n\n\tinclude/linux/genhd.h\n\nIt has numerous issues with the cleanup path and non-elevator\ndevices. Revert it for now so we can come up with a clean\nversion without rushing things.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a2887097f25cd38cadfc11d10769e2b349fb5eca",
      "tree": "cd4adcb305365d6ba9acd2c02d4eb9d0125c6f8d",
      "parents": [
        "8abfc6e7a45eb74e51904bbae676fae008b11366",
        "005a1d15f5a6b2bb4ada80349513effbf22b4588"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block: (46 commits)\n  xen-blkfront: disable barrier/flush write support\n  Added blk-lib.c and blk-barrier.c was renamed to blk-flush.c\n  block: remove BLKDEV_IFL_WAIT\n  aic7xxx_old: removed unused \u0027req\u0027 variable\n  block: remove the BH_Eopnotsupp flag\n  block: remove the BLKDEV_IFL_BARRIER flag\n  block: remove the WRITE_BARRIER flag\n  swap: do not send discards as barriers\n  fat: do not send discards as barriers\n  ext4: do not send discards as barriers\n  jbd2: replace barriers with explicit flush / FUA usage\n  jbd2: Modify ASYNC_COMMIT code to not rely on queue draining on barrier\n  jbd: replace barriers with explicit flush / FUA usage\n  nilfs2: replace barriers with explicit flush / FUA usage\n  reiserfs: replace barriers with explicit flush / FUA usage\n  gfs2: replace barriers with explicit flush / FUA usage\n  btrfs: replace barriers with explicit flush / FUA usage\n  xfs: replace barriers with explicit flush / FUA usage\n  block: pass gfp_mask and flags to sb_issue_discard\n  dm: convey that all flushes are processed as empty\n  ...\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": "fa251f89903d73989e2f63e13d0eaed1e07ce0da",
      "tree": "3f7fe779941e3b6d67754dd7c44a32f48ea47c74",
      "parents": [
        "dd3932eddf428571762596e17b65f5dc92ca361b",
        "cd07202cc8262e1669edff0d97715f3dd9260917"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "message": "Merge branch \u0027v2.6.36-rc8\u0027 into for-2.6.37/barrier\n\nConflicts:\n\tblock/blk-core.c\n\tdrivers/block/loop.c\n\tmm/swapfile.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7681bfeeccff5efa9eb29bf09249a3c400b15327",
      "tree": "8557964a2df96e253dcf1a61734b98dbfbf192d6",
      "parents": [
        "495d2b3883682fcd1c3dee3a45e38fd00154ae25"
      ],
      "author": {
        "name": "Yasuaki Ishimatsu",
        "email": "isimatu.yasuaki@jp.fujitsu.com",
        "time": "Tue Oct 19 09:05:00 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:07:02 2010 +0200"
      },
      "message": "block: fix accounting bug on cross partition merges\n\n/proc/diskstats would display a strange output as follows.\n\n$ cat /proc/diskstats |grep sda\n   8       0 sda 90524 7579 102154 20464 0 0 0 0 0 14096 20089\n   8       1 sda1 19085 1352 21841 4209 0 0 0 0 4294967064 15689 4293424691\n                                                ~~~~~~~~~~\n   8       2 sda2 71252 3624 74891 15950 0 0 0 0 232 23995 1562390\n   8       3 sda3 54 487 2188 92 0 0 0 0 0 88 92\n   8       4 sda4 4 0 8 0 0 0 0 0 0 0 0\n   8       5 sda5 81 2027 2130 138 0 0 0 0 0 87 137\n\nIts reason is the wrong way of accounting hd_struct-\u003ein_flight. When a bio is\nmerged into a request belongs to different partition by ELEVATOR_FRONT_MERGE.\n\nThe detailed root cause is as follows.\n\nAssuming that there are two partition, sda1 and sda2.\n\n1. A request for sda2 is in request_queue. Hence sda1\u0027s hd_struct-\u003ein_flight\n   is 0 and sda2\u0027s one is 1.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n2. A bio belongs to sda1 is issued and is merged into the request mentioned on\n   step1 by ELEVATOR_BACK_MERGE. The first sector of the request is changed\n   from sda2 region to sda1 region. However the two partition\u0027s\n   hd_struct-\u003ein_flight are not changed.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n3. The request is finished and blk_account_io_done() is called. In this case,\n   sda2\u0027s hd_struct-\u003ein_flight, not a sda1\u0027s one, is decremented.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |         -1\n   sda2 |          1\n   ---------------------------\n\nThe patch fixes the problem by caching the partition lookup\ninside the request structure, hence making sure that the increment\nand decrement will always happen on the same partition struct. This\nalso speeds up IO with accounting enabled, since it cuts down on\nthe number of lookups we have to do.\n\nWhen reloading partition tables, quiesce IO to ensure that no\nrequest references to the partition struct exists. When it is safe\nto free the partition table, the IO for that device is restarted\nagain.\n\nSigned-off-by: Yasuaki Ishimatsu \u003cisimatu.yasuaki@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "13f05c8d8e98bbdce89158bfdb2e380940695a88",
      "tree": "055215e7e2b1bdc684ead64daa61b30b35eaa3c5",
      "parents": [
        "c8bf1336824ebd698d37b71763e1c43190f2229a"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri Sep 10 20:50:10 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.home.kernel.dk",
        "time": "Fri Sep 10 20:50:10 2010 +0200"
      },
      "message": "block/scsi: Provide a limit on the number of integrity segments\n\nSome controllers have a hardware limit on the number of protection\ninformation scatter-gather list segments they can handle.\n\nIntroduce a max_integrity_segments limit in the block layer and provide\na new scsi_host_template setting that allows HBA drivers to provide a\nvalue suitable for the hardware.\n\nAdd support for honoring the integrity segment limit when merging both\nbios and requests.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@carl.home.kernel.dk\u003e\n"
    },
    {
      "commit": "4fed947cb311e5aa51781d316cefca836352f6ce",
      "tree": "eada83d5bf503244628e3c190e97e8c7af847e35",
      "parents": [
        "dd4c133f387c48f526022860ad70354637a80f4c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:17 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:37 2010 +0200"
      },
      "message": "block: implement REQ_FLUSH/FUA based interface for FLUSH/FUA requests\n\nNow that the backend conversion is complete, export sequenced\nFLUSH/FUA capability through REQ_FLUSH/FUA flags.  REQ_FLUSH means the\ndevice cache should be flushed before executing the request.  REQ_FUA\nmeans that the data in the request should be on non-volatile media on\ncompletion.\n\nBlock layer will choose the correct way of implementing the semantics\nand execute it.  The request may be passed to the device directly if\nthe device can handle it; otherwise, it will be sequenced using one or\nmore proxy requests.  Devices will never see REQ_FLUSH and/or FUA\nwhich it doesn\u0027t support.\n\nAlso, unlike the original REQ_HARDBARRIER, REQ_FLUSH/FUA requests are\nnever failed with -EOPNOTSUPP.  If the underlying device doesn\u0027t\nsupport FLUSH/FUA, the block layer simply make those noop.  IOW, it no\nlonger distinguishes between writeback cache which doesn\u0027t support\ncache flush and writethrough/no cache.  Devices which have WB cache\nw/o flush are very difficult to come by these days and there\u0027s nothing\nmuch we can do anyway, so it doesn\u0027t make sense to require everyone to\nimplement -EOPNOTSUPP handling.  This will simplify filesystems and\nblock drivers as they can drop -EOPNOTSUPP retry logic for barriers.\n\n* QUEUE_ORDERED_* are removed and QUEUE_FSEQ_* are moved into\n  blk-flush.c.\n\n* REQ_FLUSH w/o data can also be directly passed to drivers without\n  sequencing but some drivers assume that zero length requests don\u0027t\n  have rq-\u003ebio which isn\u0027t true for these requests requiring the use\n  of proxy requests.\n\n* REQ_COMMON_MASK now includes REQ_FLUSH | REQ_FUA so that they are\n  copied from bio to request.\n\n* WRITE_BARRIER is marked deprecated and WRITE_FLUSH, WRITE_FUA and\n  WRITE_FLUSH_FUA are added.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "dd4c133f387c48f526022860ad70354637a80f4c",
      "tree": "7b741150d37d327b69e483468278d9de3a43a4e1",
      "parents": [
        "8839a0e055d9abd6c011d533373a8dd266cad011"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:36 2010 +0200"
      },
      "message": "block: rename barrier/ordered to flush\n\nWith ordering requirements dropped, barrier and ordered are misnomers.\nNow all block layer does is sequencing FLUSH and FUA.  Rename them to\nflush.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "28e7d1845216538303bb95d679d8fd4de50e2f1a",
      "tree": "0ef56dc0d7c894657c4ae71a3e8da6e1164fb933",
      "parents": [
        "dd831006d5be7f74c3fe7aef82380c51c3637960"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:36 2010 +0200"
      },
      "message": "block: drop barrier ordering by queue draining\n\nFilesystems will take all the responsibilities for ordering requests\naround commit writes and will only indicate how the commit writes\nthemselves should be handled by block layers.  This patch drops\nbarrier ordering by queue draining from block layer.  Ordering by\ndraining implementation was somewhat invasive to request handling.\nList of notable changes follow.\n\n* Each queue has 1 bit color which is flipped on each barrier issue.\n  This is used to track whether a given request is issued before the\n  current barrier or not.  REQ_ORDERED_COLOR flag and coloring\n  implementation in __elv_add_request() are removed.\n\n* Requests which shouldn\u0027t be processed yet for draining were stalled\n  by returning -EAGAIN from blk_do_ordered() according to the test\n  result between blk_ordered_req_seq() and blk_blk_ordered_cur_seq().\n  This logic is removed.\n\n* Draining completion logic in elv_completed_request() removed.\n\n* All barrier sequence requests were queued to request queue and then\n  trckled to lower layer according to progress and thus maintaining\n  request orders during requeue was necessary.  This is replaced by\n  queueing the next request in the barrier sequence only after the\n  current one is complete from blk_ordered_complete_seq(), which\n  removes the need for multiple proxy requests in struct request_queue\n  and the request sorting logic in the ELEVATOR_INSERT_REQUEUE path of\n  elv_insert().\n\n* As barriers no longer have ordering constraints, there\u0027s no need to\n  dump the whole elevator onto the dispatch queue on each barrier.\n  Insert barriers at the front instead.\n\n* If other barrier requests come to the front of the dispatch queue\n  while one is already in progress, they are stored in\n  q-\u003epending_barriers and restored to dispatch queue one-by-one after\n  each barrier completion from blk_ordered_complete_seq().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "dd831006d5be7f74c3fe7aef82380c51c3637960",
      "tree": "30a86749f0c4f7980b2982dbde8bbcfff37b08f9",
      "parents": [
        "9cbbdca44ae1a6f512ea1e2be11ced8bbb9d430a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:36 2010 +0200"
      },
      "message": "block: misc cleanups in barrier code\n\nMake the following cleanups in preparation of barrier/flush update.\n\n* blk_do_ordered() declaration is moved from include/linux/blkdev.h to\n  block/blk.h.\n\n* blk_do_ordered() now returns pointer to struct request, with %NULL\n  meaning \"try the next request\" and ERR_PTR(-EAGAIN) \"try again\n  later\".  The third case will be dropped with further changes.\n\n* In the initialization of proxy barrier request, data direction is\n  already set by init_request_from_bio().  Drop unnecessary explicit\n  REQ_WRITE setting and move init_request_from_bio() above REQ_FUA\n  flag setting.\n\n* add_request() is collapsed into __make_request().\n\nThese changes don\u0027t make any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "be14eb619108fa8b7120eb2c42d66d5f623ae10e",
      "tree": "cfc8a496c62a429a97c4bc2c5e638c39374f560b",
      "parents": [
        "edce6820a9fdda85521211cb334a183e34cc455e"
      ],
      "author": {
        "name": "Brian King",
        "email": "brking@linux.vnet.ibm.com",
        "time": "Fri Sep 10 09:03:21 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 09:03:21 2010 +0200"
      },
      "message": "block: Range check cpu in blk_cpu_to_group\n\nWhile testing CPU DLPAR, the following problem was discovered.\nWe were DLPAR removing the first CPU, which in this case was\nlogical CPUs 0-3. CPUs 0-2 were already marked offline and\nwe were in the process of offlining CPU 3. After marking\nthe CPU inactive and offline in cpu_disable, but before the\ncpu was completely idle (cpu_die), we ended up in __make_request\non CPU 3. There we looked at the topology map to see which CPU\nto complete the I/O on and found no CPUs in the cpu_sibling_map.\nThis resulted in the block layer setting the completion cpu\nto be NR_CPUS, which then caused an oops when we tried to\ncomplete the I/O.\n\nFix this by sanity checking the value we return from blk_cpu_to_group\nto be a valid cpu value.\n\nSigned-off-by: Brian King \u003cbrking@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "33659ebbae262228eef4e0fe990f393d1f0ed941",
      "tree": "fcb537f09359c8dad3a6f6e16dc4319562dc42cc",
      "parents": [
        "7e005f79791dcd58436c88ded4a7f5aed1b82147"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "message": "block: remove wrappers for request type/flags\n\nRemove all the trivial wrappers for the cmd_type and cmd_flags fields in\nstruct requests.  This allows much easier grepping for different request\ntypes instead of unwinding through macros.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "80a761fd33cf812f771e212139157bf8f58d4b3f",
      "tree": "21ea67ad749c15f25cb8a9278fe9bd7643c0ba31",
      "parents": [
        "a82afdfcb8c0df09776b6458af6b68fc58b2e87b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jul 03 17:48:17 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 14:33:30 2009 +0200"
      },
      "message": "block: implement mixed merge of different failfast requests\n\nFailfast has characteristics from other attributes.  When issuing,\nexecuting and successuflly completing requests, failfast doesn\u0027t make\nany difference.  It only affects how a request is handled on failure.\nAllowing requests with different failfast settings to be merged cause\nnormal IOs to fail prematurely while not allowing has performance\npenalties as failfast is used for read aheads which are likely to be\nlocated near in-flight or to-be-issued normal IOs.\n\nThis patch introduces the concept of \u0027mixed merge\u0027.  A request is a\nmixed merge if it is merge of segments which require different\nhandling on failure.  Currently the only mixable attributes are\nfailfast ones (or lack thereof).\n\nWhen a bio with different failfast settings is added to an existing\nrequest or requests of different failfast settings are merged, the\nmerged request is marked mixed.  Each bio carries failfast settings\nand the request always tracks failfast state of the first bio.  When\nthe request fails, blk_rq_err_bytes() can be used to determine how\nmany bytes can be safely failed without crossing into an area which\nrequires further retrials.\n\nThis allows request merging regardless of failfast settings while\nkeeping the failure handling correct.\n\nThis patch only implements mixed merge but doesn\u0027t enable it.  The\nnext one will update SCSI to make use of mixed merge.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Niel Lambrechts \u003cniel.lambrechts@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "3c4198e874cde694f5ea1463706873e7907bdb18",
      "tree": "2315e8e86996c98ddfa74059dc61255317bef0eb",
      "parents": [
        "ba396a6c104682dfe5c8b4fbbf5974d5ac9f3687"
      ],
      "author": {
        "name": "Kiyoshi Ueda",
        "email": "k-ueda@ct.jp.nec.com",
        "time": "Wed May 27 14:50:02 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed May 27 14:50:02 2009 +0200"
      },
      "message": "block: fix no diskstat problem\n\nThe commit below in 2.6-block/for-2.6.31 causes no diskstat problem\nbecause the blk_discard_rq() check was added with \u0027\u0026\u0026\u0027.\nIt should be \u0027blk_fs_request() || blk_discard_rq()\u0027.\nThis patch does it and fixes the no diskstat problem.\nPlease review and apply.\n\n------ /proc/diskstat without this patch -------------------------------------\n   8       0 sda 0 0 0 0 0 0 0 0 0 0 0\n------------------------------------------------------------------------------\n\n----- /proc/diskstat with this patch applied ---------------------------------\n   8       0 sda 4186 303 373621 61600 9578 3859 107468 169479 2 89755 231059\n------------------------------------------------------------------------------\n\n--------------------------------------------------------------------------\ncommit c69d48540c201394d08cb4d48b905e001313d9b8\nAuthor: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nDate:   Fri Apr 24 08:12:19 2009 +0200\n\n    block: include discard requests in IO accounting\n\n    We currently don\u0027t do merging on discard requests, but we potentially\n    could. If we do, then we need to include discard requests in the IO\n    accounting, or merging would end up decrementing in_flight IO counters\n    for an IO which never incremented them.\n\n    So enable accounting for discard requests.\n\n\u003csnip\u003e\n\n static inline int blk_do_io_stat(struct request *rq)\n {\n-       return rq-\u003erq_disk \u0026\u0026 blk_rq_io_stat(rq) \u0026\u0026 blk_fs_request(rq);\n+       return rq-\u003erq_disk \u0026\u0026 blk_rq_io_stat(rq) \u0026\u0026 blk_fs_request(rq) \u0026\u0026\n+               blk_discard_rq(rq);\n }\n--------------------------------------------------------------------------\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a411f4bbb89f1f08687b344064d6775bce1e4658",
      "tree": "8898f98285e712f8b5bb99db184bc1a21b1a643c",
      "parents": [
        "c29b70f6ee4f2fa3ef07f55bc9082945861e5391"
      ],
      "author": {
        "name": "Boaz Harrosh",
        "email": "bharrosh@panasas.com",
        "time": "Sun May 17 19:00:01 2009 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue May 19 12:14:56 2009 +0200"
      },
      "message": "block: Un-export blk_rq_append_bio\n\nOSD was the last in-tree user of blk_rq_append_bio(). Now\nthat it is fixed blk_rq_append_bio is un-exported and\nis only used internally by block layer.\n\nSigned-off-by: Boaz Harrosh \u003cbharrosh@panasas.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "9934c8c04561413609d2bc38c6b9f268cba774a4",
      "tree": "30dd8f7be54f9b2e03094de9cd03b6a9ee2909cd",
      "parents": [
        "2343046826a8ca426b07601d9593ee046c298b68"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 08 11:54:16 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 11 09:52:18 2009 +0200"
      },
      "message": "block: implement and enforce request peek/start/fetch\n\nTill now block layer allowed two separate modes of request execution.\nA request is always acquired from the request queue via\nelv_next_request().  After that, drivers are free to either dequeue it\nor process it without dequeueing.  Dequeue allows elv_next_request()\nto return the next request so that multiple requests can be in flight.\n\nExecuting requests without dequeueing has its merits mostly in\nallowing drivers for simpler devices which can\u0027t do sg to deal with\nsegments only without considering request boundary.  However, the\nbenefit this brings is dubious and declining while the cost of the API\nambiguity is increasing.  Segment based drivers are usually for very\nold or limited devices and as converting to dequeueing model isn\u0027t\ndifficult, it doesn\u0027t justify the API overhead it puts on block layer\nand its more modern users.\n\nPrevious patches converted all block low level drivers to dequeueing\nmodel.  This patch completes the API transition by...\n\n* renaming elv_next_request() to blk_peek_request()\n\n* renaming blkdev_dequeue_request() to blk_start_request()\n\n* adding blk_fetch_request() which is combination of peek and start\n\n* disallowing completion of queued (not started) requests\n\n* applying new API to all LLDs\n\nRenamings are for consistency and to break out of tree code so that\nit\u0027s apparent that out of tree drivers need updating.\n\n[ Impact: block request issue API cleanup, no functional change ]\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Mike Miller \u003cmike.miller@hp.com\u003e\nCc: unsik Kim \u003cdonari75@gmail.com\u003e\nCc: Paul Clements \u003cpaul.clements@steeleye.com\u003e\nCc: Tim Waugh \u003ctim@cyberelk.net\u003e\nCc: Geert Uytterhoeven \u003cGeert.Uytterhoeven@sonycom.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Laurent Vivier \u003cLaurent@lvivier.info\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Grant Likely \u003cgrant.likely@secretlab.ca\u003e\nCc: Adrian McMenamin \u003cadrian@mcmen.demon.co.uk\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: Bartlomiej Zolnierkiewicz \u003cbzolnier@gmail.com\u003e\nCc: Borislav Petkov \u003cpetkovbb@googlemail.com\u003e\nCc: Sergei Shtylyov \u003csshtylyov@ru.mvista.com\u003e\nCc: Alex Dubov \u003coakad@yahoo.com\u003e\nCc: Pierre Ossman \u003cdrzeus@drzeus.cx\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Markus Lidel \u003cMarkus.Lidel@shadowconnect.com\u003e\nCc: Stefan Weinhuber \u003cwein@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Pete Zaitcev \u003czaitcev@redhat.com\u003e\nCc: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2e46e8b27aa57c6bd34b3102b40ee4d0144b4fab",
      "tree": "134f560f66c2af277f0f25e5b85f6c1acaddfc06",
      "parents": [
        "9780e2dd8254351f6cbe11304849126b51dbd561"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 07 22:24:41 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 11 09:50:54 2009 +0200"
      },
      "message": "block: drop request-\u003ehard_* and *nr_sectors\n\nstruct request has had a few different ways to represent some\nproperties of a request.  -\u003ehard_* represent block layer\u0027s view of the\nrequest progress (completion cursor) and the ones without the prefix\nare supposed to represent the issue cursor and allowed to be updated\nas necessary by the low level drivers.  The thing is that as block\nlayer supports partial completion, the two cursors really aren\u0027t\nnecessary and only cause confusion.  In addition, manual management of\nrequest detail from low level drivers is cumbersome and error-prone at\nthe very least.\n\nAnother interesting duplicate fields are rq-\u003e[hard_]nr_sectors and\nrq-\u003e{hard_cur|current}_nr_sectors against rq-\u003edata_len and\nrq-\u003ebio-\u003ebi_size.  This is more convoluted than the hard_ case.\n\nrq-\u003e[hard_]nr_sectors are initialized for requests with bio but\nblk_rq_bytes() uses it only for !pc requests.  rq-\u003edata_len is\ninitialized for all request but blk_rq_bytes() uses it only for pc\nrequests.  This causes good amount of confusion throughout block layer\nand its drivers and determining the request length has been a bit of\nblack magic which may or may not work depending on circumstances and\nwhat the specific LLD is actually doing.\n\nrq-\u003e{hard_cur|current}_nr_sectors represent the number of sectors in\nthe contiguous data area at the front.  This is mainly used by drivers\nwhich transfers data by walking request segment-by-segment.  This\nvalue always equals rq-\u003ebio-\u003ebi_size \u003e\u003e 9.  However, data length for\npc requests may not be multiple of 512 bytes and using this field\nbecomes a bit confusing.\n\nIn general, having multiple fields to represent the same property\nleads only to confusion and subtle bugs.  With recent block low level\ndriver cleanups, no driver is accessing or manipulating these\nduplicate fields directly.  Drop all the duplicates.  Now rq-\u003esector\nmeans the current sector, rq-\u003edata_len the current total length and\nrq-\u003ebio-\u003ebi_size the current segment length.  Everything else is\ndefined in terms of these three and available only through accessors.\n\n* blk_recalc_rq_sectors() is collapsed into blk_update_request() and\n  now handles pc and fs requests equally other than rq-\u003esector update.\n  This means that now pc requests can use partial completion too (no\n  in-kernel user yet tho).\n\n* bio_cur_sectors() is replaced with bio_cur_bytes() as block layer\n  now uses byte count as the primary data length.\n\n* blk_rq_pos() is now guranteed to be always correct.  In-block users\n  converted.\n\n* blk_rq_bytes() is now guaranteed to be always valid as is\n  blk_rq_sectors().  In-block users converted.\n\n* blk_rq_sectors() is now guaranteed to equal blk_rq_bytes() \u003e\u003e 9.\n  More convenient one is used.\n\n* blk_rq_bytes() and blk_rq_cur_bytes() are now inlined and take const\n  pointer to request.\n\n[ Impact: API cleanup, single way to represent one property of a request ]\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Boaz Harrosh \u003cbharrosh@panasas.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c69d48540c201394d08cb4d48b905e001313d9b8",
      "tree": "6ad78b44cd7fc5d65a0c3bded49f8cb14f4790a9",
      "parents": [
        "c2553b5844b06910435e40cfab9e6f384840cb97"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 24 08:12:19 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 28 07:37:37 2009 +0200"
      },
      "message": "block: include discard requests in IO accounting\n\nWe currently don\u0027t do merging on discard requests, but we potentially\ncould. If we do, then we need to include discard requests in the IO\naccounting, or merging would end up decrementing in_flight IO counters\nfor an IO which never incremented them.\n\nSo enable accounting for discard requests.\n\nProblem found by Nikanth Karthikesan \u003cknikanth@suse.de\u003e\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c2553b5844b06910435e40cfab9e6f384840cb97",
      "tree": "00a6a1f0c056f19050a8b7c7a1db7b7e0e502062",
      "parents": [
        "731ec497e5888c6792ad62613ae9be97eebcd7ca"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 24 08:10:11 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 28 07:37:37 2009 +0200"
      },
      "message": "block: make blk_do_io_stat() do the full \"is this rq accountable\" checks\n\nWe currently check for file system requests outside of blk_do_io_stat(rq),\nbut we may as well just include it.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "158dbda0068e63c7cce7bd47c123bd1dfa5a902c",
      "tree": "2665f31350ba4f0875c7611c980b0831c22d8c98",
      "parents": [
        "5efccd17ceb0fc43837a331297c2c407969d7201"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Apr 23 11:05:18 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 28 07:37:34 2009 +0200"
      },
      "message": "block: reorganize request fetching functions\n\nImpact: code reorganization\n\nelv_next_request() and elv_dequeue_request() are public block layer\ninterface than actual elevator implementation.  They mostly deal with\nhow requests interact with block layer and low level drivers at the\nbeginning of rqeuest processing whereas __elv_next_request() is the\nactual eleveator request fetching interface.\n\nMove the two functions to blk-core.c.  This prepares for further\ninterface cleanup.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "42dad7647aec49b3ad20dd0cb832b232a6ae514f",
      "tree": "b70d4cb7706f2647e65426e24f078ddf14d6e139",
      "parents": [
        "097102c2d04974bdfcfa16a5f3062d499842139c"
      ],
      "author": {
        "name": "Jerome Marchand",
        "email": "jmarchan@redhat.com",
        "time": "Wed Apr 22 14:01:49 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 24 08:54:21 2009 +0200"
      },
      "message": "block: simplify I/O stat accounting\n\nThis simplifies I/O stat accounting switching code and separates it\ncompletely from I/O scheduler switch code.\n\nRequests are accounted according to the state of their request queue\nat the time of the request allocation. There is no need anymore to\nflush the request queue when switching I/O accounting state.\n\nSigned-off-by: Jerome Marchand \u003cjmarchan@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f600abe2de81628c40effbb3f8eaf5af0d291e57",
      "tree": "db8e27854110b68bac454d8dc79c756800dc4afb",
      "parents": [
        "8f3d8ba20e67991b531e9c0227dcd1f99271a32c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 08 14:22:01 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 15 08:28:09 2009 +0200"
      },
      "message": "block: fix bad spelling of quiesce\n\nCredit goes to Andrew Morton for spotting this one.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "26308eab69aa193f7b3fb50764a64ae14544a39b",
      "tree": "758f6100395a23228d042c3a9d6f7dc1922d7530",
      "parents": [
        "6c7e8cee6a9128eeb7f83c3ad1cb243f77f5cb16"
      ],
      "author": {
        "name": "Jerome Marchand",
        "email": "jmarchan@redhat.com",
        "time": "Fri Mar 27 10:31:51 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 07 08:12:38 2009 +0200"
      },
      "message": "block: fix inconsistency in I/O stat accounting code\n\nThis forces in_flight to be zero when turning off or on the I/O stat\naccounting and stops updating I/O stats in attempt_merge() when\naccounting is turned off.\n\nSigned-off-by: Jerome Marchand \u003cjmarchan@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "6c7e8cee6a9128eeb7f83c3ad1cb243f77f5cb16",
      "tree": "f57ac6ab9e57a4e3317a54d04c39151d3bb942cf",
      "parents": [
        "d508afb437daee7cf07da085b635c44a4ebf9b38"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Mar 27 10:30:47 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 07 08:12:37 2009 +0200"
      },
      "message": "block: elevator quiescing helpers\n\nSimple helper functions to quiesce the request queue. These are\ncurrently only used for switching IO schedulers on-the-fly, but\nwe can use them to properly switch IO accounting on and off as well.\n\nSigned-off-by: Jerome Marchand \u003cjmarchan@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c69fc56de1df5769f2ec69c915c7ad5afe63804c",
      "tree": "18cc8d2ad5d6643edf8b73a3a7d26c55b2125d25",
      "parents": [
        "d95c3578120e5bc4784069439f00ccb1b5f87717"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Mar 13 14:49:46 2009 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Mar 13 14:49:46 2009 +1030"
      },
      "message": "cpumask: use topology_core_cpumask/topology_thread_cpumask instead of cpu_core_map/cpu_sibling_map\n\nImpact: cleanup\n\nThis is presumably what those definitions are for, and while all archs\ndefine cpu_core_map/cpu_sibling map, that\u0027s changing (eg. x86 wants to\nchange it to a pointer).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "fb8ec18c316d869271137c97320dbfd2def56569",
      "tree": "8cf6a84747e10f0cf78a1cb73b1ea69681da0d70",
      "parents": [
        "45c82b5a770be66845687a7d027c8b52946d59af"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Feb 02 08:42:32 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Feb 02 08:42:32 2009 +0100"
      },
      "message": "block: fix oops in blk_queue_io_stat()\n\nSome initial probe requests don\u0027t have disk-\u003equeue mapped yet, so we\ncan\u0027t rely on a non-NULL queue in blk_queue_io_stat(). Wrap it in\nblk_do_io_stat().\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "be4d638c1597580ed2294d899d9f1a2cd10e462c",
      "tree": "2a4800b70c1e2a1249915f74f8e45f62de319457",
      "parents": [
        "9be3eec2c83848a1ca57ebad13c63c95d0df01e2"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Dec 26 22:23:43 2008 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Dec 26 22:23:43 2008 +1030"
      },
      "message": "cpumask: Replace cpu_coregroup_map with cpu_coregroup_mask\n\ncpu_coregroup_map returned a cpumask_t: it\u0027s going away.\n\n(Note, the sched part of this patch won\u0027t apply meaningfully to the\nsched tree, but I\u0027m posting it to show the goal).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\n"
    },
    {
      "commit": "f73e2d13a16cc88c4faa4729967f92bfeec8a142",
      "tree": "6844c0e85b9b4ecdc8f2fc30ce8e7d2152d0c417",
      "parents": [
        "713ada9ba94f2ad874cffd074b83e3dc681ca82f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Oct 17 14:03:08 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Oct 17 14:03:08 2008 +0200"
      },
      "message": "block: remove __generic_unplug_device() from exports\n\nThe only out-of-core user is IDE, and that should be using\nblk_start_queueing() instead.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "581d4e28d9195aa8b2231383dbabc288988d615e",
      "tree": "093bcac9a538ef67edcf91826f7532bdb88e6248",
      "parents": [
        "0a0d96b03a1f3bfd6bc3ea08008699e8e59fccd9"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Sep 14 05:56:33 2008 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:17 2008 +0200"
      },
      "message": "block: add fault injection mechanism for faking request timeouts\n\nOnly works for the generic request timer handling. Allows one to\nsporadically ignore request completions, thus exercising the timeout\nhandling.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "242f9dcb8ba6f68fcd217a119a7648a4f69290e9",
      "tree": "1bfe245ffbc50d204d76665cd8f90d85100f86a1",
      "parents": [
        "608aeef17a91747d6303de4df5e2c2e6899a95e8"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Sep 14 05:55:09 2008 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:13 2008 +0200"
      },
      "message": "block: unify request timeout handling\n\nRight now SCSI and others do their own command timeout handling.\nMove those bits to the block layer.\n\nInstead of having a timer per command, we try to be a bit more clever\nand simply have one per-queue. This avoids the overhead of having to\ntear down and setup a timer for each command, so it will result in a lot\nless timer fiddling.\n\nSigned-off-by: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c7c22e4d5c1fdebfac4dba76de7d0338c2b0d832",
      "tree": "ecc3d2517b3471ccc35d4cb4e3b48d4b57205061",
      "parents": [
        "18887ad910e56066233a07fd3cfb2fa11338b782"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sat Sep 13 20:26:01 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:09 2008 +0200"
      },
      "message": "block: add support for IO CPU affinity\n\nThis patch adds support for controlling the IO completion CPU of\neither all requests on a queue, or on a per-request basis. We export\na sysfs variable (rq_affinity) which, if set, migrates completions\nof requests to the CPU that originally submitted it. A bio helper\n(bio_set_completion_cpu()) is also added, so that queuers can ask\nfor completion on that specific CPU.\n\nIn testing, this has been show to cut the system time by as much\nas 20-40% on synthetic workloads where CPU affinity is desired.\n\nThis requires a little help from the architecture, so it\u0027ll only\nwork as designed for archs that are using the new generic smp\nhelper infrastructure.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "7ba1ba12eeef0aa7113beb16410ef8b7c748e18b",
      "tree": "4629aabe88bf095d58eabd2f451207695bb35b08",
      "parents": [
        "51d654e1d885607a6edd02b337105fa5c28b6d33"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Mon Jun 30 20:04:41 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jul 03 13:21:13 2008 +0200"
      },
      "message": "block: Block layer data integrity support\n\nSome block devices support verifying the integrity of requests by way\nof checksums or other protection information that is submitted along\nwith the I/O.\n\nThis patch implements support for generating and verifying integrity\nmetadata, as well as correctly merging, splitting and cloning bios and\nrequests that have this extra information attached.\n\nSee Documentation/block/data-integrity.txt for more information.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2a4aa30c5f967eb6ae874c67fa6fceeee84815f9",
      "tree": "fddd67e3b3697874e2a19c0e8e194190957b0e1e",
      "parents": [
        "992b5bceee447a32ef2d617730ae0d03c063eedd"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Tue Apr 29 09:54:36 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 29 14:48:55 2008 +0200"
      },
      "message": "block: rename and export rq_init()\n\nThis rename rq_init() blk_rq_init() and export it. Any path that hands\nthe request to the block layer needs to call it to initialize the\nrequest.\n\nThis is a preparation for large command support, which needs to\ninitialize the request in a proper way (that is, just doing a memset()\nwill not work).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ff88972c850ced92b9c4c7f538d85829c741eeb0",
      "tree": "e7cfb7e15db26f35da6e982b934417f3909017a6",
      "parents": [
        "278caf0120a77e4398762357a8cc522d094fe2f2"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Tue Mar 04 11:23:45 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 04 11:28:29 2008 +0100"
      },
      "message": "proper prototype for blk_dev_init()\n\nThis patch adds a proper prototye for blk_dev_init() in block/blk.h\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d6d48196961729b79509dcaeeb0f0fb4fbb47d29",
      "tree": "e80f5cdc7f0d682a46b816f5a489357f7d622d62",
      "parents": [
        "db1d08c646e47f3c7835ecdabb51a906ec311f69"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 14:04:06 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 21:55:12 2008 +0100"
      },
      "message": "block: ll_rw_blk.c split, add blk-merge.c\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "86db1e29772372155db08ff48a9ceb76e11a2ad1",
      "tree": "312f38eb3245873c476c50f816b85610fef9615a",
      "parents": [
        "8324aa91d1e11a1fc25f209687a0b2e6c2ed47d0"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 14:53:40 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 21:55:08 2008 +0100"
      },
      "message": "block: continue ll_rw_blk.c splitup\n\nAdds files for barrier handling, rq execution, io context handling,\nmapping data to requests, and queue settings.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8324aa91d1e11a1fc25f209687a0b2e6c2ed47d0",
      "tree": "c63753df94b741d328840edabde74462591ca0b3",
      "parents": [
        "a168ee84c90b39ece357da127ab388f2f64db19c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 14:51:59 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 21:55:07 2008 +0100"
      },
      "message": "block: split tag and sysfs handling from blk-core.c\n\nSeperates the tag and sysfs handling from ll_rw_blk.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    }
  ]
}
