)]}'
{
  "log": [
    {
      "commit": "4de13d7aa8f4d02f4dc99d4609575659f92b3c5a",
      "tree": "3bc9729eabe79c6164cd29a5d605000bc82bf837",
      "parents": [
        "5af43c24ca59a448c9312dd4a4a51d27ec3b9a73",
        "b8d4a5bf6a049303a29a3275f463f09a490b50ea"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 08 10:13:35 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 08 10:13:35 2013 -0700"
      },
      "message": "Merge branch \u0027for-3.10/core\u0027 of git://git.kernel.dk/linux-block\n\nPull block core updates from Jens Axboe:\n\n - Major bit is Kents prep work for immutable bio vecs.\n\n - Stable candidate fix for a scheduling-while-atomic in the queue\n   bypass operation.\n\n - Fix for the hang on exceeded rq-\u003edatalen 32-bit unsigned when merging\n   discard bios.\n\n - Tejuns changes to convert the writeback thread pool to the generic\n   workqueue mechanism.\n\n - Runtime PM framework, SCSI patches exists on top of these in James\u0027\n   tree.\n\n - A few random fixes.\n\n* \u0027for-3.10/core\u0027 of git://git.kernel.dk/linux-block: (40 commits)\n  relay: move remove_buf_file inside relay_close_buf\n  partitions/efi.c: replace useless kzalloc\u0027s by kmalloc\u0027s\n  fs/block_dev.c: fix iov_shorten() criteria in blkdev_aio_read()\n  block: fix max discard sectors limit\n  blkcg: fix \"scheduling while atomic\" in blk_queue_bypass_start\n  Documentation: cfq-iosched: update documentation help for cfq tunables\n  writeback: expose the bdi_wq workqueue\n  writeback: replace custom worker pool implementation with unbound workqueue\n  writeback: remove unused bdi_pending_list\n  aoe: Fix unitialized var usage\n  bio-integrity: Add explicit field for owner of bip_buf\n  block: Add an explicit bio flag for bios that own their bvec\n  block: Add bio_alloc_pages()\n  block: Convert some code to bio_for_each_segment_all()\n  block: Add bio_for_each_segment_all()\n  bounce: Refactor __blk_queue_bounce to not use bi_io_vec\n  raid1: use bio_copy_data()\n  pktcdvd: Use bio_reset() in disabled code to kill bi_idx usage\n  pktcdvd: use bio_copy_data()\n  block: Add bio_copy_data()\n  ...\n"
    },
    {
      "commit": "db2a144bedd58b3dcf19950c2f476c58c9f39d18",
      "tree": "931f1b5a8e6bafe388b317bce02a9fd9af309d38",
      "parents": [
        "a8ca889ed9585894d53fd8919d80cbe8baff09e7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun May 05 21:52:57 2013 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 07 02:16:21 2013 -0400"
      },
      "message": "block_device_operations-\u003erelease() should return void\n\nThe value passed is 0 in all but \"it can never happen\" cases (and those\nonly in a couple of drivers) *and* it would\u0027ve been lost on the way\nout anyway, even if something tried to pass something meaningful.\nJust don\u0027t bother.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "871dd9286e25330c8a581e5dacfa8b1dfe1dd641",
      "tree": "57abfbde42db3d89f628c6317aef46122c2c5e4b",
      "parents": [
        "e5072664f8237cf53b0bd68a51aa1a7bc69061c5"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "JBottomley@Parallels.com",
        "time": "Wed Apr 24 08:52:50 2013 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Apr 24 08:52:50 2013 -0600"
      },
      "message": "block: fix max discard sectors limit\n\nlinux-v3.8-rc1 and later support for plug for blkdev_issue_discard with\ncommit 0cfbcafcae8b7364b5fa96c2b26ccde7a3a296a9\n(block: add plug for blkdev_issue_discard )\n\nFor example,\n1) DISCARD rq-1 with size size 4GB\n2) DISCARD rq-2 with size size 1GB\n\nIf these 2 discard requests get merged, final request size will be 5GB.\n\nIn this case, request\u0027s __data_len field may overflow as it can store\nmax 4GB(unsigned int).\n\nThis issue was observed while doing mkfs.f2fs on 5GB SD card:\nhttps://lkml.org/lkml/2013/4/1/292\n\nInfo: sector size \u003d 512\nInfo: total sectors \u003d 11370496 (in 512bytes)\nInfo: zone aligned segment0 blkaddr: 512\n[  257.789764] blk_update_request: bio idx 0 \u003e\u003d vcnt 0\n\nmkfs process gets stuck in D state and I see the following in the dmesg:\n\n[  257.789733] __end_that: dev mmcblk0: type\u003d1, flags\u003d122c8081\n[  257.789764]   sector 4194304, nr/cnr 2981888/4294959104\n[  257.789764]   bio df3840c0, biotail df3848c0, buffer   (null), len\n1526726656\n[  257.789764] blk_update_request: bio idx 0 \u003e\u003d vcnt 0\n[  257.794921] request botched: dev mmcblk0: type\u003d1, flags\u003d122c8081\n[  257.794921]   sector 4194304, nr/cnr 2981888/4294959104\n[  257.794921]   bio df3840c0, biotail df3848c0, buffer   (null), len\n1526726656\n\nThis patch fixes this issue.\n\nReported-by: Max Filippov \u003cjcmvbkbc@gmail.com\u003e\nSigned-off-by: James Bottomley \u003cJBottomley@Parallels.com\u003e\nSigned-off-by: Namjae Jeon \u003cnamjae.jeon@samsung.com\u003e\nTested-by: Max Filippov \u003cjcmvbkbc@gmail.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6c9546675864f51506af69eca388e5d922942c56",
      "tree": "e689048677a1a066960ffd7ebd8330632476c045",
      "parents": [
        "66311274691ec65972cad3626057fa8d00c146d8"
      ],
      "author": {
        "name": "Lin Ming",
        "email": "ming.m.lin@intel.com",
        "time": "Sat Mar 23 11:42:26 2013 +0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Mar 22 22:22:15 2013 -0600"
      },
      "message": "block: add runtime pm helpers\n\nAdd runtime pm helper functions:\n\nvoid blk_pm_runtime_init(struct request_queue *q, struct device *dev)\n  - Initialization function for drivers to call.\n\nint blk_pre_runtime_suspend(struct request_queue *q)\n  - If any requests are in the queue, mark last busy and return -EBUSY.\n    Otherwise set q-\u003erpm_status to RPM_SUSPENDING and return 0.\n\nvoid blk_post_runtime_suspend(struct request_queue *q, int err)\n  - If the suspend succeeded then set q-\u003erpm_status to RPM_SUSPENDED.\n    Otherwise set it to RPM_ACTIVE and mark last busy.\n\nvoid blk_pre_runtime_resume(struct request_queue *q)\n  - Set q-\u003erpm_status to RPM_RESUMING.\n\nvoid blk_post_runtime_resume(struct request_queue *q, int err)\n  - If the resume succeeded then set q-\u003erpm_status to RPM_ACTIVE\n    and call __blk_run_queue, then mark last busy and autosuspend.\n    Otherwise set q-\u003erpm_status to RPM_SUSPENDED.\n\nThe idea and API is designed by Alan Stern and described here:\nhttp://marc.info/?l\u003dlinux-scsi\u0026m\u003d133727953625963\u0026w\u003d2\n\nSigned-off-by: Lin Ming \u003cming.m.lin@intel.com\u003e\nSigned-off-by: Aaron Lu \u003caaron.lu@intel.com\u003e\nAcked-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "ac9a19745196388ae5d828c0be7a1d6e472101f3",
      "tree": "49c47e1a07241653deb4a4b4e7a91626f586ad05",
      "parents": [
        "422765c2638924da10ff363b5eed77924911bdc7",
        "43114018cb0b253fd03c4ff4d42bcdc43389ac1c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Jan 11 19:53:53 2013 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Jan 11 19:53:53 2013 +0100"
      },
      "message": "Merge branch \u0027blkcg-cfq-hierarchy\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup into for-3.9/core\n\nTejun writes:\n\nHello, Jens.\n\nPlease consider pulling from the following branch to receive cfq blkcg\nhierarchy support.  The branch is based on top of v3.8-rc2.\n\n  git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git blkcg-cfq-hierarchy\n\nThe patchset was reviewd in the following thread.\n\n  http://thread.gmane.org/gmane.linux.kernel.cgroups/5571\n"
    },
    {
      "commit": "422765c2638924da10ff363b5eed77924911bdc7",
      "tree": "76ae39f6f744e45ec023859c2d46fad2aeaf7714",
      "parents": [
        "242d98f077ac0ab80920219769eb095503b93f61"
      ],
      "author": {
        "name": "Jianpeng Ma",
        "email": "majianpeng@gmail.com",
        "time": "Fri Jan 11 14:46:09 2013 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Jan 11 14:46:09 2013 +0100"
      },
      "message": "block: Remove should_sort judgement when flush blk_plug\n\nIn commit 975927b942c932,it add blk_rq_pos to sort rq when flushing.\nAlthough this commit was used for the situation which blk_plug handled\nmulti devices on the same time like md device.\nI think there must be some situations like this but only single\ndevice.\nSo remove the should_sort judgement.\nBecause the parameter should_sort is only for this purpose,it can delete\nshould_sort from blk_plug.\n\nCC: Shaohua Li \u003cshli@kernel.org\u003e\nSigned-off-by: Jianpeng Ma \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "548bc8e1b38e48653a90f48f636f8d253504f8a2",
      "tree": "db4aca3e40185423e465ef5a67f44658ff292443",
      "parents": [
        "16b3de6652c7aef151f38726faf90f0dbc9e9c71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:13 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:13 2013 -0800"
      },
      "message": "block: RCU free request_queue\n\nRCU free request_queue so that blkcg_gq-\u003eq can be dereferenced under\nRCU lock.  This will be used to implement hierarchical stats.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "59771079c18c44e39106f0f30054025acafadb41",
      "tree": "9463781cf1d6f3055bc87840190cc322b59daa67",
      "parents": [
        "752451f01c4567b506bf4343082682dbb8fb30dd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 19 07:18:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 19 07:18:35 2012 -0800"
      },
      "message": "blk: avoid divide-by-zero with zero discard granularity\n\nCommit 8dd2cb7e880d (\"block: discard granularity might not be power of\n2\") changed a couple of \u0027binary and\u0027 operations into modulus operations.\nWhich turned the harmless case of a zero discard_granularity into a\npossible divide-by-zero.\n\nThe code also had a much more subtle bug: it was doing the modulus of a\nvalue in bytes using \u0027sector_t\u0027.  That was always conceptually wrong,\nbut didn\u0027t actually matter back when the code assumed a power-of-two\ngranularity: we only looked at the low bits anyway.\n\nBut with potentially arbitrary sector numbers, using a \u0027sector_t\u0027 to\nexpress bytes is very very wrong: depending on configuration it limits\nthe starting offset of the device to just 32 bits, and any overflow\nwould result in a wrong value if the modulus wasn\u0027t a power-of-two.\n\nSo re-write the code to not only protect against the divide-by-zero, but\nto do the starting sector arithmetic in sectors, and using the proper\ntypes.\n\n[ For any mathematicians out there: it also looks monumentally stupid to\n  do the \u0027modulo granularity\u0027 operation *twice*, never mind having a \"+\n  granularity\" in the second modulus op.\n\n  But that\u0027s the easiest way to avoid negative values or overflow, and\n  it is how the original code was done. ]\n\nReported-by: Ingo Molnar \u003cmingo@kernel.org\u003e\nReported-by: Doug Anderson \u003cdianders@chromium.org\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Shaohua Li \u003cshli@fusionio.com\u003e\nAcked-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8dd2cb7e880d2f77fba53b523c99133ad5054cfd",
      "tree": "ea51e89f8c8bf9ca8e888d68ecf6732a52e8e99d",
      "parents": [
        "75274551c81796b636c5acb0c2597dec7ec2e6c4"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Fri Dec 14 11:15:36 2012 +0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 14 20:46:04 2012 +0100"
      },
      "message": "block: discard granularity might not be power of 2\n\nIn MD raid case, discard granularity might not be power of 2, for example, a\n4-disk raid5 has 3*chunk_size discard granularity. Correct the calculation for\nsuch cases.\n\nReported-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "24faf6f604efe18236bded4303009fc252913bf0",
      "tree": "bc4d35a38c44a37ffd718089729ae59b23d50d99",
      "parents": [
        "704605711ef048a7c6ad2ec599f15d2e0baf86b2"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Wed Nov 28 13:46:45 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Dec 06 14:33:00 2012 +0100"
      },
      "message": "block: Make blk_cleanup_queue() wait until request_fn finished\n\nSome request_fn implementations, e.g. scsi_request_fn(), unlock\nthe queue lock internally. This may result in multiple threads\nexecuting request_fn for the same queue simultaneously. Keep\ntrack of the number of active request_fn calls and make sure that\nblk_cleanup_queue() waits until all active request_fn invocations\nhave finished. A block driver may start cleaning up resources\nneeded by its request_fn as soon as blk_cleanup_queue() finished,\nso blk_cleanup_queue() must wait for all outstanding request_fn\ninvocations to finish.\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nReported-by: Chanho Min \u003cchanho.min@lge.com\u003e\nCc: James Bottomley \u003cJBottomley@Parallels.com\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c246e80d86736312933646896c4157daf511dadc",
      "tree": "183119080e120f5a3e98edf5bb824e940e5b8f18",
      "parents": [
        "807592a4fafba1fea6e98b9cf1fb02b7c38fb24c"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Thu Dec 06 14:32:01 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Dec 06 14:32:01 2012 +0100"
      },
      "message": "block: Avoid that request_fn is invoked on a dead queue\n\nA block driver may start cleaning up resources needed by its\nrequest_fn as soon as blk_cleanup_queue() finished, so request_fn\nmust not be invoked after draining finished. This is important\nwhen blk_run_queue() is invoked without any requests in progress.\nAs an example, if blk_drain_queue() and scsi_run_queue() run in\nparallel, blk_drain_queue() may have finished all requests after\nscsi_run_queue() has taken a SCSI device off the starved list but\nbefore that last function has had a chance to run the queue.\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nCc: James Bottomley \u003cJBottomley@Parallels.com\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Chanho Min \u003cchanho.min@lge.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "3f3299d5c0268d6cc3f47b446e8aca436e4a5651",
      "tree": "5c962e7f6c6f1e8f17b612bb4c144ec610abfd8e",
      "parents": [
        "8fa72d234da9b6b473bbb1f74d533663e4996e6b"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Wed Nov 28 13:42:38 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Dec 06 14:30:58 2012 +0100"
      },
      "message": "block: Rename queue dead flag\n\nQUEUE_FLAG_DEAD is used to indicate that queuing new requests must\nstop. After this flag has been set queue draining starts. However,\nduring the queue draining phase it is still safe to invoke the\nqueue\u0027s request_fn, so QUEUE_FLAG_DYING is a better name for this\nflag.\n\nThis patch has been generated by running the following command\nover the kernel source tree:\n\ngit grep -lEw \u0027blk_queue_dead|QUEUE_FLAG_DEAD\u0027 |\n    xargs sed -i.tmp -e \u0027s/blk_queue_dead/blk_queue_dying/g\u0027      \\\n        -e \u0027s/QUEUE_FLAG_DEAD/QUEUE_FLAG_DYING/g\u0027;                \\\nsed -i.tmp -e \"s/QUEUE_FLAG_DYING$(printf \\\\t)*5/QUEUE_FLAG_DYING$(printf \\\\t)5/g\" \\\n    include/linux/blkdev.h;                                       \\\nsed -i.tmp -e \u0027s/ DEAD/ DYING/g\u0027 -e \u0027s/dead queue/a dying queue/\u0027 \\\n    -e \u0027s/Dead queue/A dying queue/\u0027 block/blk-core.c\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: James Bottomley \u003cJBottomley@Parallels.com\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Chanho Min \u003cchanho.min@lge.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "4363ac7c13a9a4b763c6e8d9fdbfc2468f3b8ca4",
      "tree": "010b05699eb9544b9cdfe5e1b3affdaea80132e7",
      "parents": [
        "f31dc1cd490539e2b62a126bc4dc2495b165d772"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Tue Sep 18 12:19:27 2012 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Sep 20 14:31:45 2012 +0200"
      },
      "message": "block: Implement support for WRITE SAME\n\nThe WRITE SAME command supported on some SCSI devices allows the same\nblock to be efficiently replicated throughout a block range. Only a\nsingle logical block is transferred from the host and the storage device\nwrites the same data to all blocks described by the I/O.\n\nThis patch implements support for WRITE SAME in the block layer. The\nblkdev_issue_write_same() function can be used by filesystems and block\ndrivers to replicate a buffer across a block range. This can be used to\nefficiently initialize software RAID devices, etc.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f31dc1cd490539e2b62a126bc4dc2495b165d772",
      "tree": "e8a917161111266f72a7aea539c9562dc2f2653d",
      "parents": [
        "e2a60da74fc8215c68509a89e9a69c66363153db"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Tue Sep 18 12:19:26 2012 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Sep 20 14:31:41 2012 +0200"
      },
      "message": "block: Consolidate command flag and queue limit checks for merges\n\n - blk_check_merge_flags() verifies that cmd_flags / bi_rw are\n   compatible. This function is called for both req-req and req-bio\n   merging.\n\n - blk_rq_get_max_sectors() and blk_queue_get_max_sectors() can be used\n   to query the maximum sector count for a given request or queue. The\n   calls will return the right value from the queue limits given the\n   type of command (RW, discard, write same, etc.)\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "e2a60da74fc8215c68509a89e9a69c66363153db",
      "tree": "c23dd6540dc211e2b2583c3e950a7f6977e3f1df",
      "parents": [
        "d41570b7469724005eb78448a69289900f911963"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Tue Sep 18 12:19:25 2012 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Sep 20 14:31:38 2012 +0200"
      },
      "message": "block: Clean up special command handling logic\n\nRemove special-casing of non-rw fs style requests (discard). The nomerge\nflags are consolidated in blk_types.h, and rq_mergeable() and\nbio_mergeable() have been modified to use them.\n\nbio_is_rw() is used in place of bio_has_data() a few places. This is\ndone to to distinguish true reads and writes from other fs type requests\nthat carry a payload (e.g. write same).\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "276f0f5d157bb4a816053f4f3a941dbcd4f76556",
      "tree": "96192def39c6cb8dbd6f2ae6b8847aaf20c0dfb4",
      "parents": [
        "389d7b26d9e4f78b17366c23a3aa16b3c5cb3bde"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@fusionio.com",
        "time": "Thu Aug 09 15:20:23 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Aug 09 15:20:23 2012 +0200"
      },
      "message": "block: disable discard request merge temporarily\n\nThe SCSI discard request merge never worked, and looks no solution\nfor in future, let\u0027s disable it temporarily.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "85b9f66a41eb8ee3f1dfc95707412705463cdd97",
      "tree": "fab0a84fef56bb7f16d6adfb9d8bbb6cfa5cd75c",
      "parents": [
        "963ab9e5da95c654bb3ab937cc478de4f7088a96"
      ],
      "author": {
        "name": "Asias He",
        "email": "asias@redhat.com",
        "time": "Thu Aug 02 23:42:04 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Aug 02 23:42:04 2012 +0200"
      },
      "message": "block: Add blk_bio_map_sg() helper\n\nAdd a helper to map a bio to a scatterlist, modelled after\nblk_rq_map_sg.\n\nThis helper is useful for any driver that wants to create\na scatterlist from its -\u003emake_request_fn method.\n\nChanges in v2:\n - Use __blk_segment_map_sg to avoid duplicated code\n - Add cocbook style function comment\n\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Shaohua Li \u003cshli@kernel.org\u003e\nCc: \"Michael S. Tsirkin\" \u003cmst@redhat.com\u003e\nCc: kvm@vger.kernel.org\nCc: linux-kernel@vger.kernel.org\nCc: virtualization@lists.linux-foundation.org\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Asias He \u003casias@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c6e666345e1b79c62ba82339cc7d55a89cb73f88",
      "tree": "9ffc17b7010ba16a18482d5f9057374dae90b669",
      "parents": [
        "f6ff53d3611b564661896be23369b54d84941a0e"
      ],
      "author": {
        "name": "Paolo Bonzini",
        "email": "pbonzini@redhat.com",
        "time": "Thu Aug 02 09:48:50 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Aug 02 09:48:50 2012 +0200"
      },
      "message": "block: split discard into aligned requests\n\nWhen a disk has large discard_granularity and small max_discard_sectors,\ndiscards are not split with optimal alignment.  In the limit case of\ndiscard_granularity \u003d\u003d max_discard_sectors, no request could be aligned\ncorrectly, so in fact you might end up with no discarded logical blocks\nat all.\n\nAnother example that helps showing the condition in the patch is with\ndiscard_granularity \u003d\u003d 64, max_discard_sectors \u003d\u003d 128.  A request that is\nsubmitted for 256 sectors 2..257 will be split in two: 2..129, 130..257.\nHowever, only 2 aligned blocks out of 3 are included in the request;\n128..191 may be left intact and not discarded.  With this patch, the\nfirst request will be truncated to ensure good alignment of what\u0027s left,\nand the split will be 2..127, 128..255, 256..257.  The patch will also\ntake into account the discard_alignment.\n\nAt most one extra request will be introduced, because the first request\nwill be reduced by at most granularity-1 sectors, and granularity\nmust be less than max_discard_sectors.  Subsequent requests will run\non round_down(max_discard_sectors, granularity) sectors, as in the\ncurrent code.\n\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nTested-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "74018dc3063a2c729fc73041c0a9f03aac995920",
      "tree": "03f01bca3a2d9f7cf31785fbe74e9ab76bb0d4cd",
      "parents": [
        "2a7d5559b346574057dce4672d1ed9aaa9d1e685"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 09:08:15 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jul 31 09:08:15 2012 +0200"
      },
      "message": "blk: pass from_schedule to non-request unplug functions.\n\nThis will allow md/raid to know why the unplug was called,\nand will be able to act according - if !from_schedule it\nis safe to perform tasks which could themselves schedule.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9cbb17508808f8a6bdd83354b61e126ac4fa6fed",
      "tree": "bc797d1b5cd829751a333115e6e6d52799fb6df2",
      "parents": [
        "0021b7bc045e4b0b85d8c53614342aaf84ca96a5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 09:08:14 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jul 31 09:08:14 2012 +0200"
      },
      "message": "blk: centralize non-request unplug handling.\n\nBoth md and umem has similar code for getting notified on an\nblk_finish_plug event.\nCentralize this code in block/ and allow each driver to\nprovide its distinctive difference.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a051661ca6d134c18599498b185b667859d4339b",
      "tree": "9d840030874aed9b97a58051bf9568455126e8e8",
      "parents": [
        "5b788ce3e2acac9bf109743b1281d77347cf2101"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 26 15:05:44 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jun 26 18:42:49 2012 -0400"
      },
      "message": "blkcg: implement per-blkg request allocation\n\nCurrently, request_queue has one request_list to allocate requests\nfrom regardless of blkcg of the IO being issued.  When the unified\nrequest pool is used up, cfq proportional IO limits become meaningless\n- whoever grabs the next request being freed wins the race regardless\nof the configured weights.\n\nThis can be easily demonstrated by creating a blkio cgroup w/ very low\nweight, put a program which can issue a lot of random direct IOs there\nand running a sequential IO from a different cgroup.  As soon as the\nrequest pool is used up, the sequential IO bandwidth crashes.\n\nThis patch implements per-blkg request_list.  Each blkg has its own\nrequest_list and any IO allocates its request from the matching blkg\nmaking blkcgs completely isolated in terms of request allocation.\n\n* Root blkcg uses the request_list embedded in each request_queue,\n  which was renamed to @q-\u003eroot_rl from @q-\u003erq.  While making blkcg rl\n  handling a bit harier, this enables avoiding most overhead for root\n  blkcg.\n\n* Queue fullness is properly per request_list but bdi isn\u0027t blkcg\n  aware yet, so congestion state currently just follows the root\n  blkcg.  As writeback isn\u0027t aware of blkcg yet, this works okay for\n  async congestion but readahead may get the wrong signals.  It\u0027s\n  better than blkcg completely collapsing with shared request_list but\n  needs to be improved with future changes.\n\n* After this change, each block cgroup gets a full request pool making\n  resource consumption of each cgroup higher.  This makes allowing\n  non-root users to create cgroups less desirable; however, note that\n  allowing non-root users to directly manage cgroups is already\n  severely broken regardless of this patch - each block cgroup\n  consumes kernel memory and skews IO weight (IO weights are not\n  hierarchical).\n\nv2: queue-sysfs.txt updated and patch description udpated as suggested\n    by Vivek.\n\nv3: blk_get_rl() wasn\u0027t checking error return from\n    blkg_lookup_create() and may cause oops on lookup failure.  Fix it\n    by falling back to root_rl on blkg lookup failures.  This problem\n    was spotted by Rakesh Iyer \u003crni@google.com\u003e.\n\nv4: Updated to accomodate 458f27a982 \"block: Avoid missed wakeup in\n    request waitqueue\".  blk_drain_queue() now wakes up waiters on all\n    blkg-\u003erl on the target queue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5b788ce3e2acac9bf109743b1281d77347cf2101",
      "tree": "907477e42d27bec9a2060fcc709402b7636390c9",
      "parents": [
        "8a5ecdd42862bf87ceab00bf2a15d7eabf58c02d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 04 20:40:59 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jun 25 11:53:52 2012 +0200"
      },
      "message": "block: prepare for multiple request_lists\n\nRequest allocation is about to be made per-blkg meaning that there\u0027ll\nbe multiple request lists.\n\n* Make queue full state per request_list.  blk_*queue_full() functions\n  are renamed to blk_*rl_full() and takes @rl instead of @q.\n\n* Rename blk_init_free_list() to blk_init_rl() and make it take @rl\n  instead of @q.  Also add @gfp_mask parameter.\n\n* Add blk_exit_rl() instead of destroying rl directly from\n  blk_release_queue().\n\n* Add request_list-\u003eq and make request alloc/free functions -\n  blk_free_request(), [__]freed_request(), __get_request() - take @rl\n  instead of @q.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "8a5ecdd42862bf87ceab00bf2a15d7eabf58c02d",
      "tree": "36ff209f0655c5da9cfb7c5c6f6e9b9786841201",
      "parents": [
        "b1208b56f31408f7d8381ff5d08e970aa5ee761c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 04 20:40:58 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jun 25 11:53:51 2012 +0200"
      },
      "message": "block: add q-\u003enr_rqs[] and move q-\u003erq.elvpriv to q-\u003enr_rqs_elvpriv\n\nAdd q-\u003enr_rqs[] which currently behaves the same as q-\u003erq.count[] and\nmove q-\u003erq.elvpriv to q-\u003enr_rqs_elvpriv.  blk_drain_queue() is updated\nto use q-\u003enr_rqs[] instead of q-\u003erq.count[].\n\nThese counters separates queue-wide request statistics from the\nrequest list and allow implementation of per-queue request allocation.\n\nWhile at it, properly indent fields of struct request_list.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "76aaa5101fffaef12b45b4c01ed0d0528f23dedf",
      "tree": "f50fb22da33901b7acd7d63350b781238fd242c2",
      "parents": [
        "5e5cfac0c622d42eff4fa308e91b3c9c1884b4f0"
      ],
      "author": {
        "name": "Asias He",
        "email": "asias@redhat.com",
        "time": "Thu Jun 14 09:04:07 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Jun 15 08:46:23 2012 +0200"
      },
      "message": "block: Drop dead function blk_abort_queue()\n\nThis function was only used by btrfs code in btrfs_abort_devices()\n(seems in a wrong way).\n\nIt was removed in commit d07eb9117050c9ed3f78296ebcc06128b52693be,\nSo, Let\u0027s remove the dead code to avoid any confusion.\n\nChanges in v2: update commit log, btrfs_abort_devices() was removed\nalready.\n\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: linux-kernel@vger.kernel.org\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: linux-btrfs@vger.kernel.org\nCc: David Sterba \u003cdave@jikos.cz\u003e\nSigned-off-by: Asias He \u003casias@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "0d167518e045cc8bb63f0a8a0a85ad4fa4e0044f",
      "tree": "101a9b5d425d79f663e4f25f1e90b7a8cc6604f1",
      "parents": [
        "2f83766d4b18774c856329a8fca4c9338dfeda39",
        "ff26eaadf4d914e397872b99885d45756104e9ae"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 30 08:52:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 30 08:52:42 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.5/core\u0027 of git://git.kernel.dk/linux-block\n\nMerge block/IO core bits from Jens Axboe:\n \"This is a bit bigger on the core side than usual, but that is purely\n  because we decided to hold off on parts of Tejun\u0027s submission on 3.4\n  to give it a bit more time to simmer.  As a consequence, it\u0027s seen a\n  long cycle in for-next.\n\n  It contains:\n\n   - Bug fix from Dan, wrong locking type.\n   - Relax splice gifting restriction from Eric.\n   - A ton of updates from Tejun, primarily for blkcg.  This improves\n     the code a lot, making the API nicer and cleaner, and also includes\n     fixes for how we handle and tie policies and re-activate on\n     switches.  The changes also include generic bug fixes.\n   - A simple fix from Vivek, along with a fix for doing proper delayed\n     allocation of the blkcg stats.\"\n\nFix up annoying conflict just due to different merge resolution in\nDocumentation/feature-removal-schedule.txt\n\n* \u0027for-3.5/core\u0027 of git://git.kernel.dk/linux-block: (92 commits)\n  blkcg: tg_stats_alloc_lock is an irq lock\n  vmsplice: relax alignement requirements for SPLICE_F_GIFT\n  blkcg: use radix tree to index blkgs from blkcg\n  blkcg: fix blkcg-\u003ecss ref leak in __blkg_lookup_create()\n  block: fix elvpriv allocation failure handling\n  block: collapse blk_alloc_request() into get_request()\n  blkcg: collapse blkcg_policy_ops into blkcg_policy\n  blkcg: embed struct blkg_policy_data in policy specific data\n  blkcg: mass rename of blkcg API\n  blkcg: style cleanups for blk-cgroup.h\n  blkcg: remove blkio_group-\u003epath[]\n  blkcg: blkg_rwstat_read() was missing inline\n  blkcg: shoot down blkgs if all policies are deactivated\n  blkcg: drop stuff unused after per-queue policy activation update\n  blkcg: implement per-queue policy activation\n  blkcg: add request_queue-\u003eroot_blkg\n  blkcg: make request_queue bypassing on allocation\n  blkcg: make sure blkg_lookup() returns %NULL if @q is bypassing\n  blkcg: make blkg_conf_prep() take @pol and return with queue lock held\n  blkcg: remove static policy ID enums\n  ...\n"
    },
    {
      "commit": "85fd0bc95bc76d129db0d0114c40665745bbba07",
      "tree": "ccebfaa6e8ae545ac35308a4cc8e2f3d61702e0f",
      "parents": [
        "f908ee9463b09ddd05e1c1a0111132212dc05fac"
      ],
      "author": {
        "name": "Russell King",
        "email": "rmk+kernel@arm.linux.org.uk",
        "time": "Mon May 14 08:29:23 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon May 14 08:29:23 2012 +0200"
      },
      "message": "Fix blkdev.h build errors when BLOCK\u003dn\n\nI see builds failing with:\n\n  CC [M]  drivers/mmc/host/dw_mmc.o\nIn file included from drivers/mmc/host/dw_mmc.c:15:\ninclude/linux/blkdev.h:1404: warning: \u0027struct task_struct\u0027 declared inside parameter list\ninclude/linux/blkdev.h:1404: warning: its scope is only this definition or declaration, which is probably not what you want\ninclude/linux/blkdev.h:1408: warning: \u0027struct task_struct\u0027 declared inside parameter list\ninclude/linux/blkdev.h:1413: error: expected \u0027\u003d\u0027, \u0027,\u0027, \u0027;\u0027, \u0027asm\u0027 or \u0027__attribute__\u0027 before \u0027blk_needs_flush_plug\u0027\nmake[4]: *** [drivers/mmc/host/dw_mmc.o] Error 1\n\nThis is because dw_mmc.c includes linux/blkdev.h as the very first file,\nand when CONFIG_BLOCK\u003dn, blkdev.h omits all includes.\n\nAs it requires linux/sched.h even when CONFIG_BLOCK\u003dn, move this out of\nthe #ifdef.\n\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "0b7877d4eea3f93e3dd941999522bbd8c538cb53",
      "tree": "ade6d4e411b9b9b569c802e3b2179826162c934c",
      "parents": [
        "bd1a68b59c8e3bce45fb76632c64e1e063c3962d",
        "69964ea4c7b68c9399f7977aa5b9aa6539a6a98a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue May 01 14:29:55 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue May 01 14:29:55 2012 +0200"
      },
      "message": "Merge tag \u0027v3.4-rc5\u0027 into for-3.5/core\n\nThe core branch is behind driver commits that we want to build\non for 3.5, hence I\u0027m pulling in a later -rc.\n\nLinux 3.4-rc5\n\nConflicts:\n\tDocumentation/feature-removal-schedule.txt\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "3c798398e393e5f9502dbab2b51e6c25e2e8f2ac",
      "tree": "d6f638e6a25dec4887e64bcc35b98bc394cb974f",
      "parents": [
        "36558c8a30e121f97b5852ae33e28081af21bdbf"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 16 13:57:25 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:17 2012 +0200"
      },
      "message": "blkcg: mass rename of blkcg API\n\nDuring the recent blkcg cleanup, most of blkcg API has changed to such\nextent that mass renaming wouldn\u0027t cause any noticeable pain.  Take\nthe chance and cleanup the naming.\n\n* Rename blkio_cgroup to blkcg.\n\n* Drop blkio / blkiocg prefixes and consistently use blkcg.\n\n* Rename blkio_group to blkcg_gq, which is consistent with io_cq but\n  keep the blkg prefix / variable name.\n\n* Rename policy method type and field names to signify they\u0027re dealing\n  with policy data.\n\n* Rename blkio_policy_type to blkcg_policy.\n\nThis patch doesn\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a2b1693bac45ea3fe3ba612fd22c45f17449f610",
      "tree": "2e05859caab6453efbc85d584dd72dca7ef03cd0",
      "parents": [
        "03d8e11142a893ad322285d3c8a08e88b570cda1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:33 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: implement per-queue policy activation\n\nAll blkcg policies were assumed to be enabled on all request_queues.\nDue to various implementation obstacles, during the recent blkcg core\nupdates, this was temporarily implemented as shooting down all !root\nblkgs on elevator switch and policy [de]registration combined with\nhalf-broken in-place root blkg updates.  In addition to being buggy\nand racy, this meant losing all blkcg configurations across those\nevents.\n\nNow that blkcg is cleaned up enough, this patch replaces the temporary\nimplementation with proper per-queue policy activation.  Each blkcg\npolicy should call the new blkcg_[de]activate_policy() to enable and\ndisable the policy on a specific queue.  blkcg_activate_policy()\nallocates and installs policy data for the policy for all existing\nblkgs.  blkcg_deactivate_policy() does the reverse.  If a policy is\nnot enabled for a given queue, blkg printing / config functions skip\nthe respective blkg for the queue.\n\nblkcg_activate_policy() also takes care of root blkg creation, and\ncfq_init_queue() and blk_throtl_init() are updated accordingly.\n\nThis replaces blkcg_bypass_{start|end}() and update_root_blkg_pd()\nunnecessary.  Dropped.\n\nv2: cfq_init_queue() was returning uninitialized @ret on root_group\n    alloc failure if !CONFIG_CFQ_GROUP_IOSCHED.  Fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "03d8e11142a893ad322285d3c8a08e88b570cda1",
      "tree": "0f6117ffdb0ad9565a165a98a8d4985ced094eb1",
      "parents": [
        "b82d4b197c782ced82a8b7b76664125d2d3c156c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:32 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: add request_queue-\u003eroot_blkg\n\nWith per-queue policy activation, root blkg creation will be moved to\nblkcg core.  Add q-\u003eroot_blkg in preparation.  For blk-throtl, this\nreplaces throtl_data-\u003eroot_tg; however, cfq needs to keep\ncfqd-\u003eroot_group for !CONFIG_CFQ_GROUP_IOSCHED.\n\nThis is to prepare for per-queue policy activation and doesn\u0027t cause\nany functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "8bd435b30ecacb69bbb8b2d3e251f770b807c5b2",
      "tree": "a1a50e95517a54a578af3967fb4016a5a1a42a68",
      "parents": [
        "ec399347d39fb2337ebace928cf4a2855bd0ec37"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:28 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: remove static policy ID enums\n\nRemove BLKIO_POLICY_* enums and let blkio_policy_register() allocate\n@pol-\u003eplid dynamically on registration.  The maximum number of blkcg\npolicies which can be registered at the same time is defined by\nBLKCG_MAX_POLS constant added to include/linux/blkdev.h.\n\nNote that blkio_policy_register() now may fail.  Policy init functions\nupdated accordingly and unnecessary ifdefs removed from cfq_init().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "8bcb6c7d48eb341b1f49f814cdcbe05eb6f15680",
      "tree": "83ff62ab93d0cf2c2687e5ca8799cac4c5dcfa25",
      "parents": [
        "00380a404fc4235e9b8b39598138bd3223a27b8a"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Mar 30 12:33:28 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Mar 30 12:33:28 2012 +0200"
      },
      "message": "block: use lockdep_assert_held for queue locking\n\nInstead of an ugly open coded variant.\n\nCc: axboe@kernel.dk\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c875f4d0250a1f070fa26087a73bdd8f54c48100",
      "tree": "4ed2bae2fc48e54ac712d28eaaae8217c8064c1d",
      "parents": [
        "9f13ef678efd977487fc0c2e489f17c9a8c67a3e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:22 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "blkcg: drop unnecessary RCU locking\n\nNow that blkg additions / removals are always done under both q and\nblkcg locks, the only places RCU locking is necessary are\nblkg_lookup[_create]() for lookup w/o blkcg lock.  This patch drops\nunncessary RCU locking replacing it with plain blkcg locking as\nnecessary.\n\n* blkiocg_pre_destroy() already perform proper locking and don\u0027t need\n  RCU.  Dropped.\n\n* blkio_read_blkg_stats() now uses blkcg-\u003elock instead of RCU read\n  lock.  This isn\u0027t a hot path.\n\n* Now unnecessary synchronize_rcu() from queue exit paths removed.\n  This makes q-\u003enr_blkgs unnecessary.  Dropped.\n\n* RCU annotation on blkg-\u003eq removed.\n\n-v2: Vivek pointed out that blkg_lookup_create() still needs to be\n     called under rcu_read_lock().  Updated.\n\n-v3: After the update, stats_lock locking in blkio_read_blkg_stats()\n     shouldn\u0027t be using _irq variant as it otherwise ends up enabling\n     irq while blkcg-\u003elock is locked.  Fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "03aa264ac15637b6f98374270bcdf31400965505",
      "tree": "6fa9ca54d3f775fba19123790f6655158034a1d8",
      "parents": [
        "4eef3049986e8397d5003916aed8cad6567a5e02"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:19 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: let blkcg core manage per-queue blkg list and counter\n\nWith the previous patch to move blkg list heads and counters to\nrequest_queue and blkg, logic to manage them in both policies are\nalmost identical and can be moved to blkcg core.\n\nThis patch moves blkg link logic into blkg_lookup_create(), implements\ncommon blkg unlink code in blkg_destroy(), and updates\nblkg_destory_all() so that it\u0027s policy specific and can skip root\ngroup.  The updated blkg_destroy_all() is now used to both clear queue\nfor bypassing and elv switching, and release all blkgs on q exit.\n\nThis patch introduces a race window where policy [de]registration may\nrace against queue blkg clearing.  This can only be a problem on cfq\nunload and shouldn\u0027t be a real problem in practice (and we have many\nother places where this race already exists).  Future patches will\nremove these unlikely races.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "4eef3049986e8397d5003916aed8cad6567a5e02",
      "tree": "5e36431986907b9fa728a6fbeb819a2738a64c82",
      "parents": [
        "c1768268f9424410761da57ea71107acae7b03cc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:18 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: move per-queue blkg list heads and counters to queue and blkg\n\nCurrently, specific policy implementations are responsible for\nmaintaining list and number of blkgs.  This duplicates code\nunnecessarily, and hinders factoring common code and providing blkcg\nAPI with better defined semantics.\n\nAfter this patch, request_queue hosts list heads and counters and blkg\nhas list nodes for both policies.  This patch only relocates the\nnecessary fields and the next patch will actually move management code\ninto blkcg core.\n\nNote that request_queue-\u003eblkg_list[] and -\u003enr_blkgs[] are hardcoded to\nhave 2 elements.  This is to avoid include dependency and will be\nremoved by the next patch.\n\nThis patch doesn\u0027t introduce any behavior change.\n\n-v2: Now unnecessary conditional on CONFIG_BLK_CGROUP_MODULE removed\n     as pointed out by Vivek.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "923adde1be1df57cebd80c563058e503376645e8",
      "tree": "7009edf644abdf6b91daaab3967ffa6a8b30633a",
      "parents": [
        "5efd611351d1a847c72d74fb12ff4bd187c0cb2c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:13 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: clear all request_queues on blkcg policy [un]registrations\n\nKeep track of all request_queues which have blkcg initialized and turn\non bypass and invoke blkcg_clear_queue() on all before making changes\nto blkcg policies.\n\nThis is to prepare for moving blkg management into blkcg core.  Note\nthat this uses more brute force than necessary.  Finer grained shoot\ndown will be implemented later and given that policy [un]registration\nalmost never happens on running systems (blk-throtl can\u0027t be built as\na module and cfq usually is the builtin default iosched), this\nshouldn\u0027t be a problem for the time being.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "d732580b4eb31553c63744a47d590f770cafb8f0",
      "tree": "ea4e8e21df1b639603693e6f5fdfc5a620cd8737",
      "parents": [
        "b2fab5acd28ead6f0dd6c3996ba23f0ef1772f15"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:14:58 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:21 2012 +0100"
      },
      "message": "block: implement blk_queue_bypass_start/end()\n\nRename and extend elv_queisce_start/end() to\nblk_queue_bypass_start/end() which are exported and supports nesting\nvia @q-\u003ebypass_depth.  Also add blk_queue_bypass() to test bypass\nstate.\n\nThis will be further extended and used for blkio_group management.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "11a3122f6cf2d988a77eb8883d0fc49cd013a6d5",
      "tree": "ded8ea8a2982754ff0c58448a7ed2e59487104cb",
      "parents": [
        "822bfa51ce44f2c63c300fdb76dc99c4d5a5ca9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "message": "block: strip out locking optimization in put_io_context()\n\nput_io_context() performed a complex trylock dancing to avoid\ndeferring ioc release to workqueue.  It was also broken on UP because\ntrylock was always assumed to succeed which resulted in unbalanced\npreemption count.\n\nWhile there are ways to fix the UP breakage, even the most\npathological microbench (forced ioc allocation and tight fork/exit\nloop) fails to show any appreciable performance benefit of the\noptimization.  Strip it out.  If there turns out to be workloads which\nare affected by this change, simpler optimization from the discussion\nthread can be applied later.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c1328514611.21268.66.camel@sli10-conroe\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b3c9dd182ed3bdcdaf0e42625a35924b0497afdc",
      "tree": "ad48ad4d923fee147c736318d0fad35b3755f4f5",
      "parents": [
        "83c2f912b43c3a7babbb6cb7ae2a5276c1ed2a3e",
        "5d381efb3d1f1ef10535a31ca0dd9b22fe1e1922"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 15 12:24:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 15 12:24:45 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.3/core\u0027 of git://git.kernel.dk/linux-block: (37 commits)\n  Revert \"block: recursive merge requests\"\n  block: Stop using macro stubs for the bio data integrity calls\n  blockdev: convert some macros to static inlines\n  fs: remove unneeded plug in mpage_readpages()\n  block: Add BLKROTATIONAL ioctl\n  block: Introduce blk_set_stacking_limits function\n  block: remove WARN_ON_ONCE() in exit_io_context()\n  block: an exiting task should be allowed to create io_context\n  block: ioc_cgroup_changed() needs to be exported\n  block: recursive merge requests\n  block, cfq: fix empty queue crash caused by request merge\n  block, cfq: move icq creation and rq-\u003eelv.icq association to block core\n  block, cfq: restructure io_cq creation path for io_context interface cleanup\n  block, cfq: move io_cq exit/release to blk-ioc.c\n  block, cfq: move icq cache management to block core\n  block, cfq: move io_cq lookup to blk-ioc.c\n  block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n  block, cfq: reorganize cfq_io_context into generic and cfq specific parts\n  block: remove elevator_queue-\u003eops\n  block: reorder elevator switch sequence\n  ...\n\nFix up conflicts in:\n - block/blk-cgroup.c\n\tSwitch from can_attach_task to can_attach\n - block/cfq-iosched.c\n\tconflict with now removed cic index changes (we now use q-\u003eid instead)\n"
    },
    {
      "commit": "0bfc96cb77224736dfa35c3c555d37b3646ef35e",
      "tree": "af5135c929ee8e1bdb38c306b2634dbc547d5189",
      "parents": [
        "577ebb374c78314ac4617242f509e2f5e7156649"
      ],
      "author": {
        "name": "Paolo Bonzini",
        "email": "pbonzini@redhat.com",
        "time": "Thu Jan 12 16:01:28 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 14 15:07:24 2012 -0800"
      },
      "message": "block: fail SCSI passthrough ioctls on partition devices\n\nLinux allows executing the SG_IO ioctl on a partition or LVM volume, and\nwill pass the command to the underlying block device.  This is\nwell-known, but it is also a large security problem when (via Unix\npermissions, ACLs, SELinux or a combination thereof) a program or user\nneeds to be granted access only to part of the disk.\n\nThis patch lets partitions forward a small set of harmless ioctls;\nothers are logged with printk so that we can see which ioctls are\nactually sent.  In my tests only CDROM_GET_CAPABILITY actually occurred.\nOf course it was being sent to a (partition on a) hard disk, so it would\nhave failed with ENOTTY and the patch isn\u0027t changing anything in\npractice.  Still, I\u0027m treating it specially to avoid spamming the logs.\n\nIn principle, this restriction should include programs running with\nCAP_SYS_RAWIO.  If for example I let a program access /dev/sda2 and\n/dev/sdb, it still should not be able to read/write outside the\nboundaries of /dev/sda2 independent of the capabilities.  However, for\nnow programs with CAP_SYS_RAWIO will still be allowed to send the\nioctls.  Their actions will still be logged.\n\nThis patch does not affect the non-libata IDE driver.  That driver\nhowever already tests for bd !\u003d bd-\u003ebd_contains before issuing some\nioctl; it could be restricted further to forbid these ioctls even for\nprograms running with CAP_SYS_ADMIN/CAP_SYS_RAWIO.\n\nCc: linux-scsi@vger.kernel.org\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: James Bottomley \u003cJBottomley@parallels.com\u003e\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\n[ Make it also print the command name when warning - Linus ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "577ebb374c78314ac4617242f509e2f5e7156649",
      "tree": "690ae95d67bb8f9fd66bc0daebc90a46904420ac",
      "parents": [
        "81d48f0aee544885c39ef6e1ffb1175f276e6adf"
      ],
      "author": {
        "name": "Paolo Bonzini",
        "email": "pbonzini@redhat.com",
        "time": "Thu Jan 12 16:01:27 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 14 15:07:24 2012 -0800"
      },
      "message": "block: add and use scsi_blk_cmd_ioctl\n\nIntroduce a wrapper around scsi_cmd_ioctl that takes a block device.\n\nThe function will then be enhanced to detect partition block devices\nand, in that case, subject the ioctls to whitelisting.\n\nCc: linux-scsi@vger.kernel.org\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: James Bottomley \u003cJBottomley@parallels.com\u003e\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fd83240a60ecc59849420df3393e9e6d35c77683",
      "tree": "d85ae1c6459d5d5c01db1617011db403929578b4",
      "parents": [
        "0b4156eb27214e81f7012458bb15d1e038db9a00"
      ],
      "author": {
        "name": "Stephen Rothwell",
        "email": "sfr@canb.auug.org.au",
        "time": "Thu Jan 12 09:17:30 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Jan 12 09:19:54 2012 +0100"
      },
      "message": "blockdev: convert some macros to static inlines\n\nWe prefer to program in C rather than preprocessor and it fixes this\nwarning when CONFIG_BLK_DEV_INTEGRITY is not set:\n\ndrivers/md/dm-table.c: In function \u0027dm_table_set_integrity\u0027:\ndrivers/md/dm-table.c:1285:3: warning: statement with no effect [-Wunused-value]\n\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b1bd055d397e09f99dcef9b138ed104ff1812fcb",
      "tree": "e8e1d3d0b6a33859392bcba516933aff256dc4b4",
      "parents": [
        "c98b2cc29af8e84e7364b53e9bb4cc7cfaf62555"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Jan 11 16:27:11 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Jan 11 16:27:11 2012 +0100"
      },
      "message": "block: Introduce blk_set_stacking_limits function\n\nStacking driver queue limits are typically bounded exclusively by the\ncapabilities of the low level devices, not by the stacking driver\nitself.\n\nThis patch introduces blk_set_stacking_limits() which has more liberal\nmetrics than the default queue limits function. This allows us to\ninherit topology parameters from bottom devices without manually\ntweaking the default limits in each driver prior to calling the stacking\nfunction.\n\nSince there is now a clear distinction between stacking and low-level\ndevices, blk_set_default_limits() has been modified to carry the more\nconservative values that we used to manually set in\nblk_queue_make_request().\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a612fddf0d8090f2877305c9168b6c1a34fb5d90",
      "tree": "b59047a1670469362e1ea44093522224bdcf5aae",
      "parents": [
        "c58698073218f2c8f2fc5982fa3938c2d3803b9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n\nMost of icq management is about to be moved out of cfq into blk-ioc.\nThis patch prepares for it.\n\n* Move cfqd-\u003eicq_list to request_queue-\u003eicq_list\n\n* Make request explicitly point to icq instead of through elevator\n  private data.  -\u003eelevator_private[3] is replaced with sub struct elv\n  which contains icq pointer and priv[2].  cfq is updated accordingly.\n\n* Meaningless clearing of -\u003eelevator_private[0] removed from\n  elv_set_request().  At that point in code, the field was guaranteed\n  to be %NULL anyway.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b2efa05265d62bc29f3a64400fad4b44340eedb8",
      "tree": "4555f0b5f0025c099997b81f7b3f8bc48b44220d",
      "parents": [
        "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: unlink cfq_io_context\u0027s immediately\n\ncic is association between io_context and request_queue.  A cic is\nlinked from both ioc and q and should be destroyed when either one\ngoes away.  As ioc and q both have their own locks, locking becomes a\nbit complex - both orders work for removal from one but not from the\nother.\n\nCurrently, cfq tries to circumvent this locking order issue with RCU.\nioc-\u003elock nests inside queue_lock but the radix tree and cic\u0027s are\nalso protected by RCU allowing either side to walk their lists without\ngrabbing lock.\n\nThis rather unconventional use of RCU quickly devolves into extremely\nfragile convolution.  e.g. The following is from cfqd going away too\nsoon after ioc and q exits raced.\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n [   88.503444]\n Pid: 599, comm: hexdump Not tainted 3.1.0-rc10-work+ #158 Bochs Bochs\n RIP: 0010:[\u003cffffffff81397628\u003e]  [\u003cffffffff81397628\u003e] cfq_exit_single_io_context+0x58/0xf0\n ...\n Call Trace:\n  [\u003cffffffff81395a4a\u003e] call_for_each_cic+0x5a/0x90\n  [\u003cffffffff81395ab5\u003e] cfq_exit_io_context+0x15/0x20\n  [\u003cffffffff81389130\u003e] exit_io_context+0x100/0x140\n  [\u003cffffffff81098a29\u003e] do_exit+0x579/0x850\n  [\u003cffffffff81098d5b\u003e] do_group_exit+0x5b/0xd0\n  [\u003cffffffff81098de7\u003e] sys_exit_group+0x17/0x20\n  [\u003cffffffff81b02f2b\u003e] system_call_fastpath+0x16/0x1b\n\nThe only real hot path here is cic lookup during request\ninitialization and avoiding extra locking requires very confined use\nof RCU.  This patch makes cic removal from both ioc and request_queue\nperform double-locking and unlink immediately.\n\n* From q side, the change is almost trivial as ioc-\u003elock nests inside\n  queue_lock.  It just needs to grab each ioc-\u003elock as it walks\n  cic_list and unlink it.\n\n* From ioc side, it\u0027s a bit more difficult because of inversed lock\n  order.  ioc needs its lock to walk its cic_list but can\u0027t grab the\n  matching queue_lock and needs to perform unlock-relock dancing.\n\n  Unlinking is now wholly done from put_io_context() and fast path is\n  optimized by using the queue_lock the caller already holds, which is\n  by far the most common case.  If the ioc accessed multiple devices,\n  it tries with trylock.  In unlikely cases of fast path failure, it\n  falls back to full double-locking dance from workqueue.\n\nDouble-locking isn\u0027t the prettiest thing in the world but it\u0027s *far*\nsimpler and more understandable than RCU trick without adding any\nmeaningful overhead.\n\nThis still leaves a lot of now unnecessary RCU logics.  Future patches\nwill trim them.\n\n-v2: Vivek pointed out that cic-\u003eq was being dereferenced after\n     cic-\u003erelease() was called.  Updated to use local variable @this_q\n     instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "09ac46c429464c919d04bb737b27edd84d944f02",
      "tree": "0fb3b7344ead06d08dbd77470445821817c439b7",
      "parents": [
        "6e736be7f282fff705db7c34a15313281b372a76"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block: misc updates to blk_get_queue()\n\n* blk_get_queue() is peculiar in that it returns 0 on success and 1 on\n  failure instead of 0 / -errno or boolean.  Update it such that it\n  returns %true on success and %false on failure.\n\n* Make sure the caller checks for the return value.\n\n* Separate out __blk_get_queue() which doesn\u0027t check whether @q is\n  dead and put it in blk.h.  This will be used later.\n\nThis patch doesn\u0027t introduce any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a73f730d013ff2788389fd0c46ad3e5510f124e6",
      "tree": "773987c8cbec56745d46f46382ad268ed91adf98",
      "parents": [
        "8ba61435d73f2274e12d4d823fde06735e8f6a54"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003ecic_index to q-\u003eid\n\ncfq allocates per-queue id using ida and uses it to index cic radix\ntree from io_context.  Move it to q-\u003eid and allocate on queue init and\nfree on queue release.  This simplifies cfq a bit and will allow for\nfurther improvements of io context life-cycle management.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "34f6055c80285e4efb3f602a9119db75239744dc",
      "tree": "eb05185976c1941d196d259c3dfc2a4cfa7469d1",
      "parents": [
        "1ba64edef6051d2ec79bb2fbd3a0c8f0df00ab55"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block: add blk_queue_dead()\n\nThere are a number of QUEUE_FLAG_DEAD tests.  Add blk_queue_dead()\nmacro and use it.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "1ba64edef6051d2ec79bb2fbd3a0c8f0df00ab55",
      "tree": "1e8a8d5cfdfeff0f92490985bd125ab6666673b0",
      "parents": [
        "dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block, sx8: kill blk_insert_request()\n\nThe only user left for blk_insert_request() is sx8 and it can be\ntrivially switched to use blk_execute_rq_nowait() - special requests\naren\u0027t included in io stat and sx8 doesn\u0027t use block layer tagging.\nSwitch sx8 and kill blk_insert_requeset().\n\nThis patch doesn\u0027t introduce any functional difference.\n\nOnly compile tested.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5151412dd4338b273afdb107c3772528e9e67d92",
      "tree": "ce88b8d64d903cf99b2ee3f5c66af143d23b0bc6",
      "parents": [
        "b4bbb02934e4511d9083f15c23e90703482e84ad"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Wed Nov 23 10:59:13 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Nov 23 10:59:13 2011 +0100"
      },
      "message": "block: initialize request_queue\u0027s numa node during\n\nstruct request_queue is allocated with __GFP_ZERO so its \"node\" field is\nzero before initialization.  This causes an oops if node 0 is offline in\nthe page allocator because its zonelists are not initialized.  From Dave\nYoung\u0027s dmesg:\n\n\tSRAT: Node 1 PXM 2 0-d0000000\n\tSRAT: Node 1 PXM 2 100000000-330000000\n\tSRAT: Node 0 PXM 1 330000000-630000000\n\tInitmem setup node 1 0000000000000000-000000000affb000\n\t...\n\tBuilt 1 zonelists in Node order, mobility grouping on.\n\t...\n\tBUG: unable to handle kernel paging request at 0000000000001c08\n\tIP: [\u003cffffffff8111c355\u003e] __alloc_pages_nodemask+0xb5/0x870\n\nand __alloc_pages_nodemask+0xb5 translates to a NULL pointer on\nzonelist-\u003e_zonerefs.\n\nThe fix is to initialize q-\u003enode at the time of allocation so the correct\nnode is passed to the slab allocator later.\n\nSince blk_init_allocated_queue_node() is no longer needed, merge it with\nblk_init_allocated_queue().\n\n[rientjes@google.com: changelog, initializing q-\u003enode]\nCc: stable@vger.kernel.org [2.6.37+]\nReported-by: Dave Young \u003cdyoung@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nTested-by: Dave Young \u003cdyoung@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "de47725421ad5627a5c905f4e40bb844ebc06d29",
      "tree": "bc23b0405d4a79dcc866a8b2877f128ee0ea9ffc",
      "parents": [
        "eb5589a8f0dab7e29021344228856339e6a1249c"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu May 26 13:46:22 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:32:32 2011 -0400"
      },
      "message": "include: replace linux/module.h with \"struct module\" wherever possible\n\nThe \u003clinux/module.h\u003e pretty much brings in the kitchen sink along\nwith it, so it should be avoided wherever reasonably possible in\nterms of being included from other commonly used \u003clinux/something.h\u003e\nfiles, as it results in a measureable increase on compile times.\n\nThe worst culprit was probably device.h since it is used everywhere.\nThis file also had an implicit dependency/usage of mutex.h which was\nmasked by module.h, and is also fixed here at the same time.\n\nThere are over a dozen other headers that simply declare the\nstruct instead of pulling in the whole file, so follow their lead\nand simply make it a few more.\n\nMost of the implicit dependencies on module.h being present by\nthese headers pulling it in have been now weeded out, so we can\nfinally make this change with hopefully minimal breakage.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "bc9fcbf9cb8ec76d340da16fbf48a9a316e14c52",
      "tree": "89376b8811a0d440328dc4f31ef062c811db1cc1",
      "parents": [
        "ece84241b93c4693bfe0a8ec9a043a16d216d0cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:18 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:18 2011 +0200"
      },
      "message": "block: move blk_throtl prototypes to block/blk.h\n\nblk_throtl interface is block internal and there\u0027s no reason to have\nthem in linux/blkdev.h.  Move them to block/blk.h.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5c04b426f2e8b46cfc7969a35b2631063a3c646c",
      "tree": "2d27d9f5d2fe5d5e8fbc01a467ec58bcb50235c1",
      "parents": [
        "499337bb6511e665a236a6a947f819d98ea340c6",
        "899e3ee404961a90b828ad527573aaaac39f0ab1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "message": "Merge branch \u0027v3.1-rc10\u0027 into for-3.2/core\n\nConflicts:\n\tblock/blk-core.c\n\tinclude/linux/blkdev.h\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "75df713627f28f88b901b329c8857747545fd4ab",
      "tree": "0986bc4d82595dae4a3fabb15fce4780c053f004",
      "parents": [
        "27a84d54c02591e815d291ae0ee4bfb9cfd21065"
      ],
      "author": {
        "name": "Suresh Jayaraman",
        "email": "sjayaraman@suse.de",
        "time": "Wed Sep 21 10:00:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Sep 21 10:00:16 2011 +0200"
      },
      "message": "block: document blk-plug\n\nThus spake Andrew Morton:\n\n\"And I have the usual maintainability whine.  If someone comes up to\nvmscan.c and sees it calling blk_start_plug(), how are they supposed to\nwork out why that call is there?  They go look at the blk_start_plug()\ndefinition and it is undocumented.  I think we can do better than this?\"\n\nAdapted from the LWN article - http://lwn.net/Articles/438256/ by Jens\nAxboe and from an earlier attempt by Shaohua Li to document blk-plug.\n\n[akpm@linux-foundation.org: grammatical and spelling tweaks]\nSigned-off-by: Suresh Jayaraman \u003csjayaraman@suse.de\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@google.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5a7bbad27a410350e64a2d7f5ec18fc73836c14f",
      "tree": "3447cd62dbcbd77b4071e2eb7576f1d7632ef2d3",
      "parents": [
        "c20e8de27fef9f59869c81c288ad6cf28200e00c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Sep 12 12:12:01 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 12 12:12:01 2011 +0200"
      },
      "message": "block: remove support for bio remapping from -\u003emake_request\n\nThere is very little benefit in allowing to let a -\u003emake_request\ninstance update the bios device and sector and loop around it in\n__generic_make_request when we can archive the same through calling\ngeneric_make_request from the driver and letting the loop in\ngeneric_make_request handle it.\n\nNote that various drivers got the return value from -\u003emake_request and\nreturned non-zero values for errors.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c20e8de27fef9f59869c81c288ad6cf28200e00c",
      "tree": "c1d972bfdf6b0f562169a923f2d77f422578fac1",
      "parents": [
        "166e1f901b01872e8b70733a3f2e2c6980389cf8"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 12 12:03:37 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 12 12:08:31 2011 +0200"
      },
      "message": "block: rename __make_request() to blk_queue_bio()\n\nNow that it\u0027s exported, lets put it in a more sane namespace.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "166e1f901b01872e8b70733a3f2e2c6980389cf8",
      "tree": "bb0a52bfe76e60bb430cd6a5f91ceb9b6ecaa7b2",
      "parents": [
        "484fc254b88257a2d8b3759aa062e8e8b35e0988"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Sep 12 12:08:27 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 12 12:08:27 2011 +0200"
      },
      "message": "block: export __make_request\n\nAvoid the hacks need for request based device mappers currently by simply\nexporting the symbol instead of trying to get it through the back door.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "56ebdaf2fa3c5276be201c5d1aff1490b682ecf2",
      "tree": "f99669db0cd846baac7bb468e2cc14324e8950a3",
      "parents": [
        "a63271627521b825b0dd0a564e9a9c62b4c1ca89"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Wed Aug 24 16:04:34 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Aug 24 16:04:34 2011 +0200"
      },
      "message": "block: simplify force plug flush code a little bit\n\nCleaning up the code a little bit. attempt_plug_merge() traverses the plug\nlist anyway, we can do the request counting there, so stack size is reduced\na little bit.\nThe motivation here is I suspect if we should count the requests for each\nqueue (task could handle multiple disks in the meantime), but my test doesn\u0027t\nshow it\u0027s worthy doing. If somebody proves we should do it, below change\nwill make that more easier.\n\nSigned-off-by: Shaohua Li \u003cshli@kernel.org\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "aa387cc895672b00f807ad7c734a2defaf677712",
      "tree": "31c2c3f3e0d58ff2524cdf8f94abecc394f5eb49",
      "parents": [
        "24c3047095fa3954f114bfff2e37b8fcbb216396"
      ],
      "author": {
        "name": "Mike Christie",
        "email": "michaelc@cs.wisc.edu",
        "time": "Sun Jul 31 22:05:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jul 31 22:05:09 2011 +0200"
      },
      "message": "block: add bsg helper library\n\nThis moves the FC classes bsg code to the block layer and\nmakes it a lib so that other classes like iscsi and SAS can use it.\n\nIt is helpful because working with the request queue, bios,\ncreating scatterlists, etc are a pain that the LLD does not\nhave to worry about with normal IOs and should not have to\nworry about for bsg requests.\n\nSigned-off-by: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5757a6d76cdf6dda2a492c09b985c015e86779b1",
      "tree": "6356a6353639eb473dd917a1b2062f9e7e20de22",
      "parents": [
        "ef3230880abd36553ab442363d3c9a0661f00769"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jul 23 20:44:25 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Jul 23 20:44:25 2011 +0200"
      },
      "message": "block: strict rq_affinity\n\nSome systems benefit from completions always being steered to the strict\nrequester cpu rather than the looser \"per-socket\" steering that\nblk_cpu_to_group() attempts by default. This is because the first\nCPU in the group mask ends up being completely overloaded with work,\nwhile the others (including the original submitter) has power left\nto spare.\n\nAllow the strict mode to be set by writing \u00272\u0027 to the sysfs control\nfile. This is identical to the scheme used for the nomerges file,\nwhere \u00272\u0027 is a more aggressive setting than just being turned on.\n\necho 2 \u003e /sys/block/\u003cbdev\u003e/queue/rq_affinity\n\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Roland Dreier \u003croland@purestorage.com\u003e\nTested-by: Dave Jiang \u003cdave.jiang@intel.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d7b7630130e52361af66ce3b994696e2357ba7de",
      "tree": "52e76c86cd35ffb1e7656f391f4b730072a6193c",
      "parents": [
        "7700fc4f675fa38094e78e345b594363a2fd895b"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Wed Jul 13 21:17:23 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jul 13 21:17:49 2011 +0200"
      },
      "message": "block: reorder request_queue to remove 64 bit alignment padding\n\nReorder request_queue to remove 16 bytes of alignment padding in 64 bit\nbuilds.\n\nOn my config this shrinks the size of this structure from 1608 to 1592\nbytes and therefore needs one fewer cachelines.\n\nAlso trivially move the open bracket { to be on the same line as the\nstructure name to make it easier to grep.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "316cc67d5e03801a5ee4ac660a4dfe9e02aed475",
      "tree": "ddcac370cf4402127a9609cfe6bb86eb1ebb6c8d",
      "parents": [
        "55c022bbddb2c056b5dff1bd1b1758d31b6d64c9"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jul 08 08:19:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 08 08:19:21 2011 +0200"
      },
      "message": "block: document blk_plug list access\n\nI\u0027m often confused why not disable preempt when changing blk_plug list. It\nwould be better to add comments here in case others have the similar concerns.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "55c022bbddb2c056b5dff1bd1b1758d31b6d64c9",
      "tree": "fdd3aa29a1407bbd19b8efe47b2538544da85a70",
      "parents": [
        "719c0c590609809365c6f3da2f923cd84dc99113"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jul 08 08:19:20 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 08 08:19:20 2011 +0200"
      },
      "message": "block: avoid building too big plug list\n\nWhen I test fio script with big I/O depth, I found the total throughput drops\ncompared to some relative small I/O depth. The reason is the thread accumulates\nbig requests in its plug list and causes some delays (surely this depends\non CPU speed).\nI thought we\u0027d better have a threshold for requests. When a threshold reaches,\nthis means there is no request merge and queue lock contention isn\u0027t severe\nwhen pushing per-task requests to queue, so the main advantages of blk plug\ndon\u0027t exist. We can force a plug list flush in this case.\nWith this, my test throughput actually increases and almost equals to small\nI/O depth. Another side effect is irq off time decreases in blk_flush_plug_list()\nfor big I/O depth.\nThe BLK_MAX_REQUEST_COUNT is choosen arbitarily, but 16 is efficiently to\nreduce lock contention to me. But I\u0027m open here, 32 is ok in my test too.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "04bf7869ca0fd12009aee301cac2264a36df4d98",
      "tree": "66cb81ebf8b76560a31433c2c493dc430c914af9",
      "parents": [
        "d2f31a5fd60d168b00fc4f7617b68a1287b21e90",
        "7b28afe01ab6ffb5f152f47831b44933facd2328"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-3.1/core\n\nConflicts:\n\tblock/blk-throttle.c\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4d0d98b60eba726e0a4f3e6617628b070c444707",
      "tree": "fb83b8412ff2bf7602adabe317a1ca702aa683ec",
      "parents": [
        "df4156569d4ace581bd1581e7aa4a9dd7d2f0775"
      ],
      "author": {
        "name": "Wanlong Gao",
        "email": "wanlong.gao@gmail.com",
        "time": "Mon Jun 13 10:45:38 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 13 10:45:38 2011 +0200"
      },
      "message": "block:fix the comment error in blkdev.h\n\nThere is not a function rq_init but blk_rq_init in block/blk-core.c.\n\nSigned-off-by: Wanlong Gao \u003cwanlong.gao@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ea9d6553b3b3044e7374774cc33bb1b2eee19dd3",
      "tree": "9079017f7576f1df50d063c033c80c5a201dc555",
      "parents": [
        "a1706ac4c0201ea0143dc0db0659001b26ceeabb"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 31 13:45:53 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 31 13:45:53 2011 +0200"
      },
      "message": "block: remove unwanted semicolons\n\nSince those defined functions require additional semicolon\nfrom the caller, they could cause potential syntax errors\nwhen used in if-else statements.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nAcked-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "698567f3fa790fea37509a54dea855302dd88331",
      "tree": "7a1df976a0eb12cab03e82c18809a30d5482fee4",
      "parents": [
        "d70d0711edd8076ec2ce0ed109106e2df950681b",
        "61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:33:15 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:33:15 2011 +0200"
      },
      "message": "Merge commit \u0027v2.6.39\u0027 into for-2.6.40/core\n\nSince for-2.6.40/core was forked off the 2.6.39 devel tree, we\u0027ve\nhad churn in the core area that makes it difficult to handle\npatches for eg cfq or blk-throttle. Instead of requiring that they\nbe based in older versions with bugs that have been fixed later\nin the rc cycle, merge in 2.6.39 final.\n\nAlso fixes up conflicts in the below files.\n\nConflicts:\n\tdrivers/block/paride/pcd.c\n\tdrivers/cdrom/viocd.c\n\tdrivers/ide/ide-cd.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a934a00a69e940b126b9bdbf83e630ef5fe43523",
      "tree": "b3f82d7b0a6c34c4d449debd2d1d242bdbf84b56",
      "parents": [
        "bbdd304cf66fbf2b4b2d28418dc619d443635e83"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed May 18 10:37:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed May 18 10:37:35 2011 +0200"
      },
      "message": "block: Fix discard topology stacking and reporting\n\nIn some cases we would end up stacking discard_zeroes_data incorrectly.\nFix this by enabling the feature by default for stacking drivers and\nclearing it for low-level drivers. Incorporating a device that does not\nsupport dzd will then cause the feature to be disabled in the stacking\ndriver.\n\nAlso ensure that the maximum discard value does not overflow when\nexported in sysfs and return 0 in the alignment and dzd fields for\ndevices that don\u0027t support discard.\n\nReported-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3ac0cc4508709d42ec9aa351086c7d38bfc0660c",
      "tree": "933d5ab6ff9b0763f36e614962abb5bdcc4a348a",
      "parents": [
        "f3876930952390a31c3a7fd68dd621464a36eb80"
      ],
      "author": {
        "name": "shaohua.li@intel.com",
        "email": "shaohua.li@intel.com",
        "time": "Fri May 06 11:34:41 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 11:36:25 2011 -0600"
      },
      "message": "block: hold queue if flush is running for non-queueable flush drive\n\nIn some drives, flush requests are non-queueable. When flush request is\nrunning, normal read/write requests can\u0027t run. If block layer dispatches\nsuch request, driver can\u0027t handle it and requeue it.  Tejun suggested we\ncan hold the queue when flush is running. This can avoid unnecessary\nrequeue.  Also this can improve performance. For example, we have\nrequest flush1, write1, flush 2. flush1 is dispatched, then queue is\nhold, write1 isn\u0027t inserted to queue. After flush1 is finished, flush2\nwill be dispatched. Since disk cache is already clean, flush2 will be\nfinished very soon, so looks like flush2 is folded to flush1.\n\nIn my test, the queue holding completely solves a regression introduced by\ncommit 53d63e6b0dfb95882ec0219ba6bbd50cde423794:\n\n    block: make the flush insertion use the tail of the dispatch list\n\n    It\u0027s not a preempt type request, in fact we have to insert it\n    behind requests that do specify INSERT_FRONT.\n\nwhich causes about 20% regression running a sysbench fileio\nworkload.\n\nStable: 2.6.39 only\n\nCc: stable@kernel.org\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f3876930952390a31c3a7fd68dd621464a36eb80",
      "tree": "7fe2306a8dc2022ac7724b2d47629e38e3fb354b",
      "parents": [
        "490b94be0282c3b67f56453628ff0aaae827a670"
      ],
      "author": {
        "name": "shaohua.li@intel.com",
        "email": "shaohua.li@intel.com",
        "time": "Fri May 06 11:34:32 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 11:36:25 2011 -0600"
      },
      "message": "block: add a non-queueable flush flag\n\nflush request isn\u0027t queueable in some drives. Add a flag to let driver\nnotify block layer about this. We can optimize flush performance with the\nknowledge.\n\nStable: 2.6.39 only\n\nCc: stable@kernel.org\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c21e6beba8835d09bb80e34961430b13e60381c5",
      "tree": "cdf6f6d40130b95e641ab5db1de0f6ecc179054a",
      "parents": [
        "5f45c69589b7d2953584e6cd0b31e35dbe960ad0"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:32:46 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:32:46 2011 +0200"
      },
      "message": "block: get rid of QUEUE_FLAG_REENTER\n\nWe are currently using this flag to check whether it\u0027s safe\nto call into -\u003erequest_fn(). If it is set, we punt to kblockd.\nBut we get a lot of false positives and excessive punts to\nkblockd, which hurts performance.\n\nThe only real abuser of this infrastructure is SCSI. So export\nthe async queue run and convert SCSI over to use that. There\u0027s\nroom for improvement in that SCSI need not always use the async\ncall, but this fixes our performance issue and they can fix that\nup in due time.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "24ecfbe27f65563909b14492afda2f1c21f7c044",
      "tree": "a7e51d903c400d0925f87be5f3069a5a44e0af24",
      "parents": [
        "4521cc4ed5173f92714f6999a69910c3385fed68"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 18 11:41:33 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 11:41:33 2011 +0200"
      },
      "message": "block: add blk_run_queue_async\n\nInstead of overloading __blk_run_queue to force an offload to kblockd\nadd a new blk_run_queue_async helper to do it explicitly.  I\u0027ve kept\nthe blk_queue_stopped check for now, but I suspect it\u0027s not needed\nas the check we do when the workqueue items runs should be enough.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b4cb290e0a7d19235bd075c2ad4d60dbab0bac15",
      "tree": "2674fc5e3d0ee76e8b8205ab771fe7bbed173a88",
      "parents": [
        "048c9374a749a27f16493cea033fa4a8ff492356"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:54:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:54:05 2011 +0200"
      },
      "message": "Revert \"block: add callback function for unplug notification\"\n\nMD can\u0027t use this since it really requires us to be able to\nkeep more than a single piece of state for the unplug. Commit\n048c9374 added the required support for MD, so get rid of this\nnow unused code.\n\nThis reverts commit f75664570d8b75469cc468f23c2b27220984983b.\n\nConflicts:\n\n\tblock/blk-core.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "048c9374a749a27f16493cea033fa4a8ff492356",
      "tree": "64f520a1a2d2e1a9c30b45e306ce6f901f8f8d49",
      "parents": [
        "a1b49cb7e2a7961ec3aa8b64860bf480d4ec9077"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 09:52:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:52:22 2011 +0200"
      },
      "message": "block: Enhance new plugging support to support general callbacks\n\nmd/raid requires an unplug callback, but as it does not uses\nrequests the current code cannot provide one.\n\nSo allow arbitrary callbacks to be attached to the blk_plug.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a237c1c5bc5dc5c76a21be922dca4826f3eca8ca",
      "tree": "a216c9a6d9e870b84424938e9e0b4722dc8634cd",
      "parents": [
        "5853b4f06f7b9b56f37f457d7923f7b96496074e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Apr 16 13:27:55 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Apr 16 13:27:55 2011 +0200"
      },
      "message": "block: let io_schedule() flush the plug inline\n\nLinus correctly observes that the most important dispatch cases\nare now done from kblockd, this isn\u0027t ideal for latency reasons.\nThe original reason for switching dispatches out-of-line was to\navoid too deep a stack, so by _only_ letting the \"accidental\"\nflush directly in schedule() be guarded by offload to kblockd,\nwe should be able to get the best of both worlds.\n\nSo add a blk_schedule_flush_plug() that offloads to kblockd,\nand only use that from the schedule() path.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f6603783f9f099bf7a83b3f6c689bbbf74f0e96e",
      "tree": "450065f77e95b6cd0eee13c9d8f721016be79839",
      "parents": [
        "88b996cd0652280cc9b9fc70008fda15f14175e1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Apr 15 15:49:07 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Apr 15 15:49:07 2011 +0200"
      },
      "message": "block: only force kblockd unplugging from the schedule() path\n\nFor the explicit unplugging, we\u0027d prefer to kick things off\nimmediately and not pay the penalty of the latency to switch\nto kblockd. So let blk_finish_plug() do the run inline, while\nthe implicit-on-schedule-out unplug will punt to kblockd.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "88b996cd0652280cc9b9fc70008fda15f14175e1",
      "tree": "c842575e47ab094bced8a01b241568616e89366a",
      "parents": [
        "80656b67b3988f83edd86a280d9937124fe62050"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Apr 15 15:20:10 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Apr 15 15:20:10 2011 +0200"
      },
      "message": "block: cleanup the block plug helper functions\n\nIt\u0027s a bit of a mess currently. task-\u003eplug is being cleared\nand reset in __blk_finish_plug(), and blk_finish_plug() is\ntesting for a NULL plug which cannot happen even from schedule()\nanymore since it uses blk_needs_flush_plug() to determine\nwhether to call into this function at all.\n\nSo get rid of some of the cruft.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f75664570d8b75469cc468f23c2b27220984983b",
      "tree": "48f1e9b8576892cab65361e39b874e0e07d3b32a",
      "parents": [
        "188112722cce083c8f1a7d0d84f55c2cd885920c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:17:31 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:17:31 2011 +0200"
      },
      "message": "block: add callback function for unplug notification\n\nMD would like to know when a queue is unplugged, so it can flush\nit\u0027s bitmap writes. Add such a callback.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a63a5cf84dac7a23a57c800eea5734701e7d3c04",
      "tree": "965552b96d7eacc21206a4f28672efd24a04d913",
      "parents": [
        "7dcda1c96d7c643101d4a05579ef4512a4baa7ef"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Apr 01 21:02:31 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:52:43 2011 +0200"
      },
      "message": "dm: improve block integrity support\n\nThe current block integrity (DIF/DIX) support in DM is verifying that\nall devices\u0027 integrity profiles match during DM device resume (which\nis past the point of no return).  To some degree that is unavoidable\n(stacked DM devices force this late checking).  But for most DM\ndevices (which aren\u0027t stacking on other DM devices) the ideal time to\nverify all integrity profiles match is during table load.\n\nIntroduce the notion of an \"initialized\" integrity profile: a profile\nthat was blk_integrity_register()\u0027d with a non-NULL \u0027blk_integrity\u0027\ntemplate.  Add blk_integrity_is_initialized() to allow checking if a\nprofile was initialized.\n\nUpdate DM integrity support to:\n- check all devices with _initialized_ integrity profiles match\n  during table load; uninitialized profiles (e.g. for underlying DM\n  device(s) of a stacked DM device) are ignored.\n- disallow a table load that would result in an integrity profile that\n  conflicts with a DM device\u0027s existing (in-use) integrity profile\n- avoid clearing an existing integrity profile\n- validate all integrity profiles match during resume; but if they\n  don\u0027t all we can do is report the mismatch (during resume we\u0027re past\n  the point of no return)\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1f940bdfc0d03265d178d9dfd840d854819f797d",
      "tree": "b45ef8482ef17ccaee2e754e872fb4047efb3448",
      "parents": [
        "eba2ed9c9636d9e7ed203a2498ed230b48341709"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 20:17:08 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 20:17:08 2011 +0100"
      },
      "message": "block: fixup plugging stubs for !CONFIG_BLOCK\n\nThey used an older prototype, fix it up.\n\nReported-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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": "3cca6dc1c81e2407928dc4c6105252146fd3924f",
      "tree": "b78b0d93e7c02abdc37e1d5a6204ab6b94d56fd4",
      "parents": [
        "53f22956effe1c9e7961b8c6e4362ecca5e460b7"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 11:08:00 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:45:54 2011 +0100"
      },
      "message": "block: add API for delaying work/request_fn a little bit\n\nCurrently we use plugging for that, but as plugging is going away,\nwe need an alternative mechanism.\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": "da527770007fce8e4541947d47918248286da875",
      "tree": "fc518172887409133e8dea827067209adfdb1c3c",
      "parents": [
        "cd25f54961273c2e4cbd47441e04832468382a5e"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Mar 02 19:05:33 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 19:06:49 2011 -0500"
      },
      "message": "block: Move blk_throtl_exit() call to blk_cleanup_queue()\n\nMove blk_throtl_exit() in blk_cleanup_queue() as blk_throtl_exit() is\nwritten in such a way that it needs queue lock. In blk_release_queue()\nthere is no gurantee that -\u003equeue_lock is still around.\n\nInitially blk_throtl_exit() was in blk_cleanup_queue() but Ingo reported\none problem.\n\n  https://lkml.org/lkml/2010/10/23/86\n\n  And a quick fix moved blk_throtl_exit() to blk_release_queue().\n\n        commit 7ad58c028652753814054f4e3ac58f925e7343f4\n        Author: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n        Date:   Sat Oct 23 20:40:26 2010 +0200\n\n        block: fix use-after-free bug in blk throttle code\n\nThis patch reverts above change and does not try to shutdown the\nthrotl work in blk_sync_queue(). By avoiding call to\nthrotl_shutdown_timer_wq() from blk_sync_queue(), we should also avoid\nthe problem reported by Ingo.\n\nblk_sync_queue() seems to be used only by md driver and it seems to be\nusing it to make sure q-\u003eunplug_fn is not called as md registers its\nown unplug functions and it is about to free up the data structures\nused by unplug_fn(). Block throttle does not call back into unplug_fn()\nor into md. So there is no need to cancel blk throttle work.\n\nIn fact I think cancelling block throttle work is bad because it might\nhappen that some bios are throttled and scheduled to be dispatched later\nwith the help of pending work and if work is cancelled, these bios might\nnever be dispatched.\n\nBlock layer also uses blk_sync_queue() during blk_cleanup_queue() and\nblk_release_queue() time. That should be safe as we are also calling\nblk_throtl_exit() which should make sure all the throttling related\ndata structures are cleaned up.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\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": "6fae9c25134baffbeeb20031479e7ff6f6d8eec0",
      "tree": "c9ab89992ce5293a43cd455a81dc8a5926a28a5e",
      "parents": [
        "c186794dbb466b45cf40f942f2d09d6d5b4b0e42",
        "f5412be599602124d2bdd49947b231dd77c0bf99"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:04:39 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:04:39 2011 -0500"
      },
      "message": "Merge commit \u0027v2.6.38-rc6\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "450adcbe518ab3a3953d8475309525d22de77cba",
      "tree": "352fd47d75b86804e590fd88c09f953a798ba8b0",
      "parents": [
        "3e1f2356ce231488dc1fa844e5ce91bcb59fc2a1"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Mar 01 13:40:54 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 13:41:53 2011 -0500"
      },
      "message": "blk-throttle: Do not use kblockd workqueue for throtl work\n\no Dominik Klein reported a system hang issue while doing some blkio\n  throttling testing.\n\n  https://lkml.org/lkml/2011/2/24/173\n\no Some tracing revealed that CFQ was not dispatching any more jobs as\n  queue unplug was not happening. And queue unplug was not happening\n  because unplug work was not being called as there was one throttling\n  work on same cpu which as not finished yet. And throttling work had not\n  finished as it was tyring to dispatch a bio to CFQ but all the request\n  descriptors were consume to it was put to sleep.\n\no So basically it is a cyclic dependecny between CFQ unplug work and\n  throtl dispatch work. Tejun suggested that use separate workqueue for\n  such cases.\n\no This patch uses a separate workqueue for throttle related work and\n  does not rely on kblockd workqueue anymore.\n\nCc: stable@kernel.org\nReported-by: Dominik Klein \u003cdk@in-telegence.net\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c186794dbb466b45cf40f942f2d09d6d5b4b0e42",
      "tree": "07ccd819bb6cced2c19053d2ed97ebaac88f824e",
      "parents": [
        "9d5a4e946ce5352f19400b6370f4cd8e72806278"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Feb 11 11:08:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Feb 11 11:08:00 2011 +0100"
      },
      "message": "block: share request flush fields with  elevator_private\n\nFlush requests are never put on the IO scheduler.  Convert request\nstructure\u0027s elevator_private* into an array and have the flush fields\nshare a union with it.\n\nReclaim the space lost in \u0027struct request\u0027 by moving \u0027completion_data\u0027\nback in the union with \u0027rb_node\u0027.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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": "275220f0fcff1adf28a717076e00f575edf05fda",
      "tree": "d249bccc80c64443dab211639050c4fb14332648",
      "parents": [
        "fe3c560b8a22cb28e54fe8950abef38e88d75831",
        "81c5e2ae33c4b19e53966b427e33646bf6811830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block: (43 commits)\n  block: ensure that completion error gets properly traced\n  blktrace: add missing probe argument to block_bio_complete\n  block cfq: don\u0027t use atomic_t for cfq_group\n  block cfq: don\u0027t use atomic_t for cfq_queue\n  block: trace event block fix unassigned field\n  block: add internal hd part table references\n  block: fix accounting bug on cross partition merges\n  kref: add kref_test_and_get\n  bio-integrity: mark kintegrityd_wq highpri and CPU intensive\n  block: make kblockd_workqueue smarter\n  Revert \"sd: implement sd_check_events()\"\n  block: Clean up exit_io_context() source code.\n  Fix compile warnings due to missing removal of a \u0027ret\u0027 variable\n  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n  block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n  cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n  fs/splice: Pull buf-\u003eops-\u003econfirm() from splice_from_pipe actors\n  cdrom: export cdrom_check_events()\n  sd: implement sd_check_events()\n  sr: implement sr_check_events()\n  ...\n"
    },
    {
      "commit": "81c5e2ae33c4b19e53966b427e33646bf6811830",
      "tree": "a602a6dd100165c8948bfa713e6f0b422dcba5d8",
      "parents": [
        "797a455d2c682476c3797dbfecf5bf84c1e3b9d3",
        "fcc57045d53edc35bcce456e60ac4aa802712934"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jan 13 14:47:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jan 13 14:47:54 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.38/event-handling\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "09e099d4bafea3b15be003d548bdf94b4b6e0e17",
      "tree": "a4199338ad73e88c0863bbfc6604c4972055f16d",
      "parents": [
        "e4a683c899cd5a49f8d684a054c95bd115a0c005"
      ],
      "author": {
        "name": "Jerome Marchand",
        "email": "jmarchan@redhat.com",
        "time": "Wed Jan 05 16:57:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 05 16:57:38 2011 +0100"
      },
      "message": "block: fix accounting bug on cross partition merges\n\n/proc/diskstats would display a strange output as follows.\n\n$ cat /proc/diskstats |grep sda\n   8       0 sda 90524 7579 102154 20464 0 0 0 0 0 14096 20089\n   8       1 sda1 19085 1352 21841 4209 0 0 0 0 4294967064 15689 4293424691\n                                                ~~~~~~~~~~\n   8       2 sda2 71252 3624 74891 15950 0 0 0 0 232 23995 1562390\n   8       3 sda3 54 487 2188 92 0 0 0 0 0 88 92\n   8       4 sda4 4 0 8 0 0 0 0 0 0 0 0\n   8       5 sda5 81 2027 2130 138 0 0 0 0 0 87 137\n\nIts reason is the wrong way of accounting hd_struct-\u003ein_flight. When a bio is\nmerged into a request belongs to different partition by ELEVATOR_FRONT_MERGE.\n\nThe detailed root cause is as follows.\n\nAssuming that there are two partition, sda1 and sda2.\n\n1. A request for sda2 is in request_queue. Hence sda1\u0027s hd_struct-\u003ein_flight\n   is 0 and sda2\u0027s one is 1.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n2. A bio belongs to sda1 is issued and is merged into the request mentioned on\n   step1 by ELEVATOR_BACK_MERGE. The first sector of the request is changed\n   from sda2 region to sda1 region. However the two partition\u0027s\n   hd_struct-\u003ein_flight are not changed.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n3. The request is finished and blk_account_io_done() is called. In this case,\n   sda2\u0027s hd_struct-\u003ein_flight, not a sda1\u0027s one, is decremented.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |         -1\n   sda2 |          1\n   ---------------------------\n\nThe patch fixes the problem by caching the partition lookup\ninside the request structure, hence making sure that the increment\nand decrement will always happen on the same partition struct. This\nalso speeds up IO with accounting enabled, since it cuts down on\nthe number of lookups we have to do.\n\nAlso add a refcount to struct hd_struct to keep the partition in\nmemory as long as users exist. We use kref_test_and_get() to ensure\nwe don\u0027t add a reference to a partition which is going away.\n\nSigned-off-by: Jerome Marchand \u003cjmarchan@redhat.com\u003e\nSigned-off-by: Yasuaki Ishimatsu \u003cisimatu.yasuaki@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "72d4cd9f38b5ed96b75df4c622be25e1c2648dd3",
      "tree": "a229645cbbc63aad3fa5b57ea9f092e618588890",
      "parents": [
        "e692cb668fdd5a712c6ed2a2d6f2a36ee83997b4"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Dec 17 08:34:20 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:36:01 2010 +0100"
      },
      "message": "block: max hardware sectors limit wrapper\n\nImplement blk_limits_max_hw_sectors() and make\nblk_queue_max_hw_sectors() a wrapper around it.\n\nDM needs this to avoid setting queue_limits\u0027 max_hw_sectors and\nmax_sectors directly.  dm_set_device_limits() now leverages\nblk_limits_max_hw_sectors() logic to establish the appropriate\nmax_hw_sectors minimum (PAGE_SIZE).  Fixes issue where DM was\nincorrectly setting max_sectors rather than max_hw_sectors (which\ncaused dm_merge_bvec()\u0027s max_hw_sectors check to be ineffective).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nAcked-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e692cb668fdd5a712c6ed2a2d6f2a36ee83997b4",
      "tree": "accf682fe5e1388f305b5fc364a931dfda5f3fb9",
      "parents": [
        "04a6b516cdc6efc2500b52a540cf65be8c5aaf9e"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Dec 01 19:41:49 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:35:53 2010 +0100"
      },
      "message": "block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead\n\nWhen stacking devices, a request_queue is not always available. This\nforced us to have a no_cluster flag in the queue_limits that could be\nused as a carrier until the request_queue had been set up for a\nmetadevice.\n\nThere were several problems with that approach. First of all it was up\nto the stacking device to remember to set queue flag after stacking had\ncompleted. Also, the queue flag and the queue limits had to be kept in\nsync at all times. We got that wrong, which could lead to us issuing\ncommands that went beyond the max scatterlist limit set by the driver.\n\nThe proper fix is to avoid having two flags for tracking the same thing.\nWe deprecate QUEUE_FLAG_CLUSTER and use the queue limit directly in the\nblock layer merging functions. The queue_limit \u0027no_cluster\u0027 is turned\ninto \u0027cluster\u0027 to avoid double negatives and to ease stacking.\nClustering defaults to being enabled as before. The queue flag logic is\nremoved from the stacking function, and explicitly setting the cluster\nflag is no longer necessary in DM and MD.\n\nReported-by: Ed Lin \u003ced.lin@promise.com\u003e\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "77ea887e433ad8389d416826936c110fa7910f80",
      "tree": "ac9d32aabcebf5a465acae2066b12c9335b5ca6f",
      "parents": [
        "d2bf1b6723ed0eab378363649d15b7893bf14e91"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 08 20:57:37 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Dec 16 17:53:38 2010 +0100"
      },
      "message": "implement in-kernel gendisk events handling\n\nCurrently, media presence polling for removeable block devices is done\nfrom userland.  There are several issues with this.\n\n* Polling is done by periodically opening the device.  For SCSI\n  devices, the command sequence generated by such action involves a\n  few different commands including TEST_UNIT_READY.  This behavior,\n  while perfectly legal, is different from Windows which only issues\n  single command, GET_EVENT_STATUS_NOTIFICATION.  Unfortunately, some\n  ATAPI devices lock up after being periodically queried such command\n  sequences.\n\n* There is no reliable and unintrusive way for a userland program to\n  tell whether the target device is safe for media presence polling.\n  For example, polling for media presence during an on-going burning\n  session can make it fail.  The polling program can avoid this by\n  opening the device with O_EXCL but then it risks making a valid\n  exclusive user of the device fail w/ -EBUSY.\n\n* Userland polling is unnecessarily heavy and in-kernel implementation\n  is lighter and better coordinated (workqueue, timer slack).\n\nThis patch implements framework for in-kernel disk event handling,\nwhich includes media presence polling.\n\n* bdops-\u003echeck_events() is added, which supercedes -\u003emedia_changed().\n  It should check whether there\u0027s any pending event and return if so.\n  Currently, two events are defined - DISK_EVENT_MEDIA_CHANGE and\n  DISK_EVENT_EJECT_REQUEST.  -\u003echeck_events() is guaranteed not to be\n  called parallelly.\n\n* gendisk-\u003eevents and -\u003easync_events are added.  These should be\n  initialized by block driver before passing the device to add_disk().\n  The former contains the mask of all supported events and the latter\n  the mask of all events which the device can report without polling.\n  /sys/block/*/events[_async] export these to userland.\n\n* Kernel parameter block.events_dfl_poll_msecs controls the system\n  polling interval (default is 0 which means disable) and\n  /sys/block/*/events_poll_msecs control polling intervals for\n  individual devices (default is -1 meaning use system setting).  Note\n  that if a device can report all supported events asynchronously and\n  its polling interval isn\u0027t explicitly set, the device won\u0027t be\n  polled regardless of the system polling interval.\n\n* If a device is opened exclusively with write access, event checking\n  is automatically disabled until all write exclusive accesses are\n  released.\n\n* There are event \u0027clearing\u0027 events.  For example, both of currently\n  defined events are cleared after the device has been successfully\n  opened.  This information is passed to -\u003echeck_events() callback\n  using @clearing argument as a hint.\n\n* Event checking is always performed from system_nrt_wq and timer\n  slack is set to 25% for polling.\n\n* Nothing changes for drivers which implement -\u003emedia_changed() but\n  not -\u003echeck_events().  Going forward, all drivers will be converted\n  to -\u003echeck_events() and -\u003emedia_change() will be dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2bf1b6723ed0eab378363649d15b7893bf14e91",
      "tree": "4a4144b09ab747ad661605aa761753d9a805e77f",
      "parents": [
        "dddd9dc340ae1a41d90e084529ca979c77c4ecfe"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 08 20:57:36 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Dec 16 17:53:38 2010 +0100"
      },
      "message": "block: move register_disk() and del_gendisk() to block/genhd.c\n\nThere\u0027s no reason for register_disk() and del_gendisk() to be in\nfs/partitions/check.c.  Move both to genhd.c.  While at it, collapse\nunlink_gendisk(), which was artificially in a separate function due to\ngenhd.c / check.c split, into del_gendisk().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    }
  ],
  "next": "02e031cbc843b010e72fcc05c76113c688b2860f"
}
