)]}'
{
  "log": [
    {
      "commit": "e67b77c791ca2778198c9e7088f3266ed2da7a55",
      "tree": "9c65ce6b5679d1f45fa1e4720430ea17b11fa2aa",
      "parents": [
        "834f9f61a525d2f6d3d0c93894e26326c8d3ceed"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Mon Oct 17 12:57:23 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:31 2011 +0200"
      },
      "message": "blk-flush: move the queue kick into\n\nA dm-multipath user reported[1] a problem when trying to boot\na kernel with commit 4853abaae7e4a2af938115ce9071ef8684fb7af4\n(block: fix flush machinery for stacking drivers with differring\nflush flags) applied.  It turns out that an empty flush request\ncan be sent into blk_insert_flush.  When the BUG_ON was fixed\nto allow for this, I/O on the underlying device would stall.  The\nreason is that blk_insert_cloned_request does not kick the queue.\nIn the aforementioned commit, I had added a special case to\nkick the queue if data was sent down but the queue flags did\nnot require a flush.  A better solution is to push the queue\nkick up into blk_insert_cloned_request.\n\nThis patch, along with a follow-on which fixes the BUG_ON, fixes\nthe issue reported.\n\n[1] http://www.redhat.com/archives/dm-devel/2011-September/msg00154.html\n\nReported-by: Christophe Saout \u003cchristophe@saout.de\u003e\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n\nStable note: 3.1\nCc: stable@vger.kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "834f9f61a525d2f6d3d0c93894e26326c8d3ceed",
      "tree": "73e973ad0c01ce4ac0317f089c9cbb3707186834",
      "parents": [
        "456be1484ffc72a24bdb4200b5847c4fa90139d9"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Mon Oct 17 12:57:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:30 2011 +0200"
      },
      "message": "blk-flush: fix invalid BUG_ON in blk_insert_flush\n\nA user reported a regression due to commit\n4853abaae7e4a2af938115ce9071ef8684fb7af4 (block: fix flush\nmachinery for stacking drivers with differring flush flags).\nPart of the problem is that blk_insert_flush required a\nsingle bio be attached to the request.  In reality, having\nno attached bio is also a valid case, as can be observed with\nan empty flush.\n\n[1] http://www.redhat.com/archives/dm-devel/2011-September/msg00154.html\n\nReported-by: Christophe Saout \u003cchristophe@saout.de\u003e\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n\nStable note: 3.1\nCc: stable@vger.kernel.org\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": "fa1bf42ff9296ac4cf211b0a1b450a6071d26a95",
      "tree": "0c7f43ca005c70022e64abb8b8d0b0d549b73959",
      "parents": [
        "4931402a9dd00b2997e95bfbb89409b2a6dbb383"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Tue Aug 09 20:32:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Aug 09 20:32:09 2011 +0200"
      },
      "message": "allow blk_flush_policy to return REQ_FSEQ_DATA independent of *FLUSH\n\nblk_insert_flush has the following check:\n\n\t/*\n\t * If there\u0027s data but flush is not necessary, the request can be\n\t * processed directly without going through flush machinery.  Queue\n\t * for normal execution.\n\t */\n\tif ((policy \u0026 REQ_FSEQ_DATA) \u0026\u0026\n\t    !(policy \u0026 (REQ_FSEQ_PREFLUSH | REQ_FSEQ_POSTFLUSH))) {\n\t\tlist_add_tail(\u0026rq-\u003equeuelist, \u0026q-\u003equeue_head);\n\t\treturn;\n\t}\n\nHowever, blk_flush_policy will not return with policy set to only\nREQ_FSEQ_DATA:\n\nstatic unsigned int blk_flush_policy(unsigned int fflags, struct request *rq)\n{\n\tunsigned int policy \u003d 0;\n\n\tif (fflags \u0026 REQ_FLUSH) {\n\t\tif (rq-\u003ecmd_flags \u0026 REQ_FLUSH)\n\t\t\tpolicy |\u003d REQ_FSEQ_PREFLUSH;\n\t\tif (blk_rq_sectors(rq))\n\t\t\tpolicy |\u003d REQ_FSEQ_DATA;\n\t\tif (!(fflags \u0026 REQ_FUA) \u0026\u0026 (rq-\u003ecmd_flags \u0026 REQ_FUA))\n\t\t\tpolicy |\u003d REQ_FSEQ_POSTFLUSH;\n\t}\n\treturn policy;\n}\n\nNotice that REQ_FSEQ_DATA is only set if REQ_FLUSH is set.  Fix this\nmismatch by moving the setting of REQ_FSEQ_DATA outside of the REQ_FLUSH\ncheck.\n\nTejun notes:\n\n  Hmmm... yes, this can become a correctness issue if (and only if)\n  blk_queue_flush() is called to change q-\u003eflush_flags while requests\n  are in-flight; otherwise, requests wouldn\u0027t reach the function at all.\n  Also, I think it would be a generally good idea to always set\n  FSEQ_DATA if the request has data.\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": "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": "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": "53d63e6b0dfb95882ec0219ba6bbd50cde423794",
      "tree": "46fe9518a681943b0daccf39267d588ff03717f5",
      "parents": [
        "b710a480554f2be682bac3cb59b0e085ba3d644b"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 30 13:27:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "block: make the flush insertion use the tail of the dispatch list\n\nIt\u0027s not a preempt type request, in fact we have to insert it\nbehind requests that do specify INSERT_FRONT.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b710a480554f2be682bac3cb59b0e085ba3d644b",
      "tree": "bd1b9d5080bca2b35c861ddbc98d4116445bebfb",
      "parents": [
        "8182924bc5850281985d73c312876746acd390b5"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 30 09:52:30 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "block: get rid of elv_insert() interface\n\nMerge it with __elv_add_request(), it\u0027s pretty pointless to\nhave a function with only two callers. The main interface\nis elv_add_request()/__elv_add_request().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "73c101011926c5832e6e141682180c4debe2cf45",
      "tree": "b8eeb521a7833cb198d6f39d5a931d820e2a663f",
      "parents": [
        "a488e74976bf0a9bccecdd094378394942dacef1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 08 13:19:51 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:45:54 2011 +0100"
      },
      "message": "block: initial patch for on-stack per-task plugging\n\nThis patch adds support for creating a queuing context outside\nof the queue itself. This enables us to batch up pieces of IO\nbefore grabbing the block device queue lock and submitting them to\nthe IO scheduler.\n\nThe context is created on the stack of the process and assigned in\nthe task structure, so that we can auto-unplug it if we hit a schedule\nevent.\n\nThe current queue plugging happens implicitly if IO is submitted to\nan empty device, yet callers have to remember to unplug that IO when\nthey are going to wait for it. This is an ugly API and has caused bugs\nin the past. Additionally, it requires hacks in the vm (-\u003esync_page()\ncallback) to handle that logic. By switching to an explicit plugging\nscheme we make the API a lot nicer and can get rid of the -\u003esync_page()\nhack in the vm.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e83a46bbb1d4c03defd733a64b727632a40059ad",
      "tree": "c4bc4822b2d3af1bf38095f531adc0a2aac054a5",
      "parents": [
        "da527770007fce8e4541947d47918248286da875",
        "fd51469fb68b987032e46297e0a4fe9020063c20"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "message": "Merge branch \u0027for-linus\u0027 of ../linux-2.6-block into block-for-2.6.39/core\n\nThis merge creates two set of conflicts.  One is simple context\nconflicts caused by removal of throtl_scheduled_delayed_work() in\nfor-linus and removal of throtl_shutdown_timer_wq() in\nfor-2.6.39/core.\n\nThe other is caused by commit 255bb490c8 (block: blk-flush shouldn\u0027t\ncall directly into q-\u003erequest_fn() __blk_run_queue()) in for-linus\ncrashing with FLUSH reimplementation in for-2.6.39/core.  The conflict\nisn\u0027t trivial but the resolution is straight-forward.\n\n* __blk_run_queue() calls in flush_end_io() and flush_data_end_io()\n  should be called with @force_kblockd set to %true.\n\n* elv_insert() in blk_kick_flush() should use\n  %ELEVATOR_INSERT_REQUEUE.\n\nBoth changes are to avoid invoking -\u003erequest_fn() directly from\nrequest completion path and closely match the changes in the commit\n255bb490c8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "255bb490c8c27eed484d538efe6ef6a7473bd3f6",
      "tree": "630289b9de253a1f0575f29d2de019494016ff79",
      "parents": [
        "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:06 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:06 2011 -0500"
      },
      "message": "block: blk-flush shouldn\u0027t call directly into q-\u003erequest_fn() __blk_run_queue()\n\nblk-flush decomposes a flush into sequence of multiple requests.  On\ncompletion of a request, the next one is queued; however, block layer\nmust not implicitly call into q-\u003erequest_fn() directly from completion\npath.  This makes the queue behave unexpectedly when seen from the\ndrivers and violates the assumption that q-\u003erequest_fn() is called\nwith process context + queue_lock.\n\nThis patch makes blk-flush the following two changes to make sure\nq-\u003erequest_fn() is not called directly from request completion path.\n\n- blk_flush_complete_seq_end_io() now asks __blk_run_queue() to always\n  use kblockd instead of calling directly into q-\u003erequest_fn().\n\n- queue_next_fseq() uses ELEVATOR_INSERT_REQUEUE instead of\n  ELEVATOR_INSERT_FRONT so that elv_insert() doesn\u0027t try to unplug the\n  request queue directly.\n\nReported by Jan in the following threads.\n\n http://thread.gmane.org/gmane.linux.ide/48778\n http://thread.gmane.org/gmane.linux.ide/48786\n\nstable: applicable to v2.6.37.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76",
      "tree": "c8071cf8cc1aef9e776697b72aaca5a22a47c3d7",
      "parents": [
        "291d24f6d9e7bbef81454fade8a44720665c7302"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "message": "block: add @force_kblockd to __blk_run_queue()\n\n__blk_run_queue() automatically either calls q-\u003erequest_fn() directly\nor schedules kblockd depending on whether the function is recursed.\nblk-flush implementation needs to be able to explicitly choose\nkblockd.  Add @force_kblockd.\n\nAll the current users are converted to specify %false for the\nparameter and this patch doesn\u0027t introduce any behavior change.\n\nstable: This is prerequisite for fixing ide oops caused by the new\n        blk-flush implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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": "dd3932eddf428571762596e17b65f5dc92ca361b",
      "tree": "57cec5ae2f862037f78b7e993323d77955bb6463",
      "parents": [
        "8786fb70ccb36c7cff64680bb80c46d3a09d44db"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Sep 16 20:51:46 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 20:52:58 2010 +0200"
      },
      "message": "block: remove BLKDEV_IFL_WAIT\n\nAll the blkdev_issue_* helpers can only sanely be used for synchronous\ncaller.  To issue cache flushes or barriers asynchronously the caller needs\nto set up a bio by itself with a completion callback to move the asynchronous\nstate machine ahead.  So drop the BLKDEV_IFL_WAIT flag that is always\nspecified when calling blkdev_issue_* and also remove the now unused flags\nargument to blkdev_issue_flush and blkdev_issue_zeroout.  For\nblkdev_issue_discard we need to keep it for the secure discard flag, which\ngains a more descriptive name and loses the bitops vs flag confusion.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d391a2dda2f1c993f094bdb3a8a342c5e0546553",
      "tree": "315b4d8431db05b96d578e2d7183081b91fa4e84",
      "parents": [
        "04ccc65cd1f57aee861708e08cd2272c5a0d088c"
      ],
      "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: use REQ_FLUSH in blkdev_issue_flush()\n\nUpdate blkdev_issue_flush() to use new REQ_FLUSH interface.\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": "09d60c701b64b509f328cac72970eb894f485b9e",
      "tree": "ef5d88b6fe6449395eeceb15988142c6297cefdc",
      "parents": [
        "47f70d5a6ca78c40a1c799d43506efbfed914f7b"
      ],
      "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: make sure FSEQ_DATA request has the same rq_disk as the original\n\nrq-\u003erq_disk and bio-\u003ebi_bdev-\u003ebd_disk may differ if a request has\npassed through remapping drivers.  FSEQ_DATA request incorrectly\nfollowed bio-\u003ebi_bdev-\u003ebd_disk ending up being issued w/ mismatching\nrq_disk.  Make it follow orig_rq-\u003erq_disk.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nTested-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "47f70d5a6ca78c40a1c799d43506efbfed914f7b",
      "tree": "fff5197359b989197eda76dd019746fbba054e88",
      "parents": [
        "337238be1bf52e1242f940fc6fe83fb395e55057"
      ],
      "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: kick queue after sequencing REQ_FLUSH/FUA\n\nWhile completing a request from a REQ_FLUSH/FUA sequence, another\nrequest can be pushed to the request queue.  If a driver tests\nelv_queue_empty() before completing a request and runs the queue again\nonly if the queue wasn\u0027t empty, this may lead to hang.  Please note\nthat most drivers either kick the queue unconditionally or test queue\nemptiness after completing the current request and don\u0027t have this\nproblem.\n\nThis patch removes this possibility by making REQ_FLUSH/FUA sequence\ncode kick the queue if the queue was empty before completing a request\nfrom REQ_FLUSH/FUA sequence.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "337238be1bf52e1242f940fc6fe83fb395e55057",
      "tree": "cb3a81ebb1bb73aaac692f38d7d3e47007e39093",
      "parents": [
        "cde4c406d8fb051c5aafc917643adbb9dbd0abc2"
      ],
      "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: initialize flush request with WRITE_FLUSH instead of REQ_FLUSH\n\ninit_flush_request() only set REQ_FLUSH when initializing flush\nrequests making them READ requests.  Use WRITE_FLUSH instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "cde4c406d8fb051c5aafc917643adbb9dbd0abc2",
      "tree": "554f623851e5b30069e5e0c5706100ed7b82a3bd",
      "parents": [
        "1e87901e189c8f01750d67485009fe3827c691bf"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "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: simplify queue_next_fseq\n\nWe need to call blk_rq_init and elv_insert for all cases in queue_next_fseq,\nso take these calls into common code.  Also move the end_io initialization\nfrom queue_flush into queue_next_fseq and rename queue_flush to\ninit_flush_request now that it\u0027s old name doesn\u0027t apply anymore.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "8839a0e055d9abd6c011d533373a8dd266cad011",
      "tree": "61025bafd53a3a5595579e552d7d354c01e585c2",
      "parents": [
        "28e7d1845216538303bb95d679d8fd4de50e2f1a"
      ],
      "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 blk-barrier.c to blk-flush.c\n\nWithout ordering requirements, barrier and ordering are minomers.\nRename block/blk-barrier.c to block/blk-flush.c.  Rename of symbols\nwill follow.\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": "4913efe456c987057e5d36a3f0a55422a9072cae",
      "tree": "295f04a7214e1933df3301dd42c12ff3f282a22c",
      "parents": [
        "6958f145459ca7ad9715024de97445addacb8510"
      ],
      "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: deprecate barrier and replace blk_queue_ordered() with blk_queue_flush()\n\nBarrier is deemed too heavy and will soon be replaced by FLUSH/FUA\nrequests.  Deprecate barrier.  All REQ_HARDBARRIERs are failed with\n-EOPNOTSUPP and blk_queue_ordered() is replaced with simpler\nblk_queue_flush().\n\nblk_queue_flush() takes combinations of REQ_FLUSH and FUA.  If a\ndevice has write cache and can flush it, it should set REQ_FLUSH.  If\nthe device can handle FUA writes, it should also set REQ_FUA.\n\nAll blk_queue_ordered() users are converted.\n\n* ORDERED_DRAIN is mapped to 0 which is the default value.\n* ORDERED_DRAIN_FLUSH is mapped to REQ_FLUSH.\n* ORDERED_DRAIN_FLUSH_FUA is mapped to REQ_FLUSH | REQ_FUA.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Boaz Harrosh \u003cbharrosh@panasas.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Geert Uytterhoeven \u003cGeert.Uytterhoeven@sonycom.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Pierre Ossman \u003cdrzeus@drzeus.cx\u003e\nCc: Stefan Weinhuber \u003cwein@de.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6958f145459ca7ad9715024de97445addacb8510",
      "tree": "c8c945eb68ceb88bd34647d7bcaedd13a0d753ca",
      "parents": [
        "589d7ed02ade0d06a3510da2e15a7edfdb2ef3d8"
      ],
      "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: kill QUEUE_ORDERED_BY_TAG\n\nNobody is making meaningful use of ORDERED_BY_TAG now and queue\ndraining for barrier requests will be removed soon which will render\nthe advantage of tag ordering moot.  Kill ORDERED_BY_TAG.  The\nfollowing users are affected.\n\n* brd: converted to ORDERED_DRAIN.\n* virtio_blk: ORDERED_TAG path was already marked deprecated.  Removed.\n* xen-blkfront: ORDERED_TAG case dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Chris Wright \u003cchrisw@sous-sol.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "16f2319fd67b169c0b34391d3fa0870fff129891",
      "tree": "986105ef1ea459ad54a28cd19a1585a7e23e850f",
      "parents": [
        "28e18d0188b9e3ab82ebd09d9b1d1c7f8d1822aa"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Fri Jul 09 09:38:25 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:52:41 2010 +0200"
      },
      "message": "block: set up rq-\u003erq_disk properly for flush requests\n\nq-\u003ebar_rq.rq_disk is NULL. Use the rq_disk of the original request\ninstead.\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "28e18d0188b9e3ab82ebd09d9b1d1c7f8d1822aa",
      "tree": "cad96b3566ee8da92003689cdba800f8a4f7ca04",
      "parents": [
        "3b06c21e8462b77186613e70db286cfa8616088b"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Fri Jul 09 09:38:24 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:52:40 2010 +0200"
      },
      "message": "block: set REQ_TYPE_FS on flush requests\n\nthe block layer doesn\u0027t set rq-\u003ecmd_type on flush requests. By\ndefinition, it should be REQ_TYPE_FS (the lower layers build a command\nand interpret the result of it, that is, the block layer doesn\u0027t know\nthe details).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f10d9f617a65905c556c3b37c9b9646ae7d04ed7",
      "tree": "0e1d1a28578e8c1b2115b8486add3b235f7e3619",
      "parents": [
        "2669b19fa4debcdd6a660ace1a124c0900f113e6"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Jul 13 17:50:50 2010 +1000"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:26:29 2010 +0200"
      },
      "message": "blkdev: check for valid request queue before issuing flush\n\nIssuing a blkdev_issue_flush() on an unconfigured loop device causes a panic as\nq-\u003emake_request_fn is not configured. This can occur when trying to mount the\nunconfigured loop device as an XFS filesystem. There are no guards that catch\nthe bio before the request function is called because we don\u0027t add a payload to\nthe bio. Instead, manually check this case as soon as we have a pointer to the\nqueue to flush.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "00fff26539bfe3fad21c164fc4002d9ede056fb0",
      "tree": "4909c8eed03133b1d46f689e465ed1f579b8e282",
      "parents": [
        "afc23068103ccfbf1917eb2a007bc15ab5418cc9"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:40 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:15 2010 +0200"
      },
      "message": "block: remove q-\u003eprepare_flush_fn completely\n\nThis removes q-\u003eprepare_flush_fn completely (changes the\nblk_queue_ordered API).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b6a903151d05e3912ab66b186f74c61851efb88c",
      "tree": "dbf0f8d2da9aba48cac375304a9842e0166628c8",
      "parents": [
        "8749534fe6826596b71bc409c872b047a8e2755b"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:33 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:56 2010 +0200"
      },
      "message": "block: permit PREFLUSH and POSTFLUSH without prepare_flush_fn\n\nThis is preparation for removing q-\u003eprepare_flush_fn.\n\nTemporarily, blk_queue_ordered() permits QUEUE_ORDERED_DO_PREFLUSH and\nQUEUE_ORDERED_DO_POSTFLUSH without prepare_flush_fn.\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8749534fe6826596b71bc409c872b047a8e2755b",
      "tree": "29ceb928f03dfb33d3a03df1c00e4a51d22b55b3",
      "parents": [
        "802447c1c0513a0ea0e29d6bda23b19ac0686654"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Sat Jul 03 17:45:32 2010 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:53 2010 +0200"
      },
      "message": "block: introduce REQ_FLUSH flag\n\nSCSI-ml needs a way to mark a request as flush request in\nq-\u003eprepare_flush_fn because it needs to identify them later (e.g. in\nq-\u003erequest_fn or prep_rq_fn).\n\nqueue_flush sets REQ_HARDBARRIER in rq-\u003ecmd_flags however the block\nlayer also sends normal REQ_TYPE_FS requests with REQ_HARDBARRIER. So\nSCSI-ml can\u0027t use REQ_HARDBARRIER to identify flush requests.\n\nWe could change the block layer to clear REQ_HARDBARRIER bit before\nsending non flush requests to the lower layers. However, intorudcing\nthe new flag looks cleaner (surely easier).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: James Bottomley \u003cJames.Bottomley@suse.de\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Alasdair G Kergon \u003cagk@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7b6d91daee5cac6402186ff224c3af39d79f4a0e",
      "tree": "b1518cf0b6c301178e0a320f80610cd5b3aa7625",
      "parents": [
        "33659ebbae262228eef4e0fe990f393d1f0ed941"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "message": "block: unify flags for struct bio and struct request\n\nRemove the current bio flags and reuse the request flags for the bio, too.\nThis allows to more easily trace the type of I/O from the filesystem\ndown to the block driver.  There were two flags in the bio that were\nmissing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I\u0027ve\nrenamed two request flags that had a superflous RW in them.\n\nNote that the flags are in bio.h despite having the REQ_ name - as\nblkdev.h includes bio.h that is the only way to go for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "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": "f31e7e4022841c43c53b847b86b1bf97a08b2c94",
      "tree": "738821236a4e84f790d597bb2cc04bd812668b6a",
      "parents": [
        "f17e232e9237c231daf9f0f4b177c61218bcb2e4"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Apr 28 17:55:08 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 28 19:47:36 2010 +0200"
      },
      "message": "blkdev: move blkdev_issue helper functions to separate file\n\nMove blkdev_issue_discard from blk-barrier.c because it is\nnot barrier related.\nLater the file will be populated by other helpers.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f17e232e9237c231daf9f0f4b177c61218bcb2e4",
      "tree": "6fae1e48cd6edde825229bfdf9a31ffbce9626e9",
      "parents": [
        "fbd9b09a177a481eda256447c881f014f29034fe"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Apr 28 17:55:07 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 28 19:47:36 2010 +0200"
      },
      "message": "blkdev: allow async blkdev_issue_flush requests\n\nIn some places caller don\u0027t want to wait a request to complete.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "fbd9b09a177a481eda256447c881f014f29034fe",
      "tree": "ef7e213045382f82a1e3e3cf134d196a1045dd7a",
      "parents": [
        "6b4517a7913a09d3259bb1d21c9cb300f12294bd"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Apr 28 17:55:06 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 28 19:47:36 2010 +0200"
      },
      "message": "blkdev: generalize flags for blkdev_issue_fn functions\n\nThe patch just convert all blkdev_issue_xxx function to common\nset of flags. Wait/allocation semantics preserved.\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "e79e95db5cffb2e01170d510686489c40937faa1",
      "tree": "b21b0f4be2edf79f3e68c628c3022cda6a72e949",
      "parents": [
        "81744ee44ab2845c16ffd7d6f762f7b4a49a4750"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue Dec 29 08:53:54 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Dec 29 08:53:54 2009 +0100"
      },
      "message": "block: Honor the gfp_mask for alloc_page() in blkdev_issue_discard()\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "67efc9258010da35b27b3854d0880c7e193004ed",
      "tree": "d98ad032d8c701084539d5673c2d7d7ca5962a3f",
      "parents": [
        "c15227de132f1295f3db6b7df9079956b1020fd8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Sep 30 13:54:20 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 01 21:19:34 2009 +0200"
      },
      "message": "block: allow large discard requests\n\nCurrently we set the bio size to the byte equivalent of the blocks to\nbe trimmed when submitting the initial DISCARD ioctl.  That means it\nis subject to the max_hw_sectors limitation of the HBA which is\nmuch lower than the size of a DISCARD request we can support.\nAdd a separate max_discard_sectors tunable to limit the size for discard\nrequests.\n\nWe limit the max discard request size in bytes to 32bit as that is the\nlimit for bio-\u003ebi_size.  This could be much larger if we had a way to pass\nthat information through the block layer.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c15227de132f1295f3db6b7df9079956b1020fd8",
      "tree": "ad06f119f283cf8a6313681055e8132ba2851ddb",
      "parents": [
        "3bd0f0c763e497c8674b28e3df2732f48683dabd"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Sep 30 13:52:12 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 01 21:19:30 2009 +0200"
      },
      "message": "block: use normal I/O path for discard requests\n\nprepare_discard_fn() was being called in a place where memory allocation\nwas effectively impossible.  This makes it inappropriate for all but\nthe most trivial translations of Linux\u0027s DISCARD operation to the block\ncommand set.  Additionally adding a payload there makes the ownership\nof the bio backing unclear as it\u0027s now allocated by the device driver\nand not the submitter as usual.\n\nIt is replaced with QUEUE_FLAG_DISCARD which is used to indicate whether\nthe queue supports discard operations or not.  blkdev_issue_discard now\nallocates a one-page, sector-length payload which is the right thing\nfor the common ATA and SCSI implementations.\n\nThe mtd implementation of prepare_discard_fn() is replaced with simply\nchecking for the request being a discard.\n\nLargely based on a previous patch from Matthew Wilcox \u003cmatthew@wil.cx\u003e\nwhich did the prepare_discard_fn but not the different payload allocation\nyet.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "746cd1e7e4a555ddaee53b19a46e05c9c61eaf09",
      "tree": "d129194669e0122113a5cc86003a4a7711450284",
      "parents": [
        "3d2257f157c2324acbc0fa0fa54e8626a987edd2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Sat Sep 12 07:35:43 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Sep 14 08:24:53 2009 +0200"
      },
      "message": "block: use blkdev_issue_discard in blk_ioctl_discard\n\nblk_ioctl_discard duplicates large amounts of code from blkdev_issue_discard,\nthe only difference between the two is that blkdev_issue_discard needs to\nsend a barrier discard request and blk_ioctl_discard a non-barrier one,\nand blk_ioctl_discard needs to wait on the request.  To facilitates this\nadd a flags argument to blkdev_issue_discard to control both aspects of the\nbehaviour.  This will be very useful later on for using the waiting\nfuncitonality for other callers.\n\nBased on an earlier patch from Matthew Wilcox \u003cmatthew@wil.cx\u003e.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ae03bf639a5027d27270123f5f6e3ee6a412781d",
      "tree": "d705f41a188ad656b1f47f7952626a9f992e3b8f",
      "parents": [
        "e1defc4ff0cf57aca6c5e3ff99fa503f5943c1f1"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri May 22 17:17:50 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 22 23:22:54 2009 +0200"
      },
      "message": "block: Use accessor functions for queue limits\n\nConvert all external users of queue limits to using wrapper functions\ninstead of poking the request queue variables directly.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "0a7ae2ff0d29bb3b327edff4c8ab67b3834fa811",
      "tree": "88309ac99a39e15b9b23525a00a15b1564957b32",
      "parents": [
        "ac36552a52a6ec8563ac0a109e2a0935673f4abb"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed May 20 08:54:31 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed May 20 08:54:31 2009 +0200"
      },
      "message": "block: change the tag sync vs async restriction logic\n\nMake them fully share the tag space, but disallow async requests using\nthe last any two slots.\n\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": "83096ebf1263b2c1ee5e653ba37d993d02e3eb7b",
      "tree": "2226b71a616ec1cb2d37511c6a09ba9507a1cd69",
      "parents": [
        "5b93629b4509c03ffa87a9316412fedf6f58cb37"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 07 22:24:39 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 11 09:50:54 2009 +0200"
      },
      "message": "block: convert to pos and nr_sectors accessors\n\nWith recent cleanups, there is no place where low level driver\ndirectly manipulates request fields.  This means that the \u0027hard\u0027\nrequest fields always equal the !hard fields.  Convert all\nrq-\u003esectors, nr_sectors and current_nr_sectors references to\naccessors.\n\nWhile at it, drop superflous blk_rq_pos() \u003c 0 test in swim.c.\n\n[ Impact: use pos and nr_sectors accessors ]\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Geert Uytterhoeven \u003cGeert.Uytterhoeven@sonycom.com\u003e\nTested-by: Grant Likely \u003cgrant.likely@secretlab.ca\u003e\nAcked-by: Grant Likely \u003cgrant.likely@secretlab.ca\u003e\nTested-by: Adrian McMenamin \u003cadrian@mcmen.demon.co.uk\u003e\nAcked-by: Adrian McMenamin \u003cadrian@mcmen.demon.co.uk\u003e\nAcked-by: Mike Miller \u003cmike.miller@hp.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Bartlomiej Zolnierkiewicz \u003cbzolnier@gmail.com\u003e\nCc: Borislav Petkov \u003cpetkovbb@googlemail.com\u003e\nCc: Sergei Shtylyov \u003csshtylyov@ru.mvista.com\u003e\nCc: Eric Moore \u003cEric.Moore@lsi.com\u003e\nCc: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nCc: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Pete Zaitcev \u003czaitcev@redhat.com\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: Paul Clements \u003cpaul.clements@steeleye.com\u003e\nCc: Tim Waugh \u003ctim@cyberelk.net\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Alex Dubov \u003coakad@yahoo.com\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Dario Ballabio \u003cballabio_dario@emc.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: unsik Kim \u003cdonari75@gmail.com\u003e\nCc: Laurent Vivier \u003cLaurent@lvivier.info\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5b93629b4509c03ffa87a9316412fedf6f58cb37",
      "tree": "ad5ceda3f718361b8df3057b4f9edcc79aa4cd9d",
      "parents": [
        "c3a4d78c580de4edc9ef0f7c59812fb02ceb037f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 07 22:24:38 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 11 09:50:53 2009 +0200"
      },
      "message": "block: implement blk_rq_pos/[cur_]sectors() and convert obvious ones\n\nImplement accessors - blk_rq_pos(), blk_rq_sectors() and\nblk_rq_cur_sectors() which return rq-\u003ehard_sector, rq-\u003ehard_nr_sectors\nand rq-\u003ehard_cur_sectors respectively and convert direct references of\nthe said fields to the accessors.\n\nThis is in preparation of request data length handling cleanup.\n\nGeert\t: suggested adding const to struct request * parameter to accessors\nSergei\t: spotted error in patch description\n\n[ Impact: cleanup ]\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Geert Uytterhoeven \u003cGeert.Uytterhoeven@sonycom.com\u003e\nAcked-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nTested-by: Grant Likely \u003cgrant.likely@secretlab.ca\u003e\nAcked-by: Grant Likely \u003cgrant.likely@secretlab.ca\u003e\nAckec-by: Sergei Shtylyov \u003csshtylyov@ru.mvista.com\u003e\nCc: Bartlomiej Zolnierkiewicz \u003cbzolnier@gmail.com\u003e\nCc: Borislav Petkov \u003cpetkovbb@googlemail.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "40cbbb781d3eba5d6ac0860db078af490e5c7c6b",
      "tree": "dec374543cf045fc630bccddbb7646c695094b0d",
      "parents": [
        "b243ddcbe9be146172baa544dadecebf156eda0e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Apr 23 11:05:19 2009 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 28 07:37:35 2009 +0200"
      },
      "message": "block: implement and use [__]blk_end_request_all()\n\nThere are many [__]blk_end_request() call sites which call it with\nfull request length and expect full completion.  Many of them ensure\nthat the request actually completes by doing BUG_ON() the return\nvalue, which is awkward and error-prone.\n\nThis patch adds [__]blk_end_request_all() which takes @rq and @error\nand fully completes the request.  BUG_ON() is added to to ensure that\nthis actually happens.\n\nMost conversions are simple but there are a few noteworthy ones.\n\n* cdrom/viocd: viocd_end_request() replaced with direct calls to\n  __blk_end_request_all().\n\n* s390/block/dasd: dasd_end_request() replaced with direct calls to\n  __blk_end_request_all().\n\n* s390/char/tape_block: tapeblock_end_request() replaced with direct\n  calls to blk_end_request_all().\n\n[ Impact: cleanup ]\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: Mike Miller \u003cmike.miller@hp.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Alex Dubov \u003coakad@yahoo.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\n"
    },
    {
      "commit": "15afd1cc7b624e1c94fdf824ec5af611050b150c",
      "tree": "d6c213d9c218fe20d7533a74751f55f4859cc741",
      "parents": [
        "86c824b9434e764d01489688e4e38aee43b93fcf"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@suse.de",
        "time": "Wed Apr 15 10:35:31 2009 +0530"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 15 12:10:12 2009 +0200"
      },
      "message": "block: Remove code handling bio_alloc failure with __GFP_WAIT\n\nRemove code handling bio_alloc failure with __GFP_WAIT.\nGFP_KERNEL implies __GFP_WAIT.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "dbdac9b71dff5d27885f82eb2cfca310861fdf9e",
      "tree": "0df17847e2bf1335d21f98bd486e054c815bec30",
      "parents": [
        "1dfa17f4ab8543d82caf4d36636b93916a18f456"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Jan 13 15:27:32 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Jan 30 12:34:37 2009 +0100"
      },
      "message": "block: Fix documentation for blkdev_issue_flush()\n\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a185eb4bc84155fff35b602ce99602c010de9634",
      "tree": "e052052cbac813166b614325b32584d8bb9beff0",
      "parents": [
        "58eea927d2de43dc6f03d1ba2c46e55854b31540"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 28 13:32:07 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:28:45 2008 +0100"
      },
      "message": "block: fix empty barrier on write-through w/ ordered tag\n\nEmpty barrier on write-through (or no cache) w/ ordered tag has no\ncommand to execute and without any command to execute ordered tag is\nnever issued to the device and the ordering is never achieved.  Force\ndraining for such cases.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "58eea927d2de43dc6f03d1ba2c46e55854b31540",
      "tree": "bb43f43891a3154741bb6a116dc2956342160f15",
      "parents": [
        "8f11b3e99a1136fcbb67316c3260f085299c0bff"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 28 13:32:06 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:28:45 2008 +0100"
      },
      "message": "block: simplify empty barrier implementation\n\nEmpty barrier required special handling in __elv_next_request() to\ncomplete it without letting the low level driver see it.\n\nWith previous changes, barrier code is now flexible enough to skip the\nBAR step using the same barrier sequence selection mechanism.  Drop\nthe special handling and mask off q-\u003eordered from start_ordered().\n\nRemove blk_empty_barrier() test which now has no user.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8f11b3e99a1136fcbb67316c3260f085299c0bff",
      "tree": "bb9b12fe23aceac19e24f674786612d0fcad2142",
      "parents": [
        "f671620e7d895af221bdfeda751d54fa55ed9546"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 28 13:32:05 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:28:45 2008 +0100"
      },
      "message": "block: make barrier completion more robust\n\nBarrier completion had the following assumptions.\n\n* start_ordered() couldn\u0027t finish the whole sequence properly.  If all\n  actions are to be skipped, q-\u003eordseq is set correctly but the actual\n  completion was never triggered thus hanging the barrier request.\n\n* Drain completion in elv_complete_request() assumed that there\u0027s\n  always at least one request in the queue when drain completes.\n\nBoth assumptions are true but these assumptions need to be removed to\nimprove empty barrier implementation.  This patch makes the following\nchanges.\n\n* Make start_ordered() use blk_ordered_complete_seq() to mark skipped\n  steps complete and notify __elv_next_request() that it should fetch\n  the next request if the whole barrier has completed inside\n  start_ordered().\n\n* Make drain completion path in elv_complete_request() check whether\n  the queue is empty.  Empty queue also indicates drain completion.\n\n* While at it, convert 0/1 return from blk_do_ordered() to false/true.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f671620e7d895af221bdfeda751d54fa55ed9546",
      "tree": "beeb843a4a356d94b6b4faec97e078b2a4ad1f09",
      "parents": [
        "a7384677b2f4cd40948fd7ce024ba5e1821444ba"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 28 13:32:04 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:28:45 2008 +0100"
      },
      "message": "block: make every barrier action optional\n\nIn all barrier sequences, the barrier write itself was always assumed\nto be issued and thus didn\u0027t have corresponding control flag.  This\npatch adds QUEUE_ORDERED_DO_BAR and unify action mask handling in\nstart_ordered() such that any barrier action can be skipped.\n\nThis patch doesn\u0027t introduce any visible behavior changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a7384677b2f4cd40948fd7ce024ba5e1821444ba",
      "tree": "679af09dde4d2659bc6a7dcd1d3dc34752899fa6",
      "parents": [
        "313e42999dbc0f234ca5909a236f78f082cb43b1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 28 13:32:03 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:28:44 2008 +0100"
      },
      "message": "block: remove duplicate or unused barrier/discard error paths\n\n* Because barrier mode can be changed dynamically, whether barrier is\n  supported or not can be determined only when actually issuing the\n  barrier and there is no point in checking it earlier.  Drop barrier\n  support check in generic_make_request() and __make_request(), and\n  update comment around the support check in blk_do_ordered().\n\n* There is no reason to check discard support in both\n  generic_make_request() and __make_request().  Drop the check in\n  __make_request().  While at it, move error action block to the end\n  of the function and add unlikely() to q existence test.\n\n* Barrier request, be it empty or not, is never passed to low level\n  driver and thus it\u0027s meaningless to try to copy back req-\u003esector to\n  bio-\u003ebi_sector on error.  In addition, the notion of failed sector\n  doesn\u0027t make any sense for empty barrier to begin with.  Drop the\n  code block from __end_that_request_first().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "313e42999dbc0f234ca5909a236f78f082cb43b1",
      "tree": "023ac251809e3926ebc6b6c2174d67f8c4ac535f",
      "parents": [
        "ba744d5e290055d171c68067259fcc1e2721f542"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 28 13:32:02 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 29 08:28:44 2008 +0100"
      },
      "message": "block: reorganize QUEUE_ORDERED_* constants\n\nSeparate out ordering type (drain,) and action masks (preflush,\npostflush, fua) from visible ordering mode selectors\n(QUEUE_ORDERED_*).  Ordering types are now named QUEUE_ORDERED_BY_*\nwhile action masks are named QUEUE_ORDERED_DO_*.\n\nThis change is necessary to add QUEUE_ORDERED_DO_BAR and make it\noptional to improve empty barrier implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "53a08807c01989c6847bb135d8d43f61c5dfdda5",
      "tree": "e2297de901dc82a0336e6af28b594864792c585d",
      "parents": [
        "bf91db18ac2852a3ff39fe25ff56c5557c0fff78"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 03 12:41:26 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 03 12:41:26 2008 +0100"
      },
      "message": "block: internal dequeue shouldn\u0027t start timer\n\nblkdev_dequeue_request() and elv_dequeue_request() are equivalent and\nboth start the timeout timer.  Barrier code dequeues the original\nbarrier request but doesn\u0027t passes the request itself to lower level\ndriver, only broken down proxy requests; however, as the original\nbarrier code goes through the same dequeue path and timeout timer is\nstarted on it.  If barrier sequence takes long enough, this timer\nexpires but the low level driver has no idea about this request and\noops follows.\n\nTimeout timer shouldn\u0027t have been started on the original barrier\nrequest as it never goes through actual IO.  This patch unexports\nelv_dequeue_request(), which has no external user anyway, and makes it\noperate on elevator proper w/o adding the timer and make\nblkdev_dequeue_request() call elv_dequeue_request() and add timer.\nInternal users which don\u0027t pass the request to driver - barrier code\nand end_that_request_last() - are converted to use\nelv_dequeue_request().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Mike Anderson \u003candmike@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "3e6053d76dcbd92b2f9f4ad5ece9bce83149523e",
      "tree": "0e7ab62872071c39e2475decb769b9715de75376",
      "parents": [
        "4677735f03f5b6b6f2182f457a921855cadfb85b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Thu Sep 11 10:57:55 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:17 2008 +0200"
      },
      "message": "block: adjust blkdev_issue_discard for swap\n\nTwo mods to blkdev_issue_discard(), thinking ahead to its use on swap:\n\n1. Add gfp_mask argument, so swap allocation can use it where GFP_KERNEL\n   might deadlock but GFP_NOIO is safe.\n\n2. Enlarge nr_sects argument from unsigned to sector_t: unsigned long is\n   enough to cover a whole swap area, but sector_t suits any partition.\n\nChange sb_issue_discard()\u0027s nr_blocks to sector_t too; but no need seen\nfor a gfp_mask there, just pass GFP_KERNEL down to blkdev_issue_discard().\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e17fc0a1ccf88f6d4dcb363729f3141b0958c325",
      "tree": "0a7c2dc1c3159c2af14d87c67ca83e158b2c78b5",
      "parents": [
        "d30a2605be9d5132d95944916e8f578fcfe4f976"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "David.Woodhouse@intel.com",
        "time": "Sat Aug 09 16:42:20 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:02 2008 +0200"
      },
      "message": "Allow elevators to sort/merge discard requests\n\nBut blkdev_issue_discard() still emits requests which are interpreted as\nsoft barriers, because naïve callers might otherwise issue subsequent\nwrites to those same sectors, which might cross on the queue (if they\u0027re\nreallocated quickly enough).\n\nCallers still _can_ issue non-barrier discard requests, but they have to\ntake care of queue ordering for themselves.\n\nSigned-off-by: David Woodhouse \u003cDavid.Woodhouse@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2ebca85abcfcbaaf1c0b242e39fc88ad3da90090",
      "tree": "a8fc6fbc0ba4a258b8252625158e1e30dd255fd5",
      "parents": [
        "35ba8f7083e87602b695d6eaca38a6464d5b74db"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Mon Aug 11 17:07:08 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:02 2008 +0200"
      },
      "message": "Use WRITE_BARRIER in blkdev_issue_flush(), not (1\u003c\u003cBIO_RW_BARRIER)\n\nBarriers should be submitted with the WRITE flag set.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: David Woodhouse \u003cDavid.Woodhouse@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "fb2dce862d9f9a68e6b9374579056ec9eca02a63",
      "tree": "888e0fd7248c9329fa1aa3981043a2dc2457d488",
      "parents": [
        "d628eaef310533767ce68664873869c2d7f78f09"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "David.Woodhouse@intel.com",
        "time": "Tue Aug 05 18:01:53 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:01 2008 +0200"
      },
      "message": "Add \u0027discard\u0027 request handling\n\nSome block devices benefit from a hint that they can forget the contents\nof certain sectors. Add basic support for this to the block core, along\nwith a \u0027blkdev_issue_discard()\u0027 helper function which issues such\nrequests.\n\nThe caller doesn\u0027t get to provide an end_io functio, since\nblkdev_issue_discard() will automatically split the request up into\nmultiple bios if appropriate. Neither does the function wait for\ncompletion -- it\u0027s expected that callers won\u0027t care about when, or even\n_if_, the request completes. It\u0027s only a hint to the device anyway. By\ndefinition, the file system doesn\u0027t _care_ about these sectors any more.\n\n[With feedback from OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e and\nJens Axboe \u003cjens.axboe@oracle.com]\n\nSigned-off-by: David Woodhouse \u003cDavid.Woodhouse@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "24c03d47d0481ed7b172b398f6c9b7ca1fafb9fa",
      "tree": "d24b94e09b12a2c16cc0cf49c273af846fcc6f13",
      "parents": [
        "e37d05dad7ff9744efd8ea95a70d389e9a65a6fc"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Thu May 01 04:35:17 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 01 08:04:02 2008 -0700"
      },
      "message": "block: remove remaining __FUNCTION__ occurrences\n\n__FUNCTION__ is gcc specific, use __func__\n\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\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": "6f6a036e6e061563efecb61505fc4cc3ca415f80",
      "tree": "6bbb13cb230ef0a5fd465f47970641febb7125ea",
      "parents": [
        "72ed0bf60ade8d2cc1f58276cb16add0af2c3e25"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Tue Apr 29 09:49:06 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 29 14:48:54 2008 +0200"
      },
      "message": "block/blk-barrier.c:blk_ordered_cur_seq() mustn\u0027t be inline\n\nThis patch fixes the following build error with UML and gcc 4.3:\n\n\u003c--  snip  --\u003e\n\n...\n  CC      block/blk-barrier.o\n/home/bunk/linux/kernel-2.6/git/linux-2.6/block/blk-barrier.c: In function ‘blk_do_ordered’:\n/home/bunk/linux/kernel-2.6/git/linux-2.6/block/blk-barrier.c:57: sorry, unimplemented: inlining failed in call to ‘blk_ordered_cur_seq’: function body not available\n/home/bunk/linux/kernel-2.6/git/linux-2.6/block/blk-barrier.c:252: sorry, unimplemented: called from here\n/home/bunk/linux/kernel-2.6/git/linux-2.6/block/blk-barrier.c:57: sorry, unimplemented: inlining failed in call to ‘blk_ordered_cur_seq’: function body not available\n/home/bunk/linux/kernel-2.6/git/linux-2.6/block/blk-barrier.c:253: sorry, unimplemented: called from here\nmake[2]: *** [block/blk-barrier.o] Error 1\n\n\u003c--  snip  --\u003e\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1afb20f30151dd4160877c827f5b7203f98627fb",
      "tree": "066e99694fbf0396ccd6b2a15e59747a81869f04",
      "parents": [
        "c3270e577c18b3d0e984c3371493205a4807db9d"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Fri Apr 25 12:26:28 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 29 09:50:34 2008 +0200"
      },
      "message": "block: make rq_init() do a full memset()\n\nThis requires moving rq_init() from get_request() to blk_alloc_request().\nThe upside is that we can now require an rq_init() from any path that\nwishes to hand the request to the block layer.\n\nrq_init() will be exported for the code that uses struct request\nwithout blk_get_request.\n\nThis is a preparation for large command support, which needs to\ninitialize struct request in a proper way (that is, just doing a\nmemset() will not work).\n\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cc66b4512cae8df4ed1635483210aabf7690ec27",
      "tree": "8f96be9db22c086efa3751c5c3a80f0ac6007c9f",
      "parents": [
        "56d94a37f63ad1c9da3bc8e903f79d0ee1e80170"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 04 11:47:46 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 04 11:47:46 2008 +0100"
      },
      "message": "block: fix blkdev_issue_flush() not detecting and passing EOPNOTSUPP back\n\nThis is important to eg dm, that tries to decide whether to stop using\nbarriers or not.\n\nTested as working by Anders Henke \u003canders.henke@1und1.de\u003e\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "6728cb0e6343d4068ccec13f07212e6382d3ff33",
      "tree": "5a7826dc91cf2d9cf54e8c24b40aa3c4d892c797",
      "parents": [
        "22b132102f1540dd40f3e41df88796829b685f1a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jan 31 13:03:55 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Feb 01 09:26:33 2008 +0100"
      },
      "message": "block: make core bits checkpatch compliant\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"
    }
  ]
}
