)]}'
{
  "log": [
    {
      "commit": "ad3d9d7ede04a9c71be7a9fe1a23961817f371f7",
      "tree": "33b0eded3b689020529cf8c0d4febf956ff10140",
      "parents": [
        "401a18e92ce32cd0ddfa5738899ca2b8114f2bbf"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 16:58:59 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 17:04:08 2011 +0100"
      },
      "message": "block: fix issue with calling blk_stop_queue() from the request_fn handler\n\nWhen the queue work handler was converted to delayed work, the\nstopping was inadvertently made sync as well. Change this back\nto being async stop, using __cancel_delayed_work() instead of\ncancel_delayed_work().\n\nReported-by: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nReported-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "401a18e92ce32cd0ddfa5738899ca2b8114f2bbf",
      "tree": "f8c7dbb61a7a90ae43065075b640512899fafd28",
      "parents": [
        "6c5103890057b1bb781b26b7aae38d33e4c517d8"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 16:57:52 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 17:04:08 2011 +0100"
      },
      "message": "block: fix bug with inserting flush requests as sort/merge\n\nWith the introduction of the on-stack plugging, we would assume\nthat any request being inserted was a normal file system request.\nAs flush/fua requires a special insert mode, this caused problems.\n\nFix this up by checking for this in flush_plug_list() and use\nthe appropriate insert mechanism.\n\nBig thanks goes to Markus Tripplesdorf for tirelessly testing\npatches, and to Sergey Senozhatsky for helping find the real\nissue.\n\nReported-by: Markus Tripplesdorf \u003cmarkus@trippelsdorf.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6c5103890057b1bb781b26b7aae38d33e4c517d8",
      "tree": "e6e57961dcddcb5841acb34956e70b9dc696a880",
      "parents": [
        "3dab04e6978e358ad2307bca563fabd6c5d2c58b",
        "9d2e157d970a73b3f270b631828e03eb452d525e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block: (65 commits)\n  Documentation/iostats.txt: bit-size reference etc.\n  cfq-iosched: removing unnecessary think time checking\n  cfq-iosched: Don\u0027t clear queue stats when preempt.\n  blk-throttle: Reset group slice when limits are changed\n  blk-cgroup: Only give unaccounted_time under debug\n  cfq-iosched: Don\u0027t set active queue in preempt\n  block: fix non-atomic access to genhd inflight structures\n  block: attempt to merge with existing requests on plug flush\n  block: NULL dereference on error path in __blkdev_get()\n  cfq-iosched: Don\u0027t update group weights when on service tree\n  fs: assign sb-\u003es_bdi to default_backing_dev_info if the bdi is going away\n  block: Require subsystems to explicitly allocate bio_set integrity mempool\n  jbd2: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  jbd: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  fs: make fsync_buffers_list() plug\n  mm: make generic_writepages() use plugging\n  blk-cgroup: Add unaccounted time to timeslice_used.\n  block: fixup plugging stubs for !CONFIG_BLOCK\n  block: remove obsolete comments for blkdev_issue_zeroout.\n  blktrace: Use rq-\u003ecmd_flags directly in blk_add_trace_rq.\n  ...\n\nFix up conflicts in fs/{aio.c,super.c}\n"
    },
    {
      "commit": "c4ade94fc00f8b34589719d8a347f658b6d3951e",
      "tree": "24868fc90f85ce3cba1b8218e771ce00506c3f51",
      "parents": [
        "62a37f6badd1ac97ba07d543b5d4be2f9cb17217"
      ],
      "author": {
        "name": "Li, Shaohua",
        "email": "shaohua.li@intel.com",
        "time": "Wed Mar 23 08:30:34 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 23 08:30:34 2011 +0100"
      },
      "message": "cfq-iosched: removing unnecessary think time checking\n\nRemoving think time checking. A high thinktime queue might means the queue\ndispatches several requests and then do away. Limitting such queue seems\nmeaningless. And also this can simplify code. This is suggested by Vivek.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "62a37f6badd1ac97ba07d543b5d4be2f9cb17217",
      "tree": "b659ac7b4c9fce787694bb8a33affa229d1cd552",
      "parents": [
        "04521db04e9a11e74b0252d222051cb194487f4d"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Wed Mar 23 08:25:44 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 23 08:25:44 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t clear queue stats when preempt.\n\nFor v2, I added back lines to cfq_preempt_queue() that were removed\nduring updates for accounting unaccounted_time. Thanks for pointing out\nthat I\u0027d missed these, Vivek.\n\nPrevious commit \"cfq-iosched: Don\u0027t set active queue in preempt\" wrongly\ncleared stats for preempting queues when it shouldn\u0027t have, because when\nwe choose a queue to preempt, it still isn\u0027t necessarily scheduled next.\n\nThanks to Vivek Goyal for figuring this out and understanding how the\npreemption code works.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "04521db04e9a11e74b0252d222051cb194487f4d",
      "tree": "4a07811529a16f9e25c4de44ef0bf2621d360249",
      "parents": [
        "9026e521c0da0731eb31f9f9022dd00cc3cd8885"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Mar 22 21:54:29 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:55:00 2011 +0100"
      },
      "message": "blk-throttle: Reset group slice when limits are changed\n\nLina reported that if throttle limits are initially very high and then\ndropped, then no new bio might be dispatched for a long time. And the\nreason being that after dropping the limits we don\u0027t reset the existing\nslice and do the rate calculation with new low rate and account the bios\ndispatched at high rate. To fix it, reset the slice upon rate change.\n\nhttps://lkml.org/lkml/2011/3/10/298\n\nAnother problem with very high limit is that we never queued the\nbio on throtl service tree. That means we kept on extending the\ngroup slice but never trimmed it. Fix that also by regulary\ntrimming the slice even if bio is not being queued up.\n\nReported-by: Lina Lu \u003clulina_nuaa@foxmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9026e521c0da0731eb31f9f9022dd00cc3cd8885",
      "tree": "b2e9f44d22d009efcac6bf4a25a620017ac903a0",
      "parents": [
        "eda5e0c91fed2d2a38a341b0957263406d330274"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 22 21:26:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:26:54 2011 +0100"
      },
      "message": "blk-cgroup: Only give unaccounted_time under debug\n\nThis change moves unaccounted_time to only be reported when\nCONFIG_DEBUG_BLK_CGROUP is true.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "eda5e0c91fed2d2a38a341b0957263406d330274",
      "tree": "d09564b4ef18dc8f9703a3d67def655b24b992c8",
      "parents": [
        "1e9bb8808ac11094d711d20d580e7b45a4992d0c"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 22 21:26:49 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:26:49 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t set active queue in preempt\n\nCommit \"Add unaccounted time to timeslice_used\" changed the behavior of\ncfq_preempt_queue to set cfqq active. Vivek pointed out that other\npreemption rules might get involved, so we shouldn\u0027t manually set which\nqueue is active.\n\nThis cleans up the code to just clear the queue stats at preemption\ntime.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5e84ea3a9c662dc2d7a48703a4468fad954a3b7f",
      "tree": "3fa0fb26a7c8a970213584104cc2498ef46d60a3",
      "parents": [
        "4345caba340f051e10847924fc078ae18ed6695c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 21 10:14:27 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 21 10:14:27 2011 +0100"
      },
      "message": "block: attempt to merge with existing requests on plug flush\n\nOne of the disadvantages of on-stack plugging is that we potentially\nlose out on merging since all pending IO isn\u0027t always visible to\neverybody. When we flush the on-stack plugs, right now we don\u0027t do\nany checks to see if potential merge candidates could be utilized.\n\nCorrect this by adding a new insert variant, ELEVATOR_INSERT_SORT_MERGE.\nIt works just ELEVATOR_INSERT_SORT, but first checks whether we can\nmerge with an existing request before doing the insertion (if we fail\nmerging).\n\nThis fixes a regression with multiple processes issuing IO that\ncan be merged.\n\nThanks to Shaohua Li \u003cshaohua.li@intel.com\u003e for testing and fixing\nan accounting bug.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c55d267de274d308927b60c3e740c1a826832317",
      "tree": "21b53a8c725d9f9650f60d94b349459d5b8dae10",
      "parents": [
        "61ef46fd45c3c62dc7c880a45dd2aa841b9af8fb",
        "bc898c97f7ba24def788d9f80786cf028a197122"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 17:54:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 17:54:40 2011 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (170 commits)\n  [SCSI] scsi_dh_rdac: Add MD36xxf into device list\n  [SCSI] scsi_debug: add consecutive medium errors\n  [SCSI] libsas: fix ata list corruption issue\n  [SCSI] hpsa: export resettable host attribute\n  [SCSI] hpsa: move device attributes to avoid forward declarations\n  [SCSI] scsi_debug: Logical Block Provisioning (SBC3r26)\n  [SCSI] sd: Logical Block Provisioning update\n  [SCSI] Include protection operation in SCSI command trace\n  [SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try)\n  [SCSI] target: Fix volume size misreporting for volumes \u003e 2TB\n  [SCSI] bnx2fc: Broadcom FCoE offload driver\n  [SCSI] fcoe: fix broken fcoe interface reset\n  [SCSI] fcoe: precedence bug in fcoe_filter_frames()\n  [SCSI] libfcoe: Remove stale fcoe-netdev entries\n  [SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h\n  [SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument\n  [SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs\n  [SCSI] Revert \"[SCSI] libfc: fix exchange being deleted when the abort itself is timed out\"\n  [SCSI] libfc: Fixing a memory leak when destroying an interface\n  [SCSI] megaraid_sas: Version and Changelog update\n  ...\n\nFix up trivial conflicts due to whitespace differences in\ndrivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}\n"
    },
    {
      "commit": "8184f93eced1e304721c2a55c00d87d5a14f8907",
      "tree": "b5ed43533eee883bc25920c191cb095584d29822",
      "parents": [
        "95f28604a65b1c40b6c6cd95e58439cd7ded3add"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Thu Mar 17 16:12:36 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 17 16:12:36 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t update group weights when on service tree\n\nVersion 3 is updated to apply to for-2.6.39/core.\n\nFor version 2, I took Vivek\u0027s advice and made sure we update the group\nweight from cfq_group_service_tree_add().\n\nIf a weight was updated while a group is on the service tree, the\ncalculation for the total weight of the service tree can be adjusted\nimproperly, which either leads to bad service tree weights, or\npotentially crashes (if total_weight becomes 0).\n\nThis patch defers updates to the weight until a group is off the service\ntree.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "167400d34070ebbc408dc0f447c4ddb4bf837360",
      "tree": "19100b0511a7e3e18f6f61d90a5fe5f1c40f59c4",
      "parents": [
        "1f940bdfc0d03265d178d9dfd840d854819f797d"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Sat Mar 12 16:54:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Mar 12 16:54:00 2011 +0100"
      },
      "message": "blk-cgroup: Add unaccounted time to timeslice_used.\n\nThere are two kind of times that tasks are not charged for: the first\nseek and the extra time slice used over the allocated timeslice. Both\nof these exported as a new unaccounted_time stat.\n\nI think it would be good to have this reported in \u0027time\u0027 as well, but\nthat is probably a separate discussion.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "eba2ed9c9636d9e7ed203a2498ed230b48341709",
      "tree": "c989fdc098b09947888f67badbfeecb1e04cd1fc",
      "parents": [
        "805f6b5e1cbfedfb9b3d354013e7f4b13a79270f"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Fri Mar 11 20:13:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 20:13:54 2011 +0100"
      },
      "message": "block: remove obsolete comments for blkdev_issue_zeroout.\n\nbarrier is already removed, so remove the obsolete comments\nin blkdev_issue_zeroout.\n\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0aeea18964173715a1037034ef6838198f319319",
      "tree": "62ff402a41a675f0269bf5172d14b7db8c4e47ee",
      "parents": [
        "9179746652faf0aba07b8b7f770dcf29892a24c6"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri Mar 11 10:23:53 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 15:36:08 2011 +0100"
      },
      "message": "block: fix mis-synchronisation in blkdev_issue_zeroout()\n\nBZ29402\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d29402\n\nWe can hit serious mis-synchronization in bio completion path of\nblkdev_issue_zeroout() leading to a panic.\n\nThe problem is that when we are going to wait_for_completion() in\nblkdev_issue_zeroout() we check if the bb.done equals issued (number of\nsubmitted bios). If it does, we can skip the wait_for_completition()\nand just out of the function since there is nothing to wait for.\nHowever, there is a ordering problem because bio_batch_end_io() is\ncalling atomic_inc(\u0026bb-\u003edone) before complete(), hence it might seem to\nblkdev_issue_zeroout() that all bios has been completed and exit. At\nthis point when bio_batch_end_io() is going to call complete(bb-\u003ewait),\nbb and wait does not longer exist since it was allocated on stack in\nblkdev_issue_zeroout() \u003d\u003d\u003e panic!\n\n(thread 1)                      (thread 2)\nbio_batch_end_io()              blkdev_issue_zeroout()\n  if(bb) {                      ...\n    if (bb-\u003eend_io)             ...\n      bb-\u003eend_io(bio, err);     ...\n    atomic_inc(\u0026bb-\u003edone);      ...\n    ...                         while (issued !\u003d atomic_read(\u0026bb.done))\n    ...                         (let issued \u003d\u003d bb.done)\n    ...                         (do the rest of the function)\n    ...                         return ret;\n    complete(bb-\u003ewait);\n    ^^^^^^^^\n    panic\n\nWe can fix this easily by simplifying bio_batch and completion counting.\n\nAlso remove bio_end_io_t *end_io since it is not used.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nReported-by: Eric Whitney \u003ceric.whitney@hp.com\u003e\nTested-by: Eric Whitney \u003ceric.whitney@hp.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCC: Dmitry Monakhov \u003cdmonakhov@openvz.org\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": "69d60eb96ae8a73cf9b79cf28051caf973006011",
      "tree": "254be7302abbd6a21d4f54cfdad6a0af6db282d0",
      "parents": [
        "721a9602e6607417c6bc15b18e97a2f35266c690"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Mar 09 08:27:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:27 2011 +0100"
      },
      "message": "blk-throttle: Use blk_plug in throttle dispatch\n\nUse plug in throttle dispatch also as we are dispatching a bunch of\nbios in throttle context and some of them might merge.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "721a9602e6607417c6bc15b18e97a2f35266c690",
      "tree": "4987991e43f35b8b3b685fea0040c5265b578996",
      "parents": [
        "cf15900e1209d5b46ec2d24643adbf561830935f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 09 11:56:30 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:27 2011 +0100"
      },
      "message": "block: kill off REQ_UNPLUG\n\nWith the plugging now being explicitly controlled by the\nsubmitter, callers need not pass down unplugging hints\nto the block layer. If they want to unplug, it\u0027s because they\nmanually plugged on their own - in which case, they should just\nunplug at will.\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": "facc31ddc3570a3a0d8951c94f16b898e01b464d",
      "tree": "23b8294910c26cabb4335a418b7ca27e52eaaaa8",
      "parents": [
        "df457f845e5449be2e7d96668791f789b3770ac7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 09 19:54:27 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 09 19:54:27 2011 +0100"
      },
      "message": "block: Don\u0027t implicitly trigger event check on disk_unblock_events()\n\nCurrently, disk_unblock_events() implicitly kick event check if the\nblock count reaches zero.  This behavior is not described in the\ncomment and hinders with future changes.  Make the unblocker\nexplicitly check events by calling disk_check_events() as necessary.\n\nThis patch doesn\u0027t cause any behavior difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\n"
    },
    {
      "commit": "df457f845e5449be2e7d96668791f789b3770ac7",
      "tree": "5279d8ad1379ab890a90453d5018bb473c90d7d5",
      "parents": [
        "df677140281beb608f6748c341af7612f7bfe7a0"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 08 19:45:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 08 19:45:00 2011 +0100"
      },
      "message": "blk-cgroup: Lower minimum weight from 100 to 10.\n\nWe\u0027ve found that we still get good, useful isolation at weights this\nlow. I\u0027d like to adjust the minimum so that any other changes can take\nthese values into account.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "de701c74a34005e637e1ca2634fbf28fd1debba2",
      "tree": "45a4af16e2a76cbf5866cfb3f284956988918a13",
      "parents": [
        "231d704b4ab7491473c0b1a9cd0c6e0d1cba85b9"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 07 21:09:32 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 21:09:32 2011 +0100"
      },
      "message": "blk-throttle: Some cleanups and race fixes in limit  update code\n\nWhen throttle group limits are updated through cgroups, a thread is\nwoken up to process these updates. While reviewing that code, oleg noted\ncouple of race conditions existed in the code and he also suggested that\ncode can be simplified.\n\nThis patch fixes the races simplifies the code based on Oleg\u0027s suggestions:\n\n\t- Use xchg().\n\t- Introduced a common function throtl_update_blkio_group_common()\n          which is shared now by all iops/bps update functions.\n\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n\nFixed a merge issue, throtl_schedule_delayed_work() takes throtl_data\nas the argument now, not the queue.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "231d704b4ab7491473c0b1a9cd0c6e0d1cba85b9",
      "tree": "a4666d35b6e11f92eb0fc4506bdd7f65185a7aa6",
      "parents": [
        "b873c5d692d4d5453cceed18bb06c62bb1a73ac0"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 07 21:05:14 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 21:05:14 2011 +0100"
      },
      "message": "blk-throttle: process limit change only through one function\n\nWith the help of cgroup interface one can go and upate the bps/iops\nlimits of existing group. Once the limits are udpated, a thread is\nwoken up to see if some blocked group needs recalculation based on new\nlimits and needs to be requeued.\n\nThere was also a piece of code where I was checking for group limit\nupdate when a fresh bio comes in. This patch gets rid of that piece of\ncode and keeps processing the limit change at one place\nthrotl_process_limit_change().  It just keeps the code simple and easy\nto understand.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b873c5d692d4d5453cceed18bb06c62bb1a73ac0",
      "tree": "f9d5816bc26ced37f187a141ee6c74c7b8e00fcf",
      "parents": [
        "a60327107b56573c305ecc78e471dbdbb4d2f426",
        "e83a46bbb1d4c03defd733a64b727632a40059ad"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:40:21 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:40:21 2011 +0100"
      },
      "message": "Merge branch \u0027block-for-2.6.39-core\u0027 of ssh://master.kernel.org/pub/scm/linux/kernel/git/tj/misc into for-2.6.39/core\n"
    },
    {
      "commit": "a60327107b56573c305ecc78e471dbdbb4d2f426",
      "tree": "239521730642bc2f263d1daa9c49737467d6c1b9",
      "parents": [
        "ef8a41df8c140f10108de75b01b6369d6e49113c"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Mon Mar 07 09:28:09 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:28:09 2011 +0100"
      },
      "message": "cfq-iosched: Fix update_vdisktime logic\n\nThe update_vdisktime logic is broken since commit\nb54ce60eb7f61f8e314b8b241b0469eda3bb1d42, st-\u003emin_vdisktime never makes\na progress. Fix it.\n\nThanks Vivek for pointing it out.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfen@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ef8a41df8c140f10108de75b01b6369d6e49113c",
      "tree": "2407ce27d3b51205a56193f26db1c1b40a5c556f",
      "parents": [
        "93803e0140c6216b68fe926ccc611297120da273"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Mar 07 09:26:29 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:26:29 2011 +0100"
      },
      "message": "cfq-iosched: give busy sync queue no dispatch limit\n\nIf there are a sync and an async queue and the sync queue\u0027s think time\nis small, we can ignore the sync queue\u0027s dispatch quantum. Because the\nsync queue will always preempt the async queue, we don\u0027t need to care\nabout async\u0027s latency.  This can fix a performance regression of\naiostress test, which is introduced by commit f8ae6e3eb825. The issue\nshould exist even without the commit, but the commit amplifies the\nimpact.\n\nThe initial post does the same optimization for RT queue too, but since\nI have no real workload for it, Vivek suggests to drop it.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "93803e0140c6216b68fe926ccc611297120da273",
      "tree": "c70e354f3029a00f83293b0d6bedf6738437ebab",
      "parents": [
        "da527770007fce8e4541947d47918248286da875"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 08:59:06 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 08:59:06 2011 +0100"
      },
      "message": "cfq-iosched: fix race in cfq_set_request()\n\nWe need to hold the queue lock over the reference increment,\nit\u0027s not atomic anymore.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e83a46bbb1d4c03defd733a64b727632a40059ad",
      "tree": "c4bc4822b2d3af1bf38095f531adc0a2aac054a5",
      "parents": [
        "da527770007fce8e4541947d47918248286da875",
        "fd51469fb68b987032e46297e0a4fe9020063c20"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "message": "Merge branch \u0027for-linus\u0027 of ../linux-2.6-block into block-for-2.6.39/core\n\nThis merge creates two set of conflicts.  One is simple context\nconflicts caused by removal of throtl_scheduled_delayed_work() in\nfor-linus and removal of throtl_shutdown_timer_wq() in\nfor-2.6.39/core.\n\nThe other is caused by commit 255bb490c8 (block: blk-flush shouldn\u0027t\ncall directly into q-\u003erequest_fn() __blk_run_queue()) in for-linus\ncrashing with FLUSH reimplementation in for-2.6.39/core.  The conflict\nisn\u0027t trivial but the resolution is straight-forward.\n\n* __blk_run_queue() calls in flush_end_io() and flush_data_end_io()\n  should be called with @force_kblockd set to %true.\n\n* elv_insert() in blk_kick_flush() should use\n  %ELEVATOR_INSERT_REQUEUE.\n\nBoth changes are to avoid invoking -\u003erequest_fn() directly from\nrequest completion path and closely match the changes in the commit\n255bb490c8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "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": "c94a96ac93b4f5b8d1ff8430b1afa1a25610cf53",
      "tree": "3cc138b16df4c0802ec42868a6d1f2eed42ba695",
      "parents": [
        "53f22956effe1c9e7961b8c6e4362ecca5e460b7"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Mar 02 19:04:42 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 19:06:49 2011 -0500"
      },
      "message": "block: Initialize -\u003equeue_lock to internal lock at queue allocation time\n\nThere does not seem to be a clear convention whether q-\u003equeue_lock is\ninitialized or not when blk_cleanup_queue() is called. In the past it\nwas not necessary but now blk_throtl_exit() takes up queue lock by\ndefault and needs queue lock to be available.\n\nIn fact elevator_exit() code also has similar requirement just that it\nis less stringent in the sense that elevator_exit() is called only if\nelevator is initialized.\n\nTwo problems have been noticed because of ambiguity about spin lock\nstatus.\n\n      - If a driver calls blk_alloc_queue() and then soon calls\n        blk_cleanup_queue() almost immediately, (because some other\n\tdriver structure allocation failed or some other error happened)\n\tthen blk_throtl_exit() will run into issues as queue lock is not\n\tinitialized. Loop driver ran into this issue recently and I\n\tnoticed error paths in md driver too. Similar error paths should\n\texist in other drivers too.\n\n      - If some driver provided external spin lock and zapped the lock\n        before blk_cleanup_queue(), then it can lead to issues.\n\nSo this patch initializes the default queue lock at queue allocation time.\n\nblock throttling code is one of the users of queue lock and it is\ninitialized at the queue allocation time, so it makes sense to\ninitialize -\u003equeue_lock also to internal lock. A driver can overide that\nlock later. This will take care of the issue where a driver does not have\nto worry about initializing the queue lock to default before calling\nblk_cleanup_queue()\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "53f22956effe1c9e7961b8c6e4362ecca5e460b7",
      "tree": "a2f897a90971f68f0e10d065fe3289a243f2aa19",
      "parents": [
        "0bbfeb8320421989d3e12bd95fae86b9ac0712aa"
      ],
      "author": {
        "name": "Liu Yuan",
        "email": "tailai.ly@taobao.com",
        "time": "Wed Mar 02 11:00:15 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 11:00:15 2011 -0500"
      },
      "message": "block/genhd: Change some numerals into macros\n\nRename the numerals in the diskstats_show() into the macros.\n\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Liu Yuan \u003ctailai.ly@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "255bb490c8c27eed484d538efe6ef6a7473bd3f6",
      "tree": "630289b9de253a1f0575f29d2de019494016ff79",
      "parents": [
        "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:06 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:06 2011 -0500"
      },
      "message": "block: blk-flush shouldn\u0027t call directly into q-\u003erequest_fn() __blk_run_queue()\n\nblk-flush decomposes a flush into sequence of multiple requests.  On\ncompletion of a request, the next one is queued; however, block layer\nmust not implicitly call into q-\u003erequest_fn() directly from completion\npath.  This makes the queue behave unexpectedly when seen from the\ndrivers and violates the assumption that q-\u003erequest_fn() is called\nwith process context + queue_lock.\n\nThis patch makes blk-flush the following two changes to make sure\nq-\u003erequest_fn() is not called directly from request completion path.\n\n- blk_flush_complete_seq_end_io() now asks __blk_run_queue() to always\n  use kblockd instead of calling directly into q-\u003erequest_fn().\n\n- queue_next_fseq() uses ELEVATOR_INSERT_REQUEUE instead of\n  ELEVATOR_INSERT_FRONT so that elv_insert() doesn\u0027t try to unplug the\n  request queue directly.\n\nReported by Jan in the following threads.\n\n http://thread.gmane.org/gmane.linux.ide/48778\n http://thread.gmane.org/gmane.linux.ide/48786\n\nstable: applicable to v2.6.37.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76",
      "tree": "c8071cf8cc1aef9e776697b72aaca5a22a47c3d7",
      "parents": [
        "291d24f6d9e7bbef81454fade8a44720665c7302"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "message": "block: add @force_kblockd to __blk_run_queue()\n\n__blk_run_queue() automatically either calls q-\u003erequest_fn() directly\nor schedules kblockd depending on whether the function is recursed.\nblk-flush implementation needs to be able to explicitly choose\nkblockd.  Add @force_kblockd.\n\nAll the current users are converted to specify %false for the\nparameter and this patch doesn\u0027t introduce any behavior change.\n\nstable: This is prerequisite for fixing ide oops caused by the new\n        blk-flush implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0bbfeb8320421989d3e12bd95fae86b9ac0712aa",
      "tree": "a23bb6686bd2586fe7c27d0773c63f9aeb254cd1",
      "parents": [
        "6fae9c25134baffbeeb20031479e7ff6f6d8eec0"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 01 15:05:08 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:05:08 2011 -0500"
      },
      "message": "cfq-iosched: Always provide group isolation.\n\nEffectively, make group_isolation\u003d1 the default and remove the tunable.\nThe setting group_isolation\u003d0 was because by default we idle on\nsync-noidle tree and on fast devices, this can be very harmful for\nthroughput.\n\nHowever, this problem can also be addressed by tuning slice_idle and\npossibly group_idle on faster storage devices.\n\nThis change simplifies the CFQ code by removing the feature entirely.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6fae9c25134baffbeeb20031479e7ff6f6d8eec0",
      "tree": "c9ab89992ce5293a43cd455a81dc8a5926a28a5e",
      "parents": [
        "c186794dbb466b45cf40f942f2d09d6d5b4b0e42",
        "f5412be599602124d2bdd49947b231dd77c0bf99"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:04:39 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 15:04:39 2011 -0500"
      },
      "message": "Merge commit \u0027v2.6.38-rc6\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "291d24f6d9e7bbef81454fade8a44720665c7302",
      "tree": "8e23a24b51e9a0106cbd7e5375e53a972794b8cd",
      "parents": [
        "450adcbe518ab3a3953d8475309525d22de77cba"
      ],
      "author": {
        "name": "Ben Hutchings",
        "email": "ben@decadent.org.uk",
        "time": "Tue Mar 01 13:45:24 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 13:45:24 2011 -0500"
      },
      "message": "block: fix kernel-doc format for blkdev_issue_zeroout\n\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\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": "638691a7a46a4ae9a7b56c603299e42d7f6e722e",
      "tree": "f744b3fbdd4704ef9ae122b67a14785b4a7a6b65",
      "parents": [
        "0a93ea2e897bd793cc0aaaddc397eff32ac8d6fe",
        "f0b4f7e2f29af678bd9af43422c537dcb6008603"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 25 11:13:26 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 25 11:13:26 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md:\n  md: Fix - again - partition detection when array becomes active\n  Fix over-zealous flush_disk when changing device size.\n  md: avoid spinlock problem in blk_throtl_exit\n  md: correctly handle probe of an \u0027mdp\u0027 device.\n  md: don\u0027t set_capacity before array is active.\n  md: Fix raid1-\u003eraid0 takeover\n"
    },
    {
      "commit": "3c522cedb572bb8d2e4867f358bdaa7d0c53d88c",
      "tree": "b348cabd2574638702f9abcccd0b8b711b136162",
      "parents": [
        "dcace5ac85c628af21878a1fa151e5e6403fb8eb"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Thu Feb 24 15:45:41 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 24 08:54:21 2011 -0800"
      },
      "message": "block: fix refcounting in BLKBSZSET\n\nAdam Kovari and others reported that disconnecting an USB drive with\nan ntfs-3g filesystem would cause \"kernel BUG at fs/inode.c:1421!\" to\nbe triggered.\n\nThe BUG could be traced back to ioctl(BLKBSZSET), which would\nerroneously decrement the refcount on the bdev.  This is because\nblkdev_get() expects the refcount to be already incremented and either\nreturns success or decrements the refcount and returns an error.\n\nThe bug was introduced by e525fd89 (block: make blkdev_get/put()\nhandle exclusive access), which didn\u0027t take into account this behavior\nof blkdev_get().\n\nThis fixes\n  https://bugzilla.kernel.org/show_bug.cgi?id\u003d29202\n(and likely 29792 too)\n\nReported-by: Adam Kovari \u003ckovariadam@gmail.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "93b270f76e7ef3b81001576860c2701931cdc78b",
      "tree": "abaca0e4d3e86721815498fafd06295dd9cfd002",
      "parents": [
        "da9cf5050a2e3dbc3cf26a8d908482eb4485ed49"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Feb 24 17:25:47 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Feb 24 17:25:47 2011 +1100"
      },
      "message": "Fix over-zealous flush_disk when changing device size.\n\nThere are two cases when we call flush_disk.\nIn one, the device has disappeared (check_disk_change) so any\ndata will hold becomes irrelevant.\nIn the oter, the device has changed size (check_disk_size_change)\nso data we hold may be irrelevant.\n\nIn both cases it makes sense to discard any \u0027clean\u0027 buffers,\nso they will be read back from the device if needed.\n\nIn the former case it makes sense to discard \u0027dirty\u0027 buffers\nas there will never be anywhere safe to write the data.  In the\nsecond case it *does*not* make sense to discard dirty buffers\nas that will lead to file system corruption when you simply enlarge\nthe containing devices.\n\nflush_disk calls __invalidate_devices.\n__invalidate_device calls both invalidate_inodes and invalidate_bdev.\n\ninvalidate_inodes *does* discard I_DIRTY inodes and this does lead\nto fs corruption.\n\ninvalidate_bev *does*not* discard dirty pages, but I don\u0027t really care\nabout that at present.\n\nSo this patch adds a flag to __invalidate_device (calling it\n__invalidate_device2) to indicate whether dirty buffers should be\nkilled, and this is passed to invalidate_inodes which can choose to\nskip dirty inodes.\n\nflusk_disk then passes true from check_disk_change and false from\ncheck_disk_size_change.\n\ndm avoids tripping over this problem by calling i_size_write directly\nrathher than using check_disk_size_change.\n\nmd does use check_disk_size_change and so is affected.\n\nThis regression was introduced by commit 608aeef17a which causes\ncheck_disk_size_change to call flush_disk, so it is suitable for any\nkernel since 2.6.27.\n\nCc: stable@kernel.org\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Andrew Patterson \u003candrew.patterson@hp.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "79775567e0439ca47eb9f501e52c4b713d44cf89",
      "tree": "1cb890e0a061b007ae10bd281a60ada60a6d2bb1",
      "parents": [
        "751b2a7d623ead9e55f751a6087efeab454b5659"
      ],
      "author": {
        "name": "Hannes Reinecke",
        "email": "hare@suse.de",
        "time": "Tue Jan 18 10:13:13 2011 +0100"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Sat Feb 12 10:33:37 2011 -0600"
      },
      "message": "[SCSI] block: improve detail in I/O error messages\n\nClassify severity of I/O errors for target, nexus, and\ntransport errors.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Hannes Reinecke \u003chare@suse.de\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\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": "9d5a4e946ce5352f19400b6370f4cd8e72806278",
      "tree": "ba62a2ab56da1f943b0dbcae527c70b817a104de",
      "parents": [
        "ae1b1539622fb46e51b4d13b3f9e5f4c713f86ae"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Feb 11 11:05:46 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Feb 11 11:05:46 2011 +0100"
      },
      "message": "block: skip elevator data initialization for flush requests\n\nSkip elevator initialization for flush requests by passing priv\u003d0 to\nblk_alloc_request() in get_request().  As such elv_set_request() is\nnever called for flush requests.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "aceb91cd351bc3a19a783c901fe8a8070d5f6fa9",
      "tree": "a0863e940a77ae10d3c8b391488e29a8245b31be",
      "parents": [
        "ae8eed2d0906bf0d8eb0c2a4651676a41d361297",
        "b8cf0e0e552ca48e9a00f518aeb4f5e03984022b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 09 11:45:21 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 09 11:45:21 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cdrom: support devices that have check_events but not media_changed\n  cfq-iosched: Don\u0027t wait if queue already has requests.\n  blkio-throttle: Avoid calling blkiocg_lookup_group() for root group\n  cfq: rename a function to give it more appropriate name\n  cciss: make cciss_revalidate not loop through CISS_MAX_LUNS volumes unnecessarily.\n  drivers/block/aoe/Makefile: replace the use of \u003cmodule\u003e-objs with \u003cmodule\u003e-y\n  loop: queue_lock NULL pointer derefence in blk_throtl_exit\n  drivers/block/Makefile: replace the use of \u003cmodule\u003e-objs with \u003cmodule\u003e-y\n  blktrace: Don\u0027t output messages if NOTIFY isn\u0027t set.\n"
    },
    {
      "commit": "02a8f01b5a9f396d0327977af4c232d0f94c45fd",
      "tree": "ace818b81f26c30c473af698882dc9786d13afe5",
      "parents": [
        "be2c6b1990904dbd43f3d9b90fa2c530504375cd"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Wed Feb 09 14:20:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Feb 09 14:22:36 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t wait if queue already has requests.\n\nCommit 7667aa0630407bc07dc38dcc79d29cc0a65553c1 added logic to wait for\nthe last queue of the group to become busy (have at least one request),\nso that the group does not lose out for not being continuously\nbacklogged. The commit did not check for the condition that the last\nqueue already has some requests. As a result, if the queue already has\nrequests, wait_busy is set. Later on, cfq_select_queue() checks the\nflag, and decides that since the queue has a request now and wait_busy\nis set, the queue is expired.  This results in early expiration of the\nqueue.\n\nThis patch fixes the problem by adding a check to see if queue already\nhas requests. If it does, wait_busy is not set. As a result, time slices\ndo not expire early.\n\nThe queues with more than one request are usually buffered writers.\nTesting shows improvement in isolation between buffered writers.\n\nCc: stable@kernel.org\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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": "143a87f4c9c629067afea5b6703d66ea88c82f8e",
      "tree": "6abeae59e1d309d3c1a11eab97e22639c7fc5bd5",
      "parents": [
        "414b4ff5eecff0097d09c4a7da12e435fd503692"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 25 12:43:52 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jan 25 12:43:52 2011 +0100"
      },
      "message": "block: improve flush bio completion\n\nbio\u0027s for flush are completed twice - once during the data phase and\none more time after the whole sequence is complete.  The first\ncompletion shouldn\u0027t notify completion to the issuer.\n\nThis was achieved by skipping all bio completion steps in\nreq_bio_endio() for the first completion; however, this has two\ndrawbacks.\n\n* Error is not recorded in bio and must be tracked somewhere else.\n\n* Partial completion is not supported.\n\nBoth don\u0027t cause problems for the current users; however, they make\nfurther improvements difficult.  Change req_bio_endio() such that it\nonly skips the actual notification part for the first completion.  bio\ncompletion is implemented with partial completions on mind anyway so\nthis is as simple as moving the REQ_FLUSH_SEQ conditional such that\nonly calling of bio_endio() is skipped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "414b4ff5eecff0097d09c4a7da12e435fd503692",
      "tree": "cc7cd46c1455712af672b3ff872800b3da895837",
      "parents": [
        "3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 25 12:43:49 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jan 25 12:43:49 2011 +0100"
      },
      "message": "block: add REQ_FLUSH_SEQ\n\nrq \u003d\u003d \u0026q-\u003eflush_rq was used to determine whether a rq is part of a\nflush sequence, which worked because all requests in a flush sequence\nwere sequenced using the single dedicated request.  This is about to\nchange, so introduce REQ_FLUSH_SEQ flag to distinguish flush sequence\nrequests.\n\nThis patch doesn\u0027t cause any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6a108a14fa356ef607be308b68337939e56ea94e",
      "tree": "1bf260572bd8f95ed867307a2bcf5d881c8ae4a6",
      "parents": [
        "12fcdba1b7ae8b25696433f420b775aeb556d89b"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 20 14:44:16 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:05 2011 -0800"
      },
      "message": "kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT\n\nThe meaning of CONFIG_EMBEDDED has long since been obsoleted; the option\nis used to configure any non-standard kernel with a much larger scope than\nonly small devices.\n\nThis patch renames the option to CONFIG_EXPERT in init/Kconfig and fixes\nreferences to the option throughout the kernel.  A new CONFIG_EMBEDDED\noption is added that automatically selects CONFIG_EXPERT when enabled and\ncan be used in the future to isolate options that should only be\nconsidered for embedded systems (RISC architectures, SLOB, etc).\n\nCalling the option \"EXPERT\" more accurately represents its intention: only\nexpert users who understand the impact of the configuration changes they\nare making should enable it.\n\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: David Woodhouse \u003cdavid.woodhouse@intel.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg KH \u003cgregkh@suse.de\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "be2c6b1990904dbd43f3d9b90fa2c530504375cd",
      "tree": "f2ec4322adc9f0607b5a78367bc66d8fa333cf54",
      "parents": [
        "ba5bd520f679c450fb6efa439618703bd0956daa"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "message": "blkio-throttle: Avoid calling blkiocg_lookup_group() for root group\n\no Jeff Moyer was doing some testing on a RAM backed disk and\n  blkiocg_lookup_group() showed up high overhead after memcpy(). Similarly\n  somebody else reported that blkiocg_lookup_group() is eating 6% extra\n  cpu. Though looking at the code I can\u0027t think why the overhead of\n  this function is so high. One thing is that it is called with very high\n  frequency (once for every IO).\n\no For lot of folks blkio controller will be compiled in but they might\n  not have actually created cgroups. Hence optimize the case of root\n  cgroup where we can avoid calling blkiocg_lookup_group() if IO is happening\n  in root group (common case).\n\nReported-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ba5bd520f679c450fb6efa439618703bd0956daa",
      "tree": "f3957e89e43c4955ae261ea96da570f36450f51f",
      "parents": [
        "68264e9d6781f7163e92c517769bb470fa43f6cd"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "message": "cfq: rename a function to give it more appropriate name\n\no Rename a function to give it more approprate name. We are calculating\n  cfq queue slice and function name gives the impression as if cfq group\n  slice length is being calculated.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c553f8e335c00a7cff3ab3f13e793b13d3f2207f",
      "tree": "f9371c9e1191711dd2e774e04d99f3fa90d697fa",
      "parents": [
        "f8ae6e3eb8251be32c6e913393d9f8d9e0609489"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "message": "block cfq: compensate preempted queue even if it has no slice assigned\n\nIf a queue is preempted before it gets slice assigned, the queue doesn\u0027t get\ncompensation, which looks unfair. For such queue, we compensate it for a whole\nslice.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f8ae6e3eb8251be32c6e913393d9f8d9e0609489",
      "tree": "50b096572a4f8e7992e7e7e2e599e77d334c2b5b",
      "parents": [
        "52cfd503ad7176d23a5dd7af3981744feb60622f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "message": "block cfq: make queue preempt work for queues from different workload\n\nI got this:\n             fio-874   [007]  2157.724514:   8,32   m   N cfq874 preempt\n             fio-874   [007]  2157.724519:   8,32   m   N cfq830 slice expired t\u003d1\n             fio-874   [007]  2157.724520:   8,32   m   N cfq830 sl_used\u003d1 disp\u003d0 charge\u003d1 iops\u003d0 sect\u003d0\n             fio-874   [007]  2157.724521:   8,32   m   N cfq830 set_active wl_prio:0 wl_type:0\n             fio-874   [007]  2157.724522:   8,32   m   N cfq830 Not idling. st-\u003ecount:1\n\ncfq830 is an async queue, and preempted by a sync queue cfq874. But since we\nhave cfqg-\u003esaved_workload_slice mechanism, the preempt is a nop.\nLooks currently our preempt is totally broken if the two queues are not from\nthe same workload type.\nBelow patch fixes it. This will might make async queue starvation, but it\u0027s\nwhat our old code does before cgroup is added.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "275220f0fcff1adf28a717076e00f575edf05fda",
      "tree": "d249bccc80c64443dab211639050c4fb14332648",
      "parents": [
        "fe3c560b8a22cb28e54fe8950abef38e88d75831",
        "81c5e2ae33c4b19e53966b427e33646bf6811830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block: (43 commits)\n  block: ensure that completion error gets properly traced\n  blktrace: add missing probe argument to block_bio_complete\n  block cfq: don\u0027t use atomic_t for cfq_group\n  block cfq: don\u0027t use atomic_t for cfq_queue\n  block: trace event block fix unassigned field\n  block: add internal hd part table references\n  block: fix accounting bug on cross partition merges\n  kref: add kref_test_and_get\n  bio-integrity: mark kintegrityd_wq highpri and CPU intensive\n  block: make kblockd_workqueue smarter\n  Revert \"sd: implement sd_check_events()\"\n  block: Clean up exit_io_context() source code.\n  Fix compile warnings due to missing removal of a \u0027ret\u0027 variable\n  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n  block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n  cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n  fs/splice: Pull buf-\u003eops-\u003econfirm() from splice_from_pipe actors\n  cdrom: export cdrom_check_events()\n  sd: implement sd_check_events()\n  sr: implement sr_check_events()\n  ...\n"
    },
    {
      "commit": "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": "329a67815b596d23daf0caa588ae0800e925320f",
      "tree": "5fcf8a7c4a4d43b2cc7dc220d6bb25bdf27d153f",
      "parents": [
        "30d7b9448f03f2c82d0fd44738674cc156a8ce0a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_group\n\ncfq_group-\u003eref is used with queue_lock hold, the only exception is\ncfq_set_request, which looks like a bug to me, so ref doesn\u0027t need\nto be an atomic and atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "30d7b9448f03f2c82d0fd44738674cc156a8ce0a",
      "tree": "f925a59dfe6a7b2da5240e9d43d873de7b1de273",
      "parents": [
        "b7908c1035af7652cd613991b54dbff9c8b6bd3a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_queue\n\ncfq_queue-\u003eref is used with queue_lock hold, so ref doesn\u0027t need to be an atomic\nand atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6c23a9681c0fe7fb7dd331b39dda11926f43746e",
      "tree": "bf113a475a17faa866e7e59806378107dcb3aa40",
      "parents": [
        "09e099d4bafea3b15be003d548bdf94b4b6e0e17"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:43:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:43:37 2011 +0100"
      },
      "message": "block: add internal hd part table references\n\nWe can\u0027t use krefs since it\u0027s apparently restricted to very basic\nreference counting.\n\nThis reverts commit e4a683c8.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\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": "89b90be2d877a904b1704e4029db65655bfc6282",
      "tree": "0dbeda7f0efa17373bdd3c59793a36c417fa9d1c",
      "parents": [
        "27667c996f6a0bed4ad1e10ac0a0dbb6037968db"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 03 15:01:47 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jan 03 15:01:47 2011 +0100"
      },
      "message": "block: make kblockd_workqueue smarter\n\nkblockd is used for unplugging and may affect IO latency and\nthroughput and the max number of concurrent work items are bound by\nthe number of block devices.  Make it HIGHPRI workqueue w/ default max\nconcurrency.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4b7bd364700d9ac8372eff48832062b936d0793b",
      "tree": "0dbf78c95456a0b02d07fcd473281f04a87e266d",
      "parents": [
        "c0d8768af260e2cbb4bf659ae6094a262c86b085",
        "90a8a73c06cc32b609a880d48449d7083327e11a"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nConflicts:\n\tMAINTAINERS\n\tarch/arm/mach-omap2/pm24xx.c\n\tdrivers/scsi/bfa/bfa_fcpim.c\n\nNeeded to update to apply fixes for which the old branch was too\noutdated.\n"
    },
    {
      "commit": "27667c996f6a0bed4ad1e10ac0a0dbb6037968db",
      "tree": "dcbcd7354f6ccaa3fe88fdf0a0a5f1e168ff8c40",
      "parents": [
        "3603b8eaccc8e41d3f355b3cadd662a3dd6699fd"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Tue Dec 21 15:07:45 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Dec 21 15:07:45 2010 +0100"
      },
      "message": "block: Clean up exit_io_context() source code.\n\nThis patch fixes a spelling error in a source code comment and removes\nsuperfluous braces in the function exit_io_context().\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7f8635cc9e66a26d7280ba680b044fa2f65104af",
      "tree": "0d8506e86d07e15c473aca1a09af7ad6ff7d8b49",
      "parents": [
        "3cb50ddf97a0a1ca4c68bc12fa1e727a6b45fbf2",
        "0fc13c8995cd96f4123de400c71c223d80400ed9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 20 09:19:46 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 20 09:19:46 2010 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cciss: fix cciss_revalidate panic\n  block: max hardware sectors limit wrapper\n  block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead\n  blk-throttle: Correct the placement of smp_rmb()\n  blk-throttle: Trim/adjust slice_end once a bio has been dispatched\n  block: check for proper length of iov entries earlier in blk_rq_map_user_iov()\n  drbd: fix for spin_lock_irqsave in endio callback\n  drbd: don\u0027t recvmsg with zero length\n"
    },
    {
      "commit": "e61eb2e93fe86931d46831752a82dab25a5335ca",
      "tree": "631aeb9bf8614903972a6a9945040a4d528f1029",
      "parents": [
        "b9f985b6e05ebd7af2aaef0eb3ae369390ef191f"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "kthreadd@gmail.com",
        "time": "Fri Dec 17 09:00:18 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 09:00:18 2010 +0100"
      },
      "message": "fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n\nThe major/minor device numbers are always defined and used as `unsigned\u0027.\n\nSigned-off-by: Yang Zhang \u003ckthreadd@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b9f985b6e05ebd7af2aaef0eb3ae369390ef191f",
      "tree": "69aa4bd9501f988302a155ebfdc630bd2a37bfde",
      "parents": [
        "7278c9c19bd85cf33213a2e0b538a18d3ac8ad00"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "kthreadd@gmail.com",
        "time": "Fri Dec 17 08:58:36 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:58:36 2010 +0100"
      },
      "message": "block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n\nSigned-off-by: Yang Zhang \u003ckthreadd@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7278c9c19bd85cf33213a2e0b538a18d3ac8ad00",
      "tree": "e080ada1f8cc00fef4600976f8cf489cc94d1c03",
      "parents": [
        "a8adbe378b56acd5945df70753c7e8f6fe223304"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n\nWhen cfq_choose_cfqg() is called in select_queue(), there must be at least one\nbacklogged CFQ queue waiting for dispatching, hence there must be at least one\nbacklogged CFQ group on service tree. So we never call choose_service_tree()\nwith cfqg \u003d\u003d NULL.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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"
    },
    {
      "commit": "dddd9dc340ae1a41d90e084529ca979c77c4ecfe",
      "tree": "7ab2dba891308a0c9209d71ecc8d620260b8674b",
      "parents": [
        "e4ea0c16a85d221ebcc3a21f32e321440459e0fc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 08 20:57:35 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Dec 16 17:53:38 2010 +0100"
      },
      "message": "block: kill genhd_media_change_notify()\n\nThere\u0027s no user of the facility.  Kill it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e4ea0c16a85d221ebcc3a21f32e321440459e0fc",
      "tree": "47acf4da84f9a448e6eb6172a5440ccc60696ed9",
      "parents": [
        "760701bfe14faee8ea0608a9cab2046071d98a39"
      ],
      "author": {
        "name": "Shaohua Li writes",
        "email": "shaohua.li@intel.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "message": "block cfq: select new workload if priority changed\n\nIf priority is changed, continuing to check workload_expires and service tree\ncount of the previous workload does not make sense. We should always choose\nthe workload with lowest key of new priority in such case.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c7a841f3aca469187db76842676951a672fd27d1",
      "tree": "6819d796270f9b4c5eb4cae374a69ab1988d384a",
      "parents": [
        "057f02a38e67a944a2d0b89bb0111efb9dbe6e6e"
      ],
      "author": {
        "name": "James Smart",
        "email": "james.smart@emulex.com",
        "time": "Sun Nov 14 11:12:04 2010 -0500"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Thu Dec 09 09:41:14 2010 -0600"
      },
      "message": "[SCSI] bsg: correct fault if queue object removed while dev_t open\n\nThis patch corrects an issue in bsg that results in a general protection\nfault if an LLD is removed while an application is using an open file\nhandle to a bsg device, and the application issues an ioctl. The fault\noccurs because the class_dev is NULL, having been cleared in\nbsg_unregister_queue() when the driver was removed.  With this\npatch, a check is made for the class_dev, and the application\nwill receive ENXIO if the related object is gone.\n\nSigned-off-by: Carl Lajeunesse \u003ccarl.lajeunesse@emulex.com\u003e\nSigned-off-by: James Smart \u003cjames.smart@emulex.com\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\n"
    },
    {
      "commit": "04a6b516cdc6efc2500b52a540cf65be8c5aaf9e",
      "tree": "fa5d6675308df0ff42eceeec1b406d2ce5eb2ff6",
      "parents": [
        "d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 01 19:34:52 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Dec 01 19:34:52 2010 +0100"
      },
      "message": "blk-throttle: Correct the placement of smp_rmb()\n\no I was discussing what are the variable being updated without spin lock and\n  why do we need barriers and Oleg pointed out that location of smp_rmb()\n  should be between read of td-\u003elimits_changed and tg-\u003elimits_changed. This\n  patch fixes it.\n\no Following is one possible sequence of events. Say cpu0 is executing\n  throtl_update_blkio_group_read_bps() and cpu1 is executing\n  throtl_process_limit_change().\n\n cpu0                                                cpu1\n\n tg-\u003elimits_changed \u003d true;\n smp_mb__before_atomic_inc();\n atomic_inc(\u0026td-\u003elimits_changed);\n\n                                     if (!atomic_read(\u0026td-\u003elimits_changed))\n                                             return;\n\n                                     if (tg-\u003elimits_changed)\n                                             do_something;\n\n If cpu0 has updated tg-\u003elimits_changed and td-\u003elimits_changed, we want to\n make sure that if update to td-\u003elimits_changed is visible on cpu1, then\n update to tg-\u003elimits_changed should also be visible.\n\n Oleg pointed out to ensure that we need to insert an smp_rmb() between\n td-\u003elimits_changed read and tg-\u003elimits_changed read.\n\no I had erroneously put smp_rmb() before atomic_read(\u0026td-\u003elimits_changed).\n  This patch fixes it.\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347",
      "tree": "d34fabaf556ec4471e076b4794fa1de8515956f0",
      "parents": [
        "5478755616ae2ef1ce144dded589b62b2a50d575"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 01 19:34:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Dec 01 19:34:46 2010 +0100"
      },
      "message": "blk-throttle: Trim/adjust slice_end once a bio has been dispatched\n\no During some testing I did following and noticed throttling stops working.\n\n        - Put a very low limit on a cgroup, say 1 byte per second.\n        - Start some reads, this will set slice_end to a very high value.\n        - Change the limit to higher value say 1MB/s\n        - Now IO unthrottles and finishes as expected.\n        - Try to do the read again but IO is not limited to 1MB/s as expected.\n\no What is happening.\n        - Initially low value of limit sets slice_end to a very high value.\n        - During updation of limit, slice_end is not being truncated.\n        - Very high value of slice_end leads to keeping the existing slice\n          valid for a very long time and new slice does not start.\n        - tg_may_dispatch() is called in blk_throtle_bio(), and trim_slice()\n          is not called in this path. So slice_start is some old value and\n          practically we are able to do huge amount of IO.\n\no There are many ways it can be fixed. I have fixed it by trying to\n  adjust/cleanup slice_end in trim_slice(). Generally we extend slices if bio\n  is big and can\u0027t be dispatched in one slice. After dispatch of bio, readjust\n  the slice_end to make sure we don\u0027t end up with huge values.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "760701bfe14faee8ea0608a9cab2046071d98a39",
      "tree": "780193b7803aced7ecb2a53f0ce43150eb8ebeab",
      "parents": [
        "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of on_st flag\n\nIt\u0027s able to check whether a CFQ group on a service tree by\nchecking \"cfqg-\u003erb_node\". There\u0027s no need to maintain an\nextra flag here.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42",
      "tree": "fcf25315bb0ef06ad7f9017f84fce9021768682f",
      "parents": [
        "f30195c50245d8ace628e1978b1daa8df86e7224"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of st-\u003eactive\n\nWhen a cfq group is running, it won\u0027t be dequeued from service tree, so\nthere\u0027s no need to store the active one in st-\u003eactive. Just gid rid of it.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5478755616ae2ef1ce144dded589b62b2a50d575",
      "tree": "b1dffb15dba1a924bba289beb78ea23f34782c9c",
      "parents": [
        "a115413de13ae6beb0cbfc198afe385a261ab284"
      ],
      "author": {
        "name": "Xiaotian Feng",
        "email": "dfeng@redhat.com",
        "time": "Mon Nov 29 10:03:55 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 29 10:04:50 2010 +0100"
      },
      "message": "block: check for proper length of iov entries earlier in blk_rq_map_user_iov()\n\ncommit 9284bcf checks for proper length of iov entries in\nblk_rq_map_user_iov(). But if the map is unaligned, kernel\nwill break out the loop without checking for the proper length.\nSo we need to check the proper length before the unalign check.\n\nSigned-off-by: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f30195c50245d8ace628e1978b1daa8df86e7224",
      "tree": "edf4f91c4356c41d50fb07f15cebd1e6442538ad",
      "parents": [
        "d07335e51df0c6dec202d315fc4f1f7e100eec4e",
        "d4d77629953eabd3c14f6fa5746f6b28babfc55f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Nov 27 19:49:18 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Nov 27 19:49:18 2010 +0100"
      },
      "message": "Merge branch \u0027cleanup-bd_claim\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into for-2.6.38/core\n"
    },
    {
      "commit": "78daa87b1d332e4ac963c793a4157533d57501c7",
      "tree": "c133840b219a446c11fa2391bb0d887e71f5809f",
      "parents": [
        "d4d2ad948e9a9c316e72fdc09d7490dfda4773da",
        "bbe425cd9ae83eacd0c9f09df2bf56dc911a54cd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Nov 27 07:17:50 2010 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Nov 27 07:17:50 2010 +0900"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cciss: fix build for PROC_FS disabled\n  block: fix amiga and atari floppy driver compile warning\n  blk-throttle: Fix calculation of max number of WRITES to be dispatched\n  ioprio: grab rcu_read_lock in sys_ioprio_{set,get}()\n  xen/blkfront: cope with backend that fail empty BLKIF_OP_WRITE_BARRIER requests\n  xen/blkfront: Implement FUA with BLKIF_OP_WRITE_BARRIER\n  xen/blkfront: change blk_shadow.request to proper pointer\n  xen/blkfront: map REQ_FLUSH into a full barrier\n"
    },
    {
      "commit": "451a3c24b0135bce54542009b5fde43846c7cf67",
      "tree": "f0fbbcc155aef2a1ffcb8aa593fe7a966d0e6900",
      "parents": [
        "55f6561c6941713ab5ae9180525b026dd40b7d14"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Wed Nov 17 16:26:55 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 17 08:59:32 2010 -0800"
      },
      "message": "BKL: remove extraneous #include \u003csmp_lock.h\u003e\n\nThe big kernel lock has been removed from all these files at some point,\nleaving only the #include.\n\nRemove this too as a cleanup.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d07335e51df0c6dec202d315fc4f1f7e100eec4e",
      "tree": "db6ac1db8d87738b9e44497e082d490c14413f5d",
      "parents": [
        "5fbf85639287b6ea287f4f5e5e7e36608f0f60bd"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Nov 16 12:52:38 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 12:53:39 2010 +0100"
      },
      "message": "block: Rename \"block_remap\" tracepoint to \"block_bio_remap\" to clarify the event.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5fbf85639287b6ea287f4f5e5e7e36608f0f60bd",
      "tree": "608a51e6ee572dba94b43f1933e49ab88562e4c0",
      "parents": [
        "a02056349cdea2252cd2b21643ebf025e83a29f2",
        "bdc85df7a8417b9893443ff5520804699416b6f3"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:10:12 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:10:12 2010 +0100"
      },
      "message": "Merge branch \u0027for-2.6.38/rc2-holder\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "a02056349cdea2252cd2b21643ebf025e83a29f2",
      "tree": "b7c889d6cbe8e7188d07d99a5c9da858c53a5b6c",
      "parents": [
        "34db1d595ef6f183fbc1e42cda45a3dfa0035258",
        "e53beacd23d9cb47590da6a7a7f6d417b941a994"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "message": "Merge branch \u0027v2.6.37-rc2\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "bdc85df7a8417b9893443ff5520804699416b6f3",
      "tree": "7d1158ff87d327934c0c3b0d5ec9b02ed4811de6",
      "parents": [
        "0143832cc96d0bf78486297aad5c8fb2c2ead02a"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Nov 15 19:37:36 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 15 19:37:36 2010 +0100"
      },
      "message": "blk-cgroup: Allow creation of hierarchical cgroups\n\no Allow hierarchical cgroup creation for blkio controller\n\no Currently we disallow it as both the io controller policies (throttling\n  as well as proportion bandwidth) do not support hierarhical accounting\n  and control. But the flip side is that blkio controller can not be used with\n  libvirt as libvirt creates a cgroup hierarchy deeper than 1 level.\n\n  \u003ctop-level-cgroup-dir\u003e/\u003ccontroller\u003e/libvirt/qemu/\u003cvirtual-machine-groups\u003e\n\no So this patch will allow creation of cgroup hierarhcy but at the backend\n  everything will be treated as flat. So if somebody created a an hierarchy\n  like as follows.\n\n\t\t\troot\n\t\t\t/  \\\n\t\t     test1 test2\n\t\t\t|\n\t\t     test3\n\n  CFQ and throttling will practically treat all groups at same level.\n\n\t\t\t\tpivot\n\t\t\t     /  |   \\  \\\n\t\t\troot  test1 test2  test3\n\no Once we have actual support for hierarchical accounting and control\n  then we can introduce another cgroup tunable file \"blkio.use_hierarchy\"\n  which will be 0 by default but if user wants to enforce hierarhical\n  control then it can be set to 1. This way there should not be any\n  ABI problems down the line.\n\no The only not so pretty part is introduction of extra file \"use_hierarchy\"\n  down the line. Kame-san had mentioned that hierarhical accounting is\n  expensive in memory controller hence they keep it off by default. I\n  suspect same will be the case for IO controller also as for each IO\n  completion we shall have to account IO through hierarchy up to the root.\n  if yes, then it probably is not a very bad idea to introduce this extra\n  file so that it will be used only when somebody needs it and some people\n  might enable hierarchy only in part of the hierarchy.\n\no This is how basically memory controller also uses \"use_hierarhcy\" and\n  they also allowed creation of hierarchies when actual backend support\n  was not available.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Ciju Rajan K \u003cciju@linux.vnet.ibm.com\u003e\nTested-by: Ciju Rajan K \u003cciju@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c2f6805d470af369a7337801deeecea800dbfe1c",
      "tree": "2381b8c512d611869877adfad3d5e0dfe75e668a",
      "parents": [
        "d69b78ba1deaaa95ffa8dac5a9ca819ce454d52e"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Nov 15 19:32:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 15 19:32:42 2010 +0100"
      },
      "message": "blk-throttle: Fix calculation of max number of WRITES to be dispatched\n\no Currently we try to dispatch more READS and less WRITES (75%, 25%) in one\n  dispatch round. ummy pointed out that there is a bug in max_nr_writes\n  calculation. This patch fixes it.\n\nReported-by: ummy y \u003cyummylln@yahoo.com.cn\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e525fd89d380c4a94c0d63913a1dd1a593ed25e7",
      "tree": "d226ef40d3f99e42fcf272ad432585cbd641ebec",
      "parents": [
        "e09b457bdb7e8d23fc54dcef0930ac697d8de895"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:17 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:17 2010 +0100"
      },
      "message": "block: make blkdev_get/put() handle exclusive access\n\nOver time, block layer has accumulated a set of APIs dealing with bdev\nopen, close, claim and release.\n\n* blkdev_get/put() are the primary open and close functions.\n\n* bd_claim/release() deal with exclusive open.\n\n* open/close_bdev_exclusive() are combination of open and claim and\n  the other way around, respectively.\n\n* bd_link/unlink_disk_holder() to create and remove holder/slave\n  symlinks.\n\n* open_by_devnum() wraps bdget() + blkdev_get().\n\nThe interface is a bit confusing and the decoupling of open and claim\nmakes it impossible to properly guarantee exclusive access as\nin-kernel open + claim sequence can disturb the existing exclusive\nopen even before the block layer knows the current open if for another\nexclusive access.  Reorganize the interface such that,\n\n* blkdev_get() is extended to include exclusive access management.\n  @holder argument is added and, if is @FMODE_EXCL specified, it will\n  gain exclusive access atomically w.r.t. other exclusive accesses.\n\n* blkdev_put() is similarly extended.  It now takes @mode argument and\n  if @FMODE_EXCL is set, it releases an exclusive access.  Also, when\n  the last exclusive claim is released, the holder/slave symlinks are\n  removed automatically.\n\n* bd_claim/release() and close_bdev_exclusive() are no longer\n  necessary and either made static or removed.\n\n* bd_link_disk_holder() remains the same but bd_unlink_disk_holder()\n  is no longer necessary and removed.\n\n* open_bdev_exclusive() becomes a simple wrapper around lookup_bdev()\n  and blkdev_get().  It also has an unexpected extra bdev_read_only()\n  test which probably should be moved into blkdev_get().\n\n* open_by_devnum() is modified to take @holder argument and pass it to\n  blkdev_get().\n\nMost of bdev open/close operations are unified into blkdev_get/put()\nand most exclusive accesses are tested atomically at the open time (as\nit should).  This cleans up code and removes some, both valid and\ninvalid, but unnecessary all the same, corner cases.\n\nopen_bdev_exclusive() and open_by_devnum() can use further cleanup -\nrename to blkdev_get_by_path() and blkdev_get_by_devt() and drop\nspecial features.  Well, let\u0027s leave them for another day.\n\nMost conversions are straight-forward.  drbd conversion is a bit more\ninvolved as there was some reordering, but the logic should stay the\nsame.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Neil Brown \u003cneilb@suse.de\u003e\nAcked-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nCc: Peter Osterlund \u003cpetero2@telia.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Andreas Dilger \u003cadilger.kernel@dilger.ca\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: dm-devel@redhat.com\nCc: drbd-dev@lists.linbit.com\nCc: Leo Chen \u003cleochen@broadcom.com\u003e\nCc: Scott Branden \u003csbranden@broadcom.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Dave Kleikamp \u003cshaggy@linux.vnet.ibm.com\u003e\nCc: Joern Engel \u003cjoern@logfs.org\u003e\nCc: reiserfs-devel@vger.kernel.org\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cedb4a7d9f6aedb0dce94d6285b69dcb3c10fa05",
      "tree": "49a6b255a727421658cb917321ad3e29c8bd9fc0",
      "parents": [
        "17a9e7bbae178d1326e4631ab6350a272349c99d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Nov 11 13:37:54 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Nov 11 13:40:11 2010 +0100"
      },
      "message": "block: remove unused copy_io_context()\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02e031cbc843b010e72fcc05c76113c688b2860f",
      "tree": "9f68559ec3acc39bcc4ce2ff87043a094eaa2e8f",
      "parents": [
        "00e375e7e962f938f6b3c93e4cd097a5e26cc788"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Nov 10 14:54:09 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:54:09 2010 +0100"
      },
      "message": "block: remove REQ_HARDBARRIER\n\nREQ_HARDBARRIER is dead now, so remove the leftovers.  What\u0027s left\nat this point is:\n\n - various checks inside the block layer.\n - sanity checks in bio based drivers.\n - now unused bio_empty_barrier helper.\n - Xen blockfront use of BLKIF_OP_WRITE_BARRIER - it\u0027s dead for a while,\n   but Xen really needs to sort out it\u0027s barrier situaton.\n - setting of ordered tags in uas - dead code copied from old scsi\n   drivers.\n - scsi different retry for barriers - it\u0027s dead and should have been\n   removed when flushes were converted to FS requests.\n - blktrace handling of barriers - removed.  Someone who knows blktrace\n   better should add support for REQ_FLUSH and REQ_FUA, though.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a014741c0adfb8fb79952939ca087cf03d272bb9",
      "tree": "57bafa05736f172b94fde156bb51798b3ddb6107",
      "parents": [
        "77304d2abac6101f7249754ffdd4421258877ab0"
      ],
      "author": {
        "name": "Vasiliy Kulikov",
        "email": "segooon@gmail.com",
        "time": "Mon Nov 08 14:42:40 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:53 2010 +0100"
      },
      "message": "block: ioctl: fix information leak to userland\n\nStructure hd_geometry is copied to userland with 4 padding bytes\nbetween cylinders and start fields uninitialized on 64-bit platforms.\nIt leads to leaking of contents of kernel stack memory.\n\nCurrently there is no memset() in real implementations of getgeo()\nin drivers/block/, so it makes sense to have memset() in blkdev_ioctl().\n\nSigned-off-by: Vasiliy Kulikov \u003csegooon@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "77304d2abac6101f7249754ffdd4421258877ab0",
      "tree": "8ee5914529d70120528a630a8e904c22f8c4f98c",
      "parents": [
        "90fdb0b98a62d78a0650b9fd3ddc58a48f71d740"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Nov 08 14:39:12 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:53 2010 +0100"
      },
      "message": "block: read i_size with i_size_read()\n\nConvert direct reads of an inode\u0027s i_size to using i_size_read().\n\ni_size_{read,write} use a seqcount to protect reads from accessing\nincomple writes.  Concurrent i_size_write()s require mutual exclussion\nto protect the seqcount that is used by i_size_{read,write}.  But\ni_size_read() callers do not need to use additional locking.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nAcked-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9f864c80913467312c7b8690e41fb5ebd1b50e92",
      "tree": "dea8f56529d175bc2b666b52d2f819c82abc3a19",
      "parents": [
        "9284bcf4e335e5f18a8bc7b26461c33ab60d0689"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 29 11:31:42 2010 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:42 2010 +0100"
      },
      "message": "block: take care not to overflow when calculating total iov length\n\nReported-by: Dan Rosenberg \u003cdrosenberg@vsecurity.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9284bcf4e335e5f18a8bc7b26461c33ab60d0689",
      "tree": "82860d516748327e9be4903e541479e7ac40e6a1",
      "parents": [
        "151f52f09c5728ecfdd0c289da1a4b30bb416f2c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 29 08:10:18 2010 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:42 2010 +0100"
      },
      "message": "block: check for proper length of iov entries in blk_rq_map_user_iov()\n\nEnsure that we pass down properly validated iov segments before\ncalling into the mapping or copy functions.\n\nReported-by: Dan Rosenberg \u003cdrosenberg@vsecurity.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2b9408a45978dcda77407859148deeccf403c372",
      "tree": "52fc549e7cc879c6dea98554f75da24df31c07cf",
      "parents": [
        "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t schedule a dispatch for a non-idle queue\n\nVivek suggests we don\u0027t need schedule a dispatch when an idle queue\nbecomes nonidle. And he is right, cfq_should_preempt already covers\nthe logic.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07",
      "tree": "2ba1aadf339af7d69931151e9d51f8054753ff85",
      "parents": [
        "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t idle if a deep seek queue is slow\n\nIf a deep seek queue slowly deliver requests but disk is much faster, idle\nfor the queue just wastes disk throughput. If the queue delevers all requests\nbefore half its slice is used, the patch disable idle for it.\nIn my test, application delivers 32 requests one time, the disk can accept\n128 requests at maxium and disk is fast. without the patch, the throughput\nis just around 30m/s, while with it, the speed is about 80m/s. The disk is\na SSD, but is detected as a rotational disk. I can configure it as SSD, but\nI thought the deep seek queue logic should be fixed too, for example,\nconsidering a fast raid.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4",
      "tree": "b39812dc8fd9ae552c361a84a10dcd61d2caaab5",
      "parents": [
        "c1e44756fdb7b363fd22cb5514dced40752e36c5"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "message": "cfq-iosched: schedule dispatch for noidle queue\n\nA queue is idle at cfq_dispatch_requests(), but it gets noidle later. Unless\nother task explictly does unplug or all requests are drained, we will not\ndeliever requests to the disk even cfq_arm_slice_timer doesn\u0027t make the\nqueue idle. For example, cfq_should_idle() returns true because of\nservice_tree-\u003ecount \u003d\u003d 1, and then other queues are added. Note, I didn\u0027t\nsee obvious performance impacts so far with the patch, but just thought\nthis could be a problem.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1e44756fdb7b363fd22cb5514dced40752e36c5",
      "tree": "796ca172be3270043efa02d5d0bb2552e48cd9d8",
      "parents": [
        "f6f94e2ab1b33f0082ac22d71f66385a60d8157f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "message": "cfq-iosched: do cleanup\n\nSome functions should return boolean.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b595076a180a56d1bb170e6eceda6eb9d76f4cd3",
      "tree": "bc01ec7283808013e0b8ce7713fd6fc40f810429",
      "parents": [
        "6aaccece1c483f189f76f1282b3984ff4c7ecb0a"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "message": "tree-wide: fix comment/printk typos\n\n\"gadget\", \"through\", \"command\", \"maintain\", \"maintain\", \"controller\", \"address\",\n\"between\", \"initiali[zs]e\", \"instead\", \"function\", \"select\", \"already\",\n\"equal\", \"access\", \"management\", \"hierarchy\", \"registration\", \"interest\",\n\"relative\", \"memory\", \"offset\", \"already\",\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "8e775167d54e6521e7cdbc03ee7ec42a8c67b49a",
      "tree": "a49914306fb28505c6e21a456df8bdc40d6eac23",
      "parents": [
        "4b37ba90f49d4157ac5628f8d730d3505f176724",
        "f253b86b4ad1b3220544e75880510fd455ebd23f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 25 07:45:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 25 07:45:10 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  Revert \"block: fix accounting bug on cross partition merges\"\n"
    }
  ],
  "next": "229aebb873e29726b91e076161649cf45154b0bf"
}
