)]}'
{
  "log": [
    {
      "commit": "c553f8e335c00a7cff3ab3f13e793b13d3f2207f",
      "tree": "f9371c9e1191711dd2e774e04d99f3fa90d697fa",
      "parents": [
        "f8ae6e3eb8251be32c6e913393d9f8d9e0609489"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "message": "block cfq: compensate preempted queue even if it has no slice assigned\n\nIf a queue is preempted before it gets slice assigned, the queue doesn\u0027t get\ncompensation, which looks unfair. For such queue, we compensate it for a whole\nslice.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f8ae6e3eb8251be32c6e913393d9f8d9e0609489",
      "tree": "50b096572a4f8e7992e7e7e2e599e77d334c2b5b",
      "parents": [
        "52cfd503ad7176d23a5dd7af3981744feb60622f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "message": "block cfq: make queue preempt work for queues from different workload\n\nI got this:\n             fio-874   [007]  2157.724514:   8,32   m   N cfq874 preempt\n             fio-874   [007]  2157.724519:   8,32   m   N cfq830 slice expired t\u003d1\n             fio-874   [007]  2157.724520:   8,32   m   N cfq830 sl_used\u003d1 disp\u003d0 charge\u003d1 iops\u003d0 sect\u003d0\n             fio-874   [007]  2157.724521:   8,32   m   N cfq830 set_active wl_prio:0 wl_type:0\n             fio-874   [007]  2157.724522:   8,32   m   N cfq830 Not idling. st-\u003ecount:1\n\ncfq830 is an async queue, and preempted by a sync queue cfq874. But since we\nhave cfqg-\u003esaved_workload_slice mechanism, the preempt is a nop.\nLooks currently our preempt is totally broken if the two queues are not from\nthe same workload type.\nBelow patch fixes it. This will might make async queue starvation, but it\u0027s\nwhat our old code does before cgroup is added.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "275220f0fcff1adf28a717076e00f575edf05fda",
      "tree": "d249bccc80c64443dab211639050c4fb14332648",
      "parents": [
        "fe3c560b8a22cb28e54fe8950abef38e88d75831",
        "81c5e2ae33c4b19e53966b427e33646bf6811830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block: (43 commits)\n  block: ensure that completion error gets properly traced\n  blktrace: add missing probe argument to block_bio_complete\n  block cfq: don\u0027t use atomic_t for cfq_group\n  block cfq: don\u0027t use atomic_t for cfq_queue\n  block: trace event block fix unassigned field\n  block: add internal hd part table references\n  block: fix accounting bug on cross partition merges\n  kref: add kref_test_and_get\n  bio-integrity: mark kintegrityd_wq highpri and CPU intensive\n  block: make kblockd_workqueue smarter\n  Revert \"sd: implement sd_check_events()\"\n  block: Clean up exit_io_context() source code.\n  Fix compile warnings due to missing removal of a \u0027ret\u0027 variable\n  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n  block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n  cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n  fs/splice: Pull buf-\u003eops-\u003econfirm() from splice_from_pipe actors\n  cdrom: export cdrom_check_events()\n  sd: implement sd_check_events()\n  sr: implement sr_check_events()\n  ...\n"
    },
    {
      "commit": "329a67815b596d23daf0caa588ae0800e925320f",
      "tree": "5fcf8a7c4a4d43b2cc7dc220d6bb25bdf27d153f",
      "parents": [
        "30d7b9448f03f2c82d0fd44738674cc156a8ce0a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_group\n\ncfq_group-\u003eref is used with queue_lock hold, the only exception is\ncfq_set_request, which looks like a bug to me, so ref doesn\u0027t need\nto be an atomic and atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "30d7b9448f03f2c82d0fd44738674cc156a8ce0a",
      "tree": "f925a59dfe6a7b2da5240e9d43d873de7b1de273",
      "parents": [
        "b7908c1035af7652cd613991b54dbff9c8b6bd3a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_queue\n\ncfq_queue-\u003eref is used with queue_lock hold, so ref doesn\u0027t need to be an atomic\nand atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7278c9c19bd85cf33213a2e0b538a18d3ac8ad00",
      "tree": "e080ada1f8cc00fef4600976f8cf489cc94d1c03",
      "parents": [
        "a8adbe378b56acd5945df70753c7e8f6fe223304"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n\nWhen cfq_choose_cfqg() is called in select_queue(), there must be at least one\nbacklogged CFQ queue waiting for dispatching, hence there must be at least one\nbacklogged CFQ group on service tree. So we never call choose_service_tree()\nwith cfqg \u003d\u003d NULL.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e4ea0c16a85d221ebcc3a21f32e321440459e0fc",
      "tree": "47acf4da84f9a448e6eb6172a5440ccc60696ed9",
      "parents": [
        "760701bfe14faee8ea0608a9cab2046071d98a39"
      ],
      "author": {
        "name": "Shaohua Li writes",
        "email": "shaohua.li@intel.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "message": "block cfq: select new workload if priority changed\n\nIf priority is changed, continuing to check workload_expires and service tree\ncount of the previous workload does not make sense. We should always choose\nthe workload with lowest key of new priority in such case.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "760701bfe14faee8ea0608a9cab2046071d98a39",
      "tree": "780193b7803aced7ecb2a53f0ce43150eb8ebeab",
      "parents": [
        "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of on_st flag\n\nIt\u0027s able to check whether a CFQ group on a service tree by\nchecking \"cfqg-\u003erb_node\". There\u0027s no need to maintain an\nextra flag here.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42",
      "tree": "fcf25315bb0ef06ad7f9017f84fce9021768682f",
      "parents": [
        "f30195c50245d8ace628e1978b1daa8df86e7224"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of st-\u003eactive\n\nWhen a cfq group is running, it won\u0027t be dequeued from service tree, so\nthere\u0027s no need to store the active one in st-\u003eactive. Just gid rid of it.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a02056349cdea2252cd2b21643ebf025e83a29f2",
      "tree": "b7c889d6cbe8e7188d07d99a5c9da858c53a5b6c",
      "parents": [
        "34db1d595ef6f183fbc1e42cda45a3dfa0035258",
        "e53beacd23d9cb47590da6a7a7f6d417b941a994"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "message": "Merge branch \u0027v2.6.37-rc2\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "2b9408a45978dcda77407859148deeccf403c372",
      "tree": "52fc549e7cc879c6dea98554f75da24df31c07cf",
      "parents": [
        "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t schedule a dispatch for a non-idle queue\n\nVivek suggests we don\u0027t need schedule a dispatch when an idle queue\nbecomes nonidle. And he is right, cfq_should_preempt already covers\nthe logic.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07",
      "tree": "2ba1aadf339af7d69931151e9d51f8054753ff85",
      "parents": [
        "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t idle if a deep seek queue is slow\n\nIf a deep seek queue slowly deliver requests but disk is much faster, idle\nfor the queue just wastes disk throughput. If the queue delevers all requests\nbefore half its slice is used, the patch disable idle for it.\nIn my test, application delivers 32 requests one time, the disk can accept\n128 requests at maxium and disk is fast. without the patch, the throughput\nis just around 30m/s, while with it, the speed is about 80m/s. The disk is\na SSD, but is detected as a rotational disk. I can configure it as SSD, but\nI thought the deep seek queue logic should be fixed too, for example,\nconsidering a fast raid.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4",
      "tree": "b39812dc8fd9ae552c361a84a10dcd61d2caaab5",
      "parents": [
        "c1e44756fdb7b363fd22cb5514dced40752e36c5"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "message": "cfq-iosched: schedule dispatch for noidle queue\n\nA queue is idle at cfq_dispatch_requests(), but it gets noidle later. Unless\nother task explictly does unplug or all requests are drained, we will not\ndeliever requests to the disk even cfq_arm_slice_timer doesn\u0027t make the\nqueue idle. For example, cfq_should_idle() returns true because of\nservice_tree-\u003ecount \u003d\u003d 1, and then other queues are added. Note, I didn\u0027t\nsee obvious performance impacts so far with the patch, but just thought\nthis could be a problem.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1e44756fdb7b363fd22cb5514dced40752e36c5",
      "tree": "796ca172be3270043efa02d5d0bb2552e48cd9d8",
      "parents": [
        "f6f94e2ab1b33f0082ac22d71f66385a60d8157f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "message": "cfq-iosched: do cleanup\n\nSome functions should return boolean.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b595076a180a56d1bb170e6eceda6eb9d76f4cd3",
      "tree": "bc01ec7283808013e0b8ce7713fd6fc40f810429",
      "parents": [
        "6aaccece1c483f189f76f1282b3984ff4c7ecb0a"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "message": "tree-wide: fix comment/printk typos\n\n\"gadget\", \"through\", \"command\", \"maintain\", \"maintain\", \"controller\", \"address\",\n\"between\", \"initiali[zs]e\", \"instead\", \"function\", \"select\", \"already\",\n\"equal\", \"access\", \"management\", \"hierarchy\", \"registration\", \"interest\",\n\"relative\", \"memory\", \"offset\", \"already\",\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "e9dd2b6837e26fe202708cce5ea4bb4ee3e3482e",
      "tree": "f42fd892495bfc4cbb740d06b016d267c9c42d00",
      "parents": [
        "4f3a29dadaf999a273f1e7fe2476595d0283eef3",
        "b4627321e18582dcbdeb45d77df29d3177107c65"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block: (39 commits)\n  cfq-iosched: Fix a gcc 4.5 warning and put some comments\n  block: Turn bvec_k{un,}map_irq() into static inline functions\n  block: fix accounting bug on cross partition merges\n  block: Make the integrity mapped property a bio flag\n  block: Fix double free in blk_integrity_unregister\n  block: Ensure physical block size is unsigned int\n  blkio-throttle: Fix possible multiplication overflow in iops calculations\n  blkio-throttle: limit max iops value to UINT_MAX\n  blkio-throttle: There is no need to convert jiffies to milli seconds\n  blkio-throttle: Fix link failure failure on i386\n  blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n  blkio: Add root group to td-\u003etg_list\n  blkio: deletion of a cgroup was causes oops\n  blkio: Do not export throttle files if CONFIG_BLK_DEV_THROTTLING\u003dn\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: revert bad fix for memory hotplug causing bounces\n  Fix compile error in blk-exec.c for !CONFIG_DETECT_HUNG_TASK\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: Prevent hang_check firing during long I/O\n  cfq: improve fsync performance for small files\n  ...\n\nFix up trivial conflicts due to __rcu sparse annotation in include/linux/genhd.h\n"
    },
    {
      "commit": "b4627321e18582dcbdeb45d77df29d3177107c65",
      "tree": "f494dae7f39f219d73aa9752dfd3844293d65f50",
      "parents": [
        "11a691bea48887c27425cc40bf291e74c922df25"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 22 09:48:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 22 09:48:43 2010 +0200"
      },
      "message": "cfq-iosched: Fix a gcc 4.5 warning and put some comments\n\n- Andi encountedred following warning with gcc 4.5\n\n  linux/block/cfq-iosched.c: In function ‘cfq_dispatch_requests’:\n  linux/block/cfq-iosched.c:2156:3: warning: array subscript is above array\n  bounds\n\n- Warning happens due to following code.\n\n  slice \u003d group_slice * count /\n\t\tmax_t(unsigned, cfqg-\u003ebusy_queues_avg[cfqd-\u003eserving_prio],\n\t\tcfq_group_busy_queues_wl(cfqd-\u003eserving_prio, cfqd, cfqg));\n\n  gcc is complaining about cfqg-\u003ebusy_queues_avg[] being indexed by CFQ\n  prio classes (RT, BE and IDLE) while the array size is only 2.\n\n- At run time, we never access cfqg-\u003ebusy_queues_avg[IDLE] and return from\n  function before this code hits.\n\n- To fix warning increase the array size though it will remain unused. This\n  patch also puts some comments to clarify some of the confusions.\n\n- I have taken Jens\u0027s patch and modified it a bit.\n\n- Compile tested with gcc 4.4 and boot tested. I don\u0027t have gcc 4.5\n  running, Andi can you please test it with gcc 4.5 to make sure it\n  worked.\n\nReported-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fe0714377ee2ca161bf2afb7773e22f15f1786d4",
      "tree": "09f5e8686d741d012333c92251b8cc66793ef916",
      "parents": [
        "02977e4af7ed3b478c505e50491ffdf3e1314cf4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "message": "blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n\no Currently any cgroup throttle limit changes are processed asynchronousy and\n  the change does not take affect till a new bio is dispatched from same group.\n\no It might happen that a user sets a redicuously low limit on throttling.\n  Say 1 bytes per second on reads. In such cases simple operations like mount\n  a disk can wait for a very long time.\n\no Once bio is throttled, there is no easy way to come out of that wait even if\n  user increases the read limit later.\n\no This patch fixes it. Now if a user changes the cgroup limits, we recalculate\n  the bio dispatch time according to new limits.\n\no Can\u0027t take queueu lock under blkcg_lock, hence after the change I wake\n  up the dispatch thread again which recalculates the time. So there are some\n  variables being synchronized across two threads without lock and I had to\n  make use of barriers. Hoping I have used barriers correctly. Any review of\n  memory barrier code especially will help.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "180be2a0420a0d680285e9352c0db85016b9ed2a",
      "tree": "455f9f890a52bf728c4d8ab96f8773ff41347a5c",
      "parents": [
        "a45dc2d2b8d1afa57c91dcfac224e50ffcd3f805"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Sep 14 08:47:11 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Sep 21 11:49:17 2010 +0200"
      },
      "message": "cfq-iosched: fix a kernel OOPs when usb key is inserted\n\nMike reported a kernel crash when a usb key hotplug is performed while all\nkernel thrads are not in a root cgroup and are running in one of the child\ncgroups of blkio controller.\n\n\tBUG: unable to handle kernel NULL pointer dereference at 0000002c\n\tIP: [\u003cc11c7b08\u003e] cfq_get_queue+0x232/0x412\n\t*pde \u003d 00000000\n\tOops: 0000 [#1] PREEMPT\n\tlast sysfs file: /sys/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host3/scsi_host/host3/uevent\n\n\t[..]\n\tPid: 30039, comm: scsi_scan_3 Not tainted 2.6.35.2-fg.roam #1 Volvi2                         /Aspire 4315\n\tEIP: 0060:[\u003cc11c7b08\u003e] EFLAGS: 00010086 CPU: 0\n\tEIP is at cfq_get_queue+0x232/0x412\n\tEAX: f705f9c0 EBX: e977abac ECX: 00000000 EDX: 00000000\n\tESI: f00da400 EDI: f00da4ec EBP: e977a800 ESP: dff8fd00\n\t DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068\n\tProcess scsi_scan_3 (pid: 30039, ti\u003ddff8e000 task\u003df6b6c9a0 task.ti\u003ddff8e000)\n\tStack:\n\t 00000000 00000000 00000001 01ff0000 f00da508 00000000 f00da524 f00da540\n\t\u003c0\u003e e7994940 dd631750 f705f9c0 e977a820 e977ac44 f00da4d0 00000001 f6b6c9a0\n\t\u003c0\u003e 00000010 00008010 0000000b 00000000 00000001 e977a800 dd76fac0 00000246\n\tCall Trace:\n\t [\u003cc11c7f10\u003e] ? cfq_set_request+0x228/0x34c\n\t [\u003cc11c7ce8\u003e] ? cfq_set_request+0x0/0x34c\n\t [\u003cc11bb3b9\u003e] ? elv_set_request+0xf/0x1c\n\t [\u003cc11bdd51\u003e] ? get_request+0x1ad/0x22f\n\t [\u003cc11bddf2\u003e] ? get_request_wait+0x1f/0x11a\n\t [\u003cc11d013b\u003e] ? kvasprintf+0x33/0x3b\n\t [\u003cc127b537\u003e] ? scsi_execute+0x1d/0x103\n\t [\u003cc127b675\u003e] ? scsi_execute_req+0x58/0x83\n\t [\u003cc127c391\u003e] ? scsi_probe_and_add_lun+0x188/0x7c2\n\t [\u003cc12718c6\u003e] ? attribute_container_add_device+0x15/0xfa\n\t [\u003cc11c95d1\u003e] ? kobject_get+0xf/0x13\n\t [\u003cc126d1db\u003e] ? get_device+0x10/0x14\n\t [\u003cc127be93\u003e] ? scsi_alloc_target+0x217/0x24d\n\t [\u003cc127cbd8\u003e] ? __scsi_scan_target+0x95/0x480\n\t [\u003cc10204eb\u003e] ? dequeue_entity+0x14/0x1fe\n\t [\u003cc1020491\u003e] ? update_curr+0x165/0x1ab\n\t [\u003cc1020491\u003e] ? update_curr+0x165/0x1ab\n\t [\u003cc127d00d\u003e] ? scsi_scan_channel+0x4a/0x76\n\t [\u003cc127d0b0\u003e] ? scsi_scan_host_selected+0x77/0xad\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc127d137\u003e] ? do_scsi_scan_host+0x51/0x56\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc127d14a\u003e] ? do_scan_async+0xe/0x11a\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc10354c5\u003e] ? kthread+0x5e/0x63\n\t [\u003cc1035467\u003e] ? kthread+0x0/0x63\n\t [\u003cc1002af6\u003e] ? kernel_thread_helper+0x6/0x10\n\tCode: 44 24 1c 54 83 44 24 18 54 83 fa 03 75 94 8b 06 c7 86 64 02 00 00 01 00 00 00 83 e0 03 09 f0 89 06 8b 44 24 28 8b 90 58 01 00 00 \u003c8b\u003e 42 2c 85 c0 75 03 8b 42 08 8d 54 24 48 52 8d 4c 24 50 51 68\n\tEIP: [\u003cc11c7b08\u003e] cfq_get_queue+0x232/0x412 SS:ESP 0068:dff8fd00\n\tCR2: 000000000000002c\n\t---[ end trace 9a88306573f69b12 ]---\n\nThe problem here is that we don\u0027t have bdi-\u003edev information available when\nthread does some IO.  Hence when dev_name() tries to access bdi-\u003edev, it\ncrashes.\n\nThis problem does not happen if kernel threads are in root group as root\ngroup is statically allocated at device initialization time and we don\u0027t\nhit this piece of code.\n\nFix it by delaying the filling of major and minor number information of\ndevice in blk_group.  Initially a blk_group is created with 0 as device\ninformation and this information is filled later once some more IO comes\nin from same group.\n\nReported-by: Mike Kazantsev \u003cmk.fraggod@gmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "749ef9f8423054e326f3a246327ed2db4b6d395f",
      "tree": "388df763e4e731f5d9b4d8dcaedca641521571e3",
      "parents": [
        "6d0aed7a38d06284db2a0e46c0a072b0c1c3299b"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Mon Sep 20 15:24:50 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 20 15:24:50 2010 +0200"
      },
      "message": "cfq: improve fsync performance for small files\n\nFsync performance for small files achieved by cfq on high-end disks is\nlower than what deadline can achieve, due to idling introduced between\nthe sync write happening in process context and the journal commit.\n\nMoreover, when competing with a sequential reader, a process writing\nsmall files and fsync-ing them is starved.\n\nThis patch fixes the two problems by:\n- marking journal commits as WRITE_SYNC, so that they get the REQ_NOIDLE\n  flag set,\n- force all queues that have REQ_NOIDLE requests to be put in the noidle\n  tree.\n\nHaving the queue associated to the fsync-ing process and the one associated\n to journal commits in the noidle tree allows:\n- switching between them without idling,\n- fairness vs. competing idling queues, since they will be serviced only\n  after the noidle tree expires its slice.\n\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nTested-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "062a644d6121d5e2f51c0b2ca0cbc5155ebf845b",
      "tree": "250626a8ee11efa8e598692904e12ac26c29cab5",
      "parents": [
        "af41d7bd9b685ab4e8f930627874ba4f4728e128"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Sep 15 17:06:33 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 08:42:04 2010 +0200"
      },
      "message": "blk-cgroup: Prepare the base for supporting more than one IO control policies\n\no This patch prepares the base for introducing new IO control policies.\n  Currently all the code is written knowing there is only one policy\n  and that is proportional bandwidth. Creating infrastructure for newer\n  policies to come in.\n\no Also there were many functions which were generated using macro. It was\n  very confusing. Got rid of those.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c4e7893ebc3a5c507b53f59b9de448db20849944",
      "tree": "bcb89e402cf8c36c33d70f04dc5fd434e1d58321",
      "parents": [
        "80bdf0c78fff075dfa21576273c8b0c7db22bdfe"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:25:03 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:25:03 2010 +0200"
      },
      "message": "cfq-iosched: blktrace print per slice sector stats\n\no Divyesh had gotten rid of this code in the past. I want to re-introduce it\n  back as it helps me a lot during debugging.\n\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nReviewed-by: Divyesh Shah \u003cdpshah@google.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "80bdf0c78fff075dfa21576273c8b0c7db22bdfe",
      "tree": "f9075075f282e1e2adf1b2cb1fbc25991df7c6af",
      "parents": [
        "02b35081fc98f681411586d3acf9eaad8b8f6e07"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:24:26 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:24:26 2010 +0200"
      },
      "message": "cfq-iosched: Implement tunable group_idle\n\no Implement a new tunable group_idle, which allows idling on the group\n  instead of a cfq queue. Hence one can set slice_idle \u003d 0 and not idle\n  on the individual queues but idle on the group. This way on fast storage\n  we can get fairness between groups at the same time overall throughput\n  improves.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02b35081fc98f681411586d3acf9eaad8b8f6e07",
      "tree": "66cc8c375205a5b032859cdcb0b9b82f04f97443",
      "parents": [
        "b6508c1618e7aab085f191efb41b7b019a94ea38"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:23:53 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:23:53 2010 +0200"
      },
      "message": "cfq-iosched: Do group share accounting in IOPS when slice_idle\u003d0\n\no Implement another CFQ mode where we charge group in terms of number\n  of requests dispatched instead of measuring the time. Measuring in terms\n  of time is not possible when we are driving deeper queue depths and there\n  are requests from multiple cfq queues in the request queue.\n\no This mode currently gets activated if one sets slice_idle\u003d0 and associated\n  disk supports NCQ. Again the idea is that on an NCQ disk with idling disabled\n  most of the queues will dispatch 1 or more requests and then cfq queue\n  expiry happens and we don\u0027t have a way to measure time. So start providing\n  fairness in terms of IOPS.\n\no Currently IOPS mode works only with cfq group scheduling. CFQ is following\n  different scheduling algorithms for queue and group scheduling. These IOPS\n  stats are used only for group scheduling hence in non-croup mode nothing\n  should change.\n\no For CFQ group scheduling one can disable slice idling so that we don\u0027t idle\n  on queue and drive deeper request queue depths (achieving better throughput),\n  at the same time group idle is enabled so one should get service\n  differentiation among groups.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b6508c1618e7aab085f191efb41b7b019a94ea38",
      "tree": "9568819705ebbdc3f4bca2d3d0290fe1a0773085",
      "parents": [
        "75230ff2751e88d594a13a70eae2c146f45e323b"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Aug 23 12:23:33 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 23 12:23:33 2010 +0200"
      },
      "message": "cfq-iosched: Do not idle if slice_idle\u003d0\n\nDo not idle either on cfq queue or service tree if slice_idle\u003d0. User does\nnot want any queue or service tree idling. Currently even if slice_idle\u003d0,\nwe were waiting for request to finish before expiring the queue and that\ncan lead to lower queue depths.\n\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7b6d91daee5cac6402186ff224c3af39d79f4a0e",
      "tree": "b1518cf0b6c301178e0a320f80610cd5b3aa7625",
      "parents": [
        "33659ebbae262228eef4e0fe990f393d1f0ed941"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "message": "block: unify flags for struct bio and struct request\n\nRemove the current bio flags and reuse the request flags for the bio, too.\nThis allows to more easily trace the type of I/O from the filesystem\ndown to the block driver.  There were two flags in the bio that were\nmissing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I\u0027ve\nrenamed two request flags that had a superflous RW in them.\n\nNote that the flags are in bio.h despite having the REQ_ name - as\nblkdev.h includes bio.h that is the only way to go for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "33659ebbae262228eef4e0fe990f393d1f0ed941",
      "tree": "fcb537f09359c8dad3a6f6e16dc4319562dc42cc",
      "parents": [
        "7e005f79791dcd58436c88ded4a7f5aed1b82147"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:17:56 2010 +0200"
      },
      "message": "block: remove wrappers for request type/flags\n\nRemove all the trivial wrappers for the cmd_type and cmd_flags fields in\nstruct requests.  This allows much easier grepping for different request\ntypes instead of unwinding through macros.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e98ef89b30b8a2e882b11d4965347015770f3627",
      "tree": "c67bc9a9dc9b2c2806f9bc283847e5cd9d9780ce",
      "parents": [
        "c10b61f0910466b4b99c266a7d76ac4390743fb5"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Jun 18 10:39:47 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 18 19:57:47 2010 +0200"
      },
      "message": "cfq-iosched: Fixed boot warning with BLK_CGROUP\u003dy and CFQ_GROUP_IOSCHED\u003dn\n\nHi Jens,\n\nFew days back Ingo noticed a CFQ boot time warning. This patch fixes it.\nThe issue here is that with CFQ_GROUP_IOSCHED\u003dn, CFQ should not really\nbe making blkio stat related calls.\n\n\u003e Hm, it\u0027s still not entirely fixed, as of 2.6.35-rc2-00131-g7908a9e. With\n\u003e some\n\u003e configs i get bad spinlock warnings during bootup:\n\u003e\n\u003e [   28.968013] initcall net_olddevs_init+0x0/0x82 returned 0 after 93750\n\u003e usecs\n\u003e [   28.972003] calling  b44_init+0x0/0x55 @ 1\n\u003e [   28.976009] bus: \u0027pci\u0027: add driver b44\n\u003e [   28.976374]  sda:\n\u003e [   28.978157] BUG: spinlock bad magic on CPU#1, async/0/117\n\u003e [   28.980000]  lock: 7e1c5bbc, .magic: 00000000, .owner: \u003cnone\u003e/-1, +.owner_cpu: 0\n\u003e [   28.980000] Pid: 117, comm: async/0 Not tainted +2.6.35-rc2-tip-01092-g010e7ef-dirty #8183\n\u003e [   28.980000] Call Trace:\n\u003e [   28.980000]  [\u003c41ba6d55\u003e] ? printk+0x20/0x24\n\u003e [   28.980000]  [\u003c4134b7b7\u003e] spin_bug+0x7c/0x87\n\u003e [   28.980000]  [\u003c4134b853\u003e] do_raw_spin_lock+0x1e/0x123\n\u003e [   28.980000]  [\u003c41ba92ca\u003e] ? _raw_spin_lock_irqsave+0x12/0x20\n\u003e [   28.980000]  [\u003c41ba92d2\u003e] _raw_spin_lock_irqsave+0x1a/0x20\n\u003e [   28.980000]  [\u003c4133476f\u003e] blkiocg_update_io_add_stats+0x25/0xfb\n\u003e [   28.980000]  [\u003c41335dae\u003e] ? cfq_prio_tree_add+0xb1/0xc1\n\u003e [   28.980000]  [\u003c41337bc7\u003e] cfq_insert_request+0x8c/0x425\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c10b61f0910466b4b99c266a7d76ac4390743fb5",
      "tree": "93e136a22b3a7f02ca5db41322c083a192ec44c9",
      "parents": [
        "fbbf055692aeb25c54c49d9ca84532de836fbba0"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Thu Jun 17 10:19:11 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 17 20:17:35 2010 +0200"
      },
      "message": "cfq: Don\u0027t allow queue merges for queues that have no process references\n\nHi,\n\nA user reported a kernel bug when running a particular program that did\nthe following:\n\ncreated 32 threads\n- each thread took a mutex, grabbed a global offset, added a buffer size\n  to that offset, released the lock\n- read from the given offset in the file\n- created a new thread to do the same\n- exited\n\nThe result is that cfq\u0027s close cooperator logic would trigger, as the\nthreads were issuing I/O within the mean seek distance of one another.\nThis workload managed to routinely trigger a use after free bug when\nwalking the list of merge candidates for a particular cfqq\n(cfqq-\u003enew_cfqq).  The logic used for merging queues looks like this:\n\nstatic void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)\n{\n\tint process_refs, new_process_refs;\n\tstruct cfq_queue *__cfqq;\n\n\t/* Avoid a circular list and skip interim queue merges */\n\twhile ((__cfqq \u003d new_cfqq-\u003enew_cfqq)) {\n\t\tif (__cfqq \u003d\u003d cfqq)\n\t\t\treturn;\n\t\tnew_cfqq \u003d __cfqq;\n\t}\n\n\tprocess_refs \u003d cfqq_process_refs(cfqq);\n\t/*\n\t * If the process for the cfqq has gone away, there is no\n\t * sense in merging the queues.\n\t */\n\tif (process_refs \u003d\u003d 0)\n\t\treturn;\n\n\t/*\n\t * Merge in the direction of the lesser amount of work.\n\t */\n\tnew_process_refs \u003d cfqq_process_refs(new_cfqq);\n\tif (new_process_refs \u003e\u003d process_refs) {\n\t\tcfqq-\u003enew_cfqq \u003d new_cfqq;\n\t\tatomic_add(process_refs, \u0026new_cfqq-\u003eref);\n\t} else {\n\t\tnew_cfqq-\u003enew_cfqq \u003d cfqq;\n\t\tatomic_add(new_process_refs, \u0026cfqq-\u003eref);\n\t}\n}\n\nWhen a merge candidate is found, we add the process references for the\nqueue with less references to the queue with more.  The actual merging\nof queues happens when a new request is issued for a given cfqq.  In the\ncase of the test program, it only does a single pread call to read in\n1MB, so the actual merge never happens.\n\nNormally, this is fine, as when the queue exits, we simply drop the\nreferences we took on the other cfqqs in the merge chain:\n\n\t/*\n\t * If this queue was scheduled to merge with another queue, be\n\t * sure to drop the reference taken on that queue (and others in\n\t * the merge chain).  See cfq_setup_merge and cfq_merge_cfqqs.\n\t */\n\t__cfqq \u003d cfqq-\u003enew_cfqq;\n\twhile (__cfqq) {\n\t\tif (__cfqq \u003d\u003d cfqq) {\n\t\t\tWARN(1, \"cfqq-\u003enew_cfqq loop detected\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tnext \u003d __cfqq-\u003enew_cfqq;\n\t\tcfq_put_queue(__cfqq);\n\t\t__cfqq \u003d next;\n\t}\n\nHowever, there is a hole in this logic.  Consider the following (and\nkeep in mind that each I/O keeps a reference to the cfqq):\n\nq1-\u003enew_cfqq \u003d q2   // q2 now has 2 process references\nq3-\u003enew_cfqq \u003d q2   // q2 now has 3 process references\n\n// the process associated with q2 exits\n// q2 now has 2 process references\n\n// queue 1 exits, drops its reference on q2\n// q2 now has 1 process reference\n\n// q3 exits, so has 0 process references, and hence drops its references\n// to q2, which leaves q2 also with 0 process references\n\nq4 comes along and wants to merge with q3\n\nq3-\u003enew_cfqq still points at q2!  We follow that link and end up at an\nalready freed cfqq.\n\nSo, the fix is to not follow a merge chain if the top-most queue does\nnot have a process reference, otherwise any queue in the chain could be\nalready freed.  I also changed the logic to disallow merging with a\nqueue that does not have any process references.  Previously, we did\nthis check for one of the merge candidates, but not the other.  That\ndoesn\u0027t really make sense.\n\nWithout the attached patch, my system would BUG within a couple of\nseconds of running the reproducer program.  With the patch applied, my\nsystem ran the program for over an hour without issues.\n\nThis addresses the following bugzilla:\n    https://bugzilla.kernel.org/show_bug.cgi?id\u003d16217\n\nThanks a ton to Phil Carns for providing the bug report and an excellent\nreproducer.\n\n[ Note for stable: this applies to 2.6.32/33/34 ].\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nReported-by: Phil Carns \u003ccarns@mcs.anl.gov\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d02a2c077fb81f3224c770be62a318165b23b486",
      "tree": "74696554d35fe81d52236d4059ef2af51d870d84",
      "parents": [
        "b9598db3401282bb27b4aef77e3eee12015f7f29"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue May 25 10:16:53 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue May 25 10:17:26 2010 +0200"
      },
      "message": "cfq-iosched: fix an oops caused by slab leak\n\nI got below oops when unloading cfq-iosched. Considering scenario:\nqueue A merge to B, C merge to D and B will be merged to D. Before B is merged\nto D, we do split B. We should put B\u0027s reference for D.\n\n[  807.768536] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[  807.768539] BUG cfq_queue: Objects remaining on kmem_cache_close()\n[  807.768541] -----------------------------------------------------------------------------\n[  807.768543]\n[  807.768546] INFO: Slab 0xffffea0003e6b4e0 objects\u003d26 used\u003d1 fp\u003d0xffff88011d584fd8 flags\u003d0x200000000004082\n[  807.768550] Pid: 5946, comm: rmmod Tainted: G        W   2.6.34-07097-gf4b87de-dirty #724\n[  807.768552] Call Trace:\n[  807.768560]  [\u003cffffffff81104e8d\u003e] slab_err+0x8f/0x9d\n[  807.768564]  [\u003cffffffff811059e1\u003e] ? flush_cpu_slab+0x0/0x93\n[  807.768569]  [\u003cffffffff8164be52\u003e] ? add_preempt_count+0xe/0xca\n[  807.768572]  [\u003cffffffff8164bd9c\u003e] ? sub_preempt_count+0xe/0xb6\n[  807.768577]  [\u003cffffffff81648871\u003e] ? _raw_spin_unlock+0x15/0x30\n[  807.768580]  [\u003cffffffff8164bd9c\u003e] ? sub_preempt_count+0xe/0xb6\n[  807.768584]  [\u003cffffffff811061bc\u003e] list_slab_objects+0x9b/0x19f\n[  807.768588]  [\u003cffffffff8164bf0a\u003e] ? add_preempt_count+0xc6/0xca\n[  807.768591]  [\u003cffffffff81109e27\u003e] kmem_cache_destroy+0x13f/0x21d\n[  807.768597]  [\u003cffffffffa000ff13\u003e] cfq_slab_kill+0x1a/0x43 [cfq_iosched]\n[  807.768601]  [\u003cffffffffa000ffcf\u003e] cfq_exit+0x93/0x9e [cfq_iosched]\n[  807.768606]  [\u003cffffffff810973a2\u003e] sys_delete_module+0x1b1/0x219\n[  807.768612]  [\u003cffffffff8102fb5b\u003e] system_call_fastpath+0x16/0x1b\n[  807.768618] INFO: Object 0xffff88011d584618 @offset\u003d1560\n[  807.768622] INFO: Allocated in cfq_get_queue+0x11e/0x274 [cfq_iosched] age\u003d7173 cpu\u003d1 pid\u003d5496\n[  807.768626] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nCc: stable@kernel.org\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "80b15c7389caa81a3860f9fc2ee47ec0ea572a63",
      "tree": "469486c0371134b18f32741be35bce59f783d864",
      "parents": [
        "bca4b914b5da3d8e7b9b647f620b71dc85c0c394"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Thu May 20 23:21:41 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 24 09:06:59 2010 +0200"
      },
      "message": "cfq-iosched: compact io_context radix_tree\n\nUse small consequent indexes as radix tree keys instead of sparse cfqd address.\n\nThis change will reduce radix tree depth from 11 (6 for 32-bit hosts)\nto 1 if host have \u003c\u003d64 disks under cfq control, or to 0 if there only one disk.\nSo, this patch save 10*560 bytes for each process (5*296 for 32-bit hosts)\n\nFor each cfqd allocate cic index from ida.\nTo unlink dead cic from tree without cfqd access store index into -\u003ekey.\n(bit 0 -- dead mark, bits 1..30 -- index: ida produce id in range 0..2^31-1)\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "bca4b914b5da3d8e7b9b647f620b71dc85c0c394",
      "tree": "ed9c468396ec6ca6a04da9f7fbc341eee95e3930",
      "parents": [
        "f4b87dee923342505e1ddba8d34ce9de33e75050"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Thu May 20 23:21:34 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 24 09:06:59 2010 +0200"
      },
      "message": "cfq-iosched: remove dead_key from cfq_io_context\n\nRemove -\u003edead_key field from cfq_io_context to shrink its size to 128 bytes.\n(64 bytes for 32-bit hosts)\n\nUse lower bit in -\u003ekey as dead-mark, instead of moving key to separate field.\nAfter this for dead cfq_io_context we got cic-\u003ekey !\u003d cfqd automatically.\nThus, io_context\u0027s last-hit cache should work without changing.\n\nNow to check -\u003ekey for non-dead state compare it with cfqd,\ninstead of checking -\u003ekey for non-null value as it was before.\n\nPlus remove obsolete race protection in cfq_cic_lookup.\nThis race gone after v2.6.24-1728-g4ac845a\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ee9a3607fb03e804ddf624544105f4e34260c380",
      "tree": "ce41b6e0fa10982a306f6c142a92dbf3c9961284",
      "parents": [
        "b492e95be0ae672922f4734acf3f5d35c30be948",
        "d515e86e639890b33a09390d062b0831664f04a2"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 21:27:26 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 21:27:26 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-2.6.35\n\nConflicts:\n\tfs/ext3/fsync.c\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f1ac2502e19c59e996242d406fcc60e4c563e8ce",
      "tree": "0db91a25c4b754f8c03960cc308715200a974efc",
      "parents": [
        "6423104b6a1e6f0c18be60e8c33f02d263331d5e"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed May 19 08:27:30 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:01:02 2010 +0200"
      },
      "message": "block: remove all rcu head initializations\n\nRemove all rcu head inits. We don\u0027t care about the RCU head state before passing\nit to call_rcu() anyway. Only leave the \"on_stack\" variants so debugobjects can\nkeep track of objects on stack.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "dcf097b247affd8b88ad410a92298590c5600f44",
      "tree": "d5394d82b06fa926c6e8d9b9f12c13249348e954",
      "parents": [
        "6a7cc883d6ad95bb89282fc04e917c16d2b5584f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Apr 22 11:54:52 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu May 06 08:54:00 2010 +0200"
      },
      "message": "blk-cgroup: Fix RCU correctness warning in cfq_init_queue()\n\nIt is necessary to be in an RCU read-side critical section when invoking\ncss_id(), so this patch adds one to blkiocg_add_blkio_group().  This is\nactually a false positive, because this is called at initialization time\nand hence always refers to the root cgroup, which cannot go away.\n\n[  103.790505] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[  103.790509] [ INFO: suspicious rcu_dereference_check() usage. ]\n[  103.790511] ---------------------------------------------------\n[  103.790514] kernel/cgroup.c:4432 invoked rcu_dereference_check() without protection!\n[  103.790517]\n[  103.790517] other info that might help us debug this:\n[  103.790519]\n[  103.790521]\n[  103.790521] rcu_scheduler_active \u003d 1, debug_locks \u003d 1\n[  103.790524] 4 locks held by bash/4422:\n[  103.790526]  #0:  (\u0026buffer-\u003emutex){+.+.+.}, at: [\u003cffffffff8114befa\u003e] sysfs_write_file+0x3c/0x144\n[  103.790537]  #1:  (s_active#102){.+.+.+}, at: [\u003cffffffff8114bfa5\u003e] sysfs_write_file+0xe7/0x144\n[  103.790544]  #2:  (\u0026q-\u003esysfs_lock){+.+.+.}, at: [\u003cffffffff812263b1\u003e] queue_attr_store+0x49/0x8f\n[  103.790552]  #3:  (\u0026(\u0026blkcg-\u003elock)-\u003erlock){......}, at: [\u003cffffffff8122e4db\u003e] blkiocg_add_blkio_group+0x2b/0xad\n[  103.790560]\n[  103.790561] stack backtrace:\n[  103.790564] Pid: 4422, comm: bash Not tainted 2.6.34-rc4-blkio-second-crash #81\n[  103.790567] Call Trace:\n[  103.790572]  [\u003cffffffff81068f57\u003e] lockdep_rcu_dereference+0x9d/0xa5\n[  103.790577]  [\u003cffffffff8107fac1\u003e] css_id+0x44/0x57\n[  103.790581]  [\u003cffffffff8122e503\u003e] blkiocg_add_blkio_group+0x53/0xad\n[  103.790586]  [\u003cffffffff81231936\u003e] cfq_init_queue+0x139/0x32c\n[  103.790591]  [\u003cffffffff8121f2d0\u003e] elv_iosched_store+0xbf/0x1bf\n[  103.790595]  [\u003cffffffff812263d8\u003e] queue_attr_store+0x70/0x8f\n[  103.790599]  [\u003cffffffff8114bfa5\u003e] ? sysfs_write_file+0xe7/0x144\n[  103.790603]  [\u003cffffffff8114bfc6\u003e] sysfs_write_file+0x108/0x144\n[  103.790609]  [\u003cffffffff810f527f\u003e] vfs_write+0xae/0x10b\n[  103.790612]  [\u003cffffffff81069863\u003e] ? trace_hardirqs_on_caller+0x10c/0x130\n[  103.790616]  [\u003cffffffff810f539c\u003e] sys_write+0x4a/0x6e\n[  103.790622]  [\u003cffffffff81002b5b\u003e] system_call_fastpath+0x16/0x1b\n[  103.790625]\n\nLocated-by: Miles Lane \u003cmiles.lane@gmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "50eaeb323a170e231263ccb433bb2f99bd9e27ac",
      "tree": "44965684ed3e5d7469d2038ebbf44e3062367499",
      "parents": [
        "3f14d792f9a8fede64ce918dbb517f934497a4f8"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Wed Apr 28 19:50:33 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 28 19:51:38 2010 +0200"
      },
      "message": "cfq-iosched: fix broken cfq_ref_get_cfqf() for CONFIG_BLK_CGROUP\u003dy \u0026\u0026 CFQ_GROUP_IOSCHED\u003dn\n\nWe should return the cfq_group for this case, not NULL.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "afc24d49c1e5dbeef745c1c1246f5ae6ebd97c71",
      "tree": "c936676ed21d032bf1d27f9ff1451f6242c8b3b6",
      "parents": [
        "e5ff082e8a68d9a6874990597497c7e6a96ad752"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Apr 26 19:27:56 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 26 19:27:56 2010 +0200"
      },
      "message": "blk-cgroup: config options re-arrangement\n\nThis patch fixes few usability and configurability issues.\n\no All the cgroup based controller options are configurable from\n  \"Genral Setup/Control Group Support/\" menu. blkio is the only exception.\n  Hence make this option visible in above menu and make it configurable from\n  there to bring it inline with rest of the cgroup based controllers.\n\no Get rid of CONFIG_DEBUG_CFQ_IOSCHED.\n\n  This option currently does two things.\n\n  - Enable printing of cgroup paths in blktrace\n  - Enables CONFIG_DEBUG_BLK_CGROUP, which in turn displays additional stat\n    files in cgroup.\n\n  If we are using group scheduling, blktrace data is of not really much use\n  if cgroup information is not present. To get this data, currently one has to\n  also enable CONFIG_DEBUG_CFQ_IOSCHED, which in turn brings the overhead of\n  all the additional debug stat files which is not desired.\n\n  Hence, this patch moves printing of cgroup paths under\n  CONFIG_CFQ_GROUP_IOSCHED.\n\n  This allows us to get rid of CONFIG_DEBUG_CFQ_IOSCHED completely. Now all\n  the debug stat files are controlled only by CONFIG_DEBUG_BLK_CGROUP which\n  can be enabled through config menu.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Divyesh Shah \u003cdpshah@google.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e5ff082e8a68d9a6874990597497c7e6a96ad752",
      "tree": "43c750821e89a50a01f4c7d73a68f779a57443fe",
      "parents": [
        "7f1dc8a2d2f45fc557b27fd56115338b1d34fc24"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Apr 26 19:25:11 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 26 19:25:11 2010 +0200"
      },
      "message": "blkio: Fix another BUG_ON() crash due to cfqq movement across groups\n\no Once in a while, I was hitting a BUG_ON() in blkio code. empty_time was\n  assuming that upon slice expiry, group can\u0027t be marked empty already (except\n  forced dispatch).\n\n  But this assumption is broken if cfqq can move (group_isolation\u003d0) across\n  groups after receiving a request.\n\n  I think most likely in this case we got a request in a cfqq and accounted\n  the rq in one group, later while adding the cfqq to tree, we moved the queue\n  to a different group which was already marked empty and after dispatch from\n  slice we found group already marked empty and raised alarm.\n\n  This patch does not error out if group is already marked empty. This can\n  introduce some empty_time stat error only in case of group_isolation\u003d0. This\n  is better than crashing. In case of group_isolation\u003d1 we should still get\n  same stats as before this patch.\n\n[  222.308546] ------------[ cut here ]------------\n[  222.309311] kernel BUG at block/blk-cgroup.c:236!\n[  222.309311] invalid opcode: 0000 [#1] SMP\n[  222.309311] last sysfs file: /sys/devices/virtual/block/dm-3/queue/scheduler\n[  222.309311] CPU 1\n[  222.309311] Modules linked in: dm_round_robin dm_multipath qla2xxx scsi_transport_fc dm_zero dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]\n[  222.309311]\n[  222.309311] Pid: 4780, comm: fio Not tainted 2.6.34-rc4-blkio-config #68 0A98h/HP xw8600 Workstation\n[  222.309311] RIP: 0010:[\u003cffffffff8121ad88\u003e]  [\u003cffffffff8121ad88\u003e] blkiocg_set_start_empty_time+0x50/0x83\n[  222.309311] RSP: 0018:ffff8800ba6e79f8  EFLAGS: 00010002\n[  222.309311] RAX: 0000000000000082 RBX: ffff8800a13b7990 RCX: ffff8800a13b7808\n[  222.309311] RDX: 0000000000002121 RSI: 0000000000000082 RDI: ffff8800a13b7a30\n[  222.309311] RBP: ffff8800ba6e7a18 R08: 0000000000000000 R09: 0000000000000001\n[  222.309311] R10: 000000000002f8c8 R11: ffff8800ba6e7ad8 R12: ffff8800a13b78ff\n[  222.309311] R13: ffff8800a13b7990 R14: 0000000000000001 R15: ffff8800a13b7808\n[  222.309311] FS:  00007f3beec476f0(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000\n[  222.309311] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\n[  222.309311] CR2: 000000000040e7f0 CR3: 00000000a12d5000 CR4: 00000000000006e0\n[  222.309311] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n[  222.309311] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n[  222.309311] Process fio (pid: 4780, threadinfo ffff8800ba6e6000, task ffff8800b3d6bf00)\n[  222.309311] Stack:\n[  222.309311]  0000000000000001 ffff8800bab17a48 ffff8800bab17a48 ffff8800a13b7800\n[  222.309311] \u003c0\u003e ffff8800ba6e7a68 ffffffff8121da35 ffff880000000001 00ff8800ba5c5698\n[  222.309311] \u003c0\u003e ffff8800ba6e7a68 ffff8800a13b7800 0000000000000000 ffff8800bab17a48\n[  222.309311] Call Trace:\n[  222.309311]  [\u003cffffffff8121da35\u003e] __cfq_slice_expired+0x2af/0x3ec\n[  222.309311]  [\u003cffffffff8121fd7b\u003e] cfq_dispatch_requests+0x2c8/0x8e8\n[  222.309311]  [\u003cffffffff8120f1cd\u003e] ? spin_unlock_irqrestore+0xe/0x10\n[  222.309311]  [\u003cffffffff8120fb1a\u003e] ? blk_insert_cloned_request+0x70/0x7b\n[  222.309311]  [\u003cffffffff81210461\u003e] blk_peek_request+0x191/0x1a7\n[  222.309311]  [\u003cffffffffa0002799\u003e] dm_request_fn+0x38/0x14c [dm_mod]\n[  222.309311]  [\u003cffffffff810ae61f\u003e] ? sync_page_killable+0x0/0x35\n[  222.309311]  [\u003cffffffff81210fd4\u003e] __generic_unplug_device+0x32/0x37\n[  222.309311]  [\u003cffffffff81211274\u003e] generic_unplug_device+0x2e/0x3c\n[  222.309311]  [\u003cffffffffa00011a6\u003e] dm_unplug_all+0x42/0x5b [dm_mod]\n[  222.309311]  [\u003cffffffff8120ca37\u003e] blk_unplug+0x29/0x2d\n[  222.309311]  [\u003cffffffff8120ca4d\u003e] blk_backing_dev_unplug+0x12/0x14\n[  222.309311]  [\u003cffffffff81109a7a\u003e] block_sync_page+0x35/0x39\n[  222.309311]  [\u003cffffffff810ae616\u003e] sync_page+0x41/0x4a\n[  222.309311]  [\u003cffffffff810ae62d\u003e] sync_page_killable+0xe/0x35\n[  222.309311]  [\u003cffffffff8158aa59\u003e] __wait_on_bit_lock+0x46/0x8f\n[  222.309311]  [\u003cffffffff810ae4f5\u003e] __lock_page_killable+0x66/0x6d\n[  222.309311]  [\u003cffffffff81056f9c\u003e] ? wake_bit_function+0x0/0x33\n[  222.309311]  [\u003cffffffff810ae528\u003e] lock_page_killable+0x2c/0x2e\n[  222.309311]  [\u003cffffffff810afbc5\u003e] generic_file_aio_read+0x361/0x4f0\n[  222.309311]  [\u003cffffffff810ea044\u003e] do_sync_read+0xcb/0x108\n[  222.309311]  [\u003cffffffff811e42f7\u003e] ? security_file_permission+0x16/0x18\n[  222.309311]  [\u003cffffffff810ea6ab\u003e] vfs_read+0xab/0x108\n[  222.309311]  [\u003cffffffff810ea7c8\u003e] sys_read+0x4a/0x6e\n[  222.309311]  [\u003cffffffff81002b5b\u003e] system_call_fastpath+0x16/0x1b\n[  222.309311] Code: 58 01 00 00 00 48 89 c6 75 0a 48 83 bb 60 01 00 00 00 74 09 48 8d bb a0 00 00 00 eb 35 41 fe cc 74 0d f6 83 c0 01 00 00 04 74 04 \u003c0f\u003e 0b eb fe 48 89 75 e8 e8 be e0 de ff 66 83 8b c0 01 00 00 04\n[  222.309311] RIP  [\u003cffffffff8121ad88\u003e] blkiocg_set_start_empty_time+0x50/0x83\n[  222.309311]  RSP \u003cffff8800ba6e79f8\u003e\n[  222.309311] ---[ end trace 32b4f71dffc15712 ]---\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Divyesh Shah \u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "7f1dc8a2d2f45fc557b27fd56115338b1d34fc24",
      "tree": "355619d9483aca33f5c45642ce0bf8a042ea3236",
      "parents": [
        "8d2a91f8960b230b8bbcc4d97ed2015f5271c87d"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Apr 21 17:44:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 21 17:44:16 2010 +0200"
      },
      "message": "blkio: Fix blkio crash during rq stat update\n\nblkio + cfq was crashing even when two sequential readers were put in two\nseparate cgroups (group_isolation\u003d0).\n\nThe reason being that cfqq can migrate across groups based on its being\nsync-noidle or not, it can happen that at request insertion time, cfqq\nbelonged to one cfqg and at request dispatch time, it belonged to root\ngroup. In this case request stats per cgroup can go wrong and it also runs\ninto BUG_ON().\n\nThis patch implements rq stashing away a cfq group pointer and not relying\non cfqq-\u003ecfqg pointer alone for rq stat accounting.\n\n[   65.163523] ------------[ cut here ]------------\n[   65.164301] kernel BUG at block/blk-cgroup.c:117!\n[   65.164301] invalid opcode: 0000 [#1] SMP\n[   65.164301] last sysfs file: /sys/devices/pci0000:00/0000:00:05.0/0000:60:00.1/host9/rport-9:0-0/target9:0:0/9:0:0:2/block/sde/stat\n[   65.164301] CPU 1\n[   65.164301] Modules linked in: dm_round_robin dm_multipath qla2xxx scsi_transport_fc dm_zero dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]\n[   65.164301]\n[   65.164301] Pid: 4505, comm: fio Not tainted 2.6.34-rc4-blk-for-35 #34 0A98h/HP xw8600 Workstation\n[   65.164301] RIP: 0010:[\u003cffffffff8121924f\u003e]  [\u003cffffffff8121924f\u003e] blkiocg_update_io_remove_stats+0x5b/0xaf\n[   65.164301] RSP: 0018:ffff8800ba5a79e8  EFLAGS: 00010046\n[   65.164301] RAX: 0000000000000096 RBX: ffff8800bb268d60 RCX: 0000000000000000\n[   65.164301] RDX: ffff8800bb268eb8 RSI: 0000000000000000 RDI: ffff8800bb268e00\n[   65.164301] RBP: ffff8800ba5a7a08 R08: 0000000000000064 R09: 0000000000000001\n[   65.164301] R10: 0000000000079640 R11: ffff8800a0bd5bf0 R12: ffff8800bab4af01\n[   65.164301] R13: ffff8800bab4af00 R14: ffff8800bb1d8928 R15: 0000000000000000\n[   65.164301] FS:  00007f18f75056f0(0000) GS:ffff880001e40000(0000) knlGS:0000000000000000\n[   65.164301] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\n[   65.164301] CR2: 000000000040e7f0 CR3: 00000000ba52b000 CR4: 00000000000006e0\n[   65.164301] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n[   65.164301] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n[   65.164301] Process fio (pid: 4505, threadinfo ffff8800ba5a6000, task ffff8800ba45ae80)\n[   65.164301] Stack:\n[   65.164301]  ffff8800ba5a7a08 ffff8800ba722540 ffff8800bab4af68 ffff8800bab4af68\n[   65.164301] \u003c0\u003e ffff8800ba5a7a38 ffffffff8121d814 ffff8800ba722540 ffff8800bab4af68\n[   65.164301] \u003c0\u003e ffff8800ba722540 ffff8800a08f6800 ffff8800ba5a7a68 ffffffff8121d8ca\n[   65.164301] Call Trace:\n[   65.164301]  [\u003cffffffff8121d814\u003e] cfq_remove_request+0xe4/0x116\n[   65.164301]  [\u003cffffffff8121d8ca\u003e] cfq_dispatch_insert+0x84/0xe1\n[   65.164301]  [\u003cffffffff8121e833\u003e] cfq_dispatch_requests+0x767/0x8e8\n[   65.164301]  [\u003cffffffff8120e524\u003e] ? submit_bio+0xc3/0xcc\n[   65.164301]  [\u003cffffffff810ad657\u003e] ? sync_page_killable+0x0/0x35\n[   65.164301]  [\u003cffffffff8120ea8d\u003e] blk_peek_request+0x191/0x1a7\n[   65.164301]  [\u003cffffffffa000109c\u003e] ? dm_get_live_table+0x44/0x4f [dm_mod]\n[   65.164301]  [\u003cffffffffa0002799\u003e] dm_request_fn+0x38/0x14c [dm_mod]\n[   65.164301]  [\u003cffffffff810ad657\u003e] ? sync_page_killable+0x0/0x35\n[   65.164301]  [\u003cffffffff8120f600\u003e] __generic_unplug_device+0x32/0x37\n[   65.164301]  [\u003cffffffff8120f8a0\u003e] generic_unplug_device+0x2e/0x3c\n[   65.164301]  [\u003cffffffffa00011a6\u003e] dm_unplug_all+0x42/0x5b [dm_mod]\n[   65.164301]  [\u003cffffffff8120b063\u003e] blk_unplug+0x29/0x2d\n[   65.164301]  [\u003cffffffff8120b079\u003e] blk_backing_dev_unplug+0x12/0x14\n[   65.164301]  [\u003cffffffff81108a82\u003e] block_sync_page+0x35/0x39\n[   65.164301]  [\u003cffffffff810ad64e\u003e] sync_page+0x41/0x4a\n[   65.164301]  [\u003cffffffff810ad665\u003e] sync_page_killable+0xe/0x35\n[   65.164301]  [\u003cffffffff81589027\u003e] __wait_on_bit_lock+0x46/0x8f\n[   65.164301]  [\u003cffffffff810ad52d\u003e] __lock_page_killable+0x66/0x6d\n[   65.164301]  [\u003cffffffff81055fd4\u003e] ? wake_bit_function+0x0/0x33\n[   65.164301]  [\u003cffffffff810ad560\u003e] lock_page_killable+0x2c/0x2e\n[   65.164301]  [\u003cffffffff810aebfd\u003e] generic_file_aio_read+0x361/0x4f0\n[   65.164301]  [\u003cffffffff810e906c\u003e] do_sync_read+0xcb/0x108\n[   65.164301]  [\u003cffffffff811e32a3\u003e] ? security_file_permission+0x16/0x18\n[   65.164301]  [\u003cffffffff810e96d3\u003e] vfs_read+0xab/0x108\n[   65.164301]  [\u003cffffffff810e97f0\u003e] sys_read+0x4a/0x6e\n[   65.164301]  [\u003cffffffff81002b5b\u003e] system_call_fastpath+0x16/0x1b\n[   65.164301] Code: 00 74 1c 48 8b 8b 60 01 00 00 48 85 c9 75 04 0f 0b eb fe 48 ff c9 48 89 8b 60 01 00 00 eb 1a 48 8b 8b 58 01 00 00 48 85 c9 75 04 \u003c0f\u003e 0b eb fe 48 ff c9 48 89 8b 58 01 00 00 45 84 e4 74 16 48 8b\n[   65.164301] RIP  [\u003cffffffff8121924f\u003e] blkiocg_update_io_remove_stats+0x5b/0xaf\n[   65.164301]  RSP \u003cffff8800ba5a79e8\u003e\n[   65.164301] ---[ end trace 1b2b828753032e68 ]---\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8d2a91f8960b230b8bbcc4d97ed2015f5271c87d",
      "tree": "54b742bd0ce37c1ec227178d23d7da347993a6b5",
      "parents": [
        "b6ac23af2c66e114d3a87ef28d56f1ceec283007"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Fri Apr 16 08:10:51 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 16 08:10:51 2010 +0200"
      },
      "message": "blkio: Initialize blkg-\u003estats_lock for the root cfqg too\n\nThis fixes the lockdep warning reported by Gui Jianfeng.\n\nSigned-off-by: Divyesh Shah \u003cdpshah@google.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "28baf44299e0480d66ebb3093de5d51deff04e9f",
      "tree": "2cac2546027638c269441f4035a67abd3d267ca4",
      "parents": [
        "4facdaec1ce186e731e6baa04f074804849e9a49"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Wed Apr 14 11:22:38 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Apr 14 11:22:38 2010 +0200"
      },
      "message": "blkio: Fix compile errors\n\nFixes compile errors in blk-cgroup code for empty_time stat and a merge fix in\nCFQ. The first error was when CONFIG_DEBUG_CFQ_IOSCHED is not set.\n\nSigned-off-by: Divyesh Shah \u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "4facdaec1ce186e731e6baa04f074804849e9a49",
      "tree": "e521fba8386bf23533cfe21ea5200e615960ec07",
      "parents": [
        "a11cdaa7af56423a921a8bdad8f5a5f4ddca918a",
        "0d0fb0f9c5fddef4a10242fe3337f00f528a3099"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 13 20:03:21 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 13 20:03:21 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-2.6.35\n\nConflicts:\n\tblock/blk-cgroup.c\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a11cdaa7af56423a921a8bdad8f5a5f4ddca918a",
      "tree": "45309d760ab80347d4ad5a2cd249c988a507c636",
      "parents": [
        "da69da184c06f365b335a0e013dc6360a82abe85"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Tue Apr 13 19:59:17 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 13 19:59:17 2010 +0200"
      },
      "message": "block: Update to io-controller stats\n\nChangelog from v1:\no Call blkiocg_update_idle_time_stats() at cfq_rq_enqueued() instead of at\n  dispatch time.\n\nChangelog from original patchset: (in response to Vivek Goyal\u0027s comments)\no group blkiocg_update_blkio_group_dequeue_stats() with other DEBUG functions\no rename blkiocg_update_set_active_queue_stats() to\n  blkiocg_update_avg_queue_size_stats()\no s/request/io/ in blkiocg_update_request_add_stats() and\n  blkiocg_update_request_remove_stats()\no Call cfq_del_timer() at request dispatch() instead of\n  blkiocg_update_idle_time_stats()\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "34d0f179d6dd711d3fc13c0820a456c59aae8048",
      "tree": "0e3d533e16cd7d99b0d28ec13353862f1da96dfd",
      "parents": [
        "812df48d127365ffd0869aa139738f572a86759c"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Apr 13 16:05:49 2010 +0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 13 10:14:20 2010 +0200"
      },
      "message": "io-controller: Add a new interface \"weight_device\" for IO-Controller\n\nCurrently, IO Controller makes use of blkio.weight to assign weight for\nall devices. Here a new user interface \"blkio.weight_device\" is introduced to\nassign different weights for different devices. blkio.weight becomes the\ndefault value for devices which are not configured by \"blkio.weight_device\"\n\nYou can use the following format to assigned specific weight for a given\ndevice:\n#echo \"major:minor weight\" \u003e blkio.weight_device\n\nmajor:minor represents device number.\n\nAnd you can remove weight for a given device as following:\n#echo \"major:minor 0\" \u003e blkio.weight_device\n\nV1-\u003eV2 changes:\n- use user interface \"weight_device\" instead of \"policy\" suggested by Vivek\n- rename some struct suggested by Vivek\n- rebase to 2.6-block \"for-linus\" branch\n- remove an useless list_empty check pointed out by Li Zefan\n- some trivial typo fix\n\nV2-\u003eV3 changes:\n- Move policy_*_node() functions up to get rid of forward declarations\n- rename related functions by adding prefix \"blkio_\"\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2f4084209adc77f9a1c9f38db3019a509e167882",
      "tree": "775657114c885505ecc46605e29ea1470e986f76",
      "parents": [
        "2f10ffcfb28beb35137d9e86992c771b4a6c5f2a",
        "3440c49f5c5ecb4f29b0544aa87da71888404f8f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 11:50:29 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 11:50:29 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: (34 commits)\n  cfq-iosched: Fix the incorrect timeslice accounting with forced_dispatch\n  loop: Update mtime when writing using aops\n  block: expose the statistics in blkio.time and blkio.sectors for the root cgroup\n  backing-dev: Handle class_create() failure\n  Block: Fix block/elevator.c elevator_get() off-by-one error\n  drbd: lc_element_by_index() never returns NULL\n  cciss: unlock on error path\n  cfq-iosched: Do not merge queues of BE and IDLE classes\n  cfq-iosched: Add additional blktrace log messages in CFQ for easier debugging\n  i2o: Remove the dangerous kobj_to_i2o_device macro\n  block: remove 16 bytes of padding from struct request on 64bits\n  cfq-iosched: fix a kbuild regression\n  block: make CONFIG_BLK_CGROUP visible\n  Remove GENHD_FL_DRIVERFS\n  block: Export max number of segments and max segment size in sysfs\n  block: Finalize conversion of block limits functions\n  block: Fix overrun in lcm() and move it to lib\n  vfs: improve writeback_inodes_wb()\n  paride: fix off-by-one test\n  drbd: fix al-to-on-disk-bitmap for 4k logical_block_size\n  ...\n"
    },
    {
      "commit": "3440c49f5c5ecb4f29b0544aa87da71888404f8f",
      "tree": "62afdbc8eb90393e768d0770c20fc9b2c7e8e042",
      "parents": [
        "02246c41171097ceab3246f6dc251ac89de6004b"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Fri Apr 09 09:29:57 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 09 09:29:57 2010 +0200"
      },
      "message": "cfq-iosched: Fix the incorrect timeslice accounting with forced_dispatch\n\nWhen CFQ dispatches requests forcefully due to a barrier or changing iosched,\nit runs through all cfqq\u0027s dispatching requests and then expires each queue.\nHowever, it does not activate a cfqq before flushing its IOs resulting in\nusing stale values for computing slice_used.\nThis patch fixes it by calling activate queue before flushing reuqests from\neach queue.\n\nThis is useful mostly for barrier requests because when the iosched is changing\nit really doesnt matter if we have incorrect accounting since we\u0027re going to\nbreak down all structures anyway.\n\nWe also now expire the current timeslice before moving on with the dispatch\nto accurately account slice used for that cfqq.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "812df48d127365ffd0869aa139738f572a86759c",
      "tree": "772ef559057cd432ad874cd429287e7a912b1bb3",
      "parents": [
        "cdc1184cf4a7bd99f5473a91244197accc49146b"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Apr 08 21:15:35 2010 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 09 08:36:08 2010 +0200"
      },
      "message": "blkio: Add more debug-only per-cgroup stats\n\n1) group_wait_time - This is the amount of time the cgroup had to wait to get a\n  timeslice for one of its queues from when it became busy, i.e., went from 0\n  to 1 request queued. This is different from the io_wait_time which is the\n  cumulative total of the amount of time spent by each IO in that cgroup waiting\n  in the scheduler queue. This stat is a great way to find out any jobs in the\n  fleet that are being starved or waiting for longer than what is expected (due\n  to an IO controller bug or any other issue).\n2) empty_time - This is the amount of time a cgroup spends w/o any pending\n   requests. This stat is useful when a job does not seem to be able to use its\n   assigned disk share by helping check if that is happening due to an IO\n   controller bug or because the job is not submitting enough IOs.\n3) idle_time - This is the amount of time spent by the IO scheduler idling\n   for a given cgroup in anticipation of a better request than the exising ones\n   from other queues/cgroups.\n\nAll these stats are recorded using start and stop events. When reading these\nstats, we do not add the delta between the current time and the last start time\nif we\u0027re between the start and stop events. We avoid doing this to make sure\nthat these numbers are always monotonically increasing when read. Since we\u0027re\nusing sched_clock() which may use the tsc as its source, it may induce some\ninconsistency (due to tsc resync across cpus) if we included the current delta.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cdc1184cf4a7bd99f5473a91244197accc49146b",
      "tree": "ecd572867bfa5a82fa4ed16d7303448c7ea7d24c",
      "parents": [
        "812d402648f4fc1ab1091b2172a46fc1b367c724"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Apr 08 21:15:10 2010 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 09 08:36:08 2010 +0200"
      },
      "message": "blkio: Add io_queued and avg_queue_size stats\n\nThese stats are useful for getting a feel for the queue depth of the cgroup,\ni.e., how filled up its queues are at a given instant and over the existence of\nthe cgroup. This ability is useful when debugging problems in the wild as it\nhelps understand the application\u0027s IO pattern w/o having to read through the\nuserspace code (coz its tedious or just not available) or w/o the ability\nto run blktrace (since you may not have root access and/or not want to disturb\nperformance).\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "812d402648f4fc1ab1091b2172a46fc1b367c724",
      "tree": "9dc52d5bfdbc170559169a0157ed3295d551e9cf",
      "parents": [
        "84c124da9ff50bd71fab9c939ee5b7cd8bef2bd9"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Apr 08 21:14:23 2010 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 09 08:36:07 2010 +0200"
      },
      "message": "blkio: Add io_merged stat\n\nThis includes both the number of bios merged into requests belonging to this\ncgroup as well as the number of requests merged together.\nIn the past, we\u0027ve observed different merging behavior across upstream kernels,\nsome by design some actual bugs. This stat helps a lot in debugging such\nproblems when applications report decreased throughput with a new kernel\nversion.\n\nThis needed adding an extra elevator function to capture bios being merged as I\ndid not want to pollute elevator code with blkiocg knowledge and hence needed\nthe accounting invocation to come from CFQ.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "84c124da9ff50bd71fab9c939ee5b7cd8bef2bd9",
      "tree": "f94ad03b56c71ebbe6b92265054c5e24af25b869",
      "parents": [
        "31373d09da5b7fe21fe6f781e92bd534a3495f00"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Fri Apr 09 08:31:19 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 09 08:31:19 2010 +0200"
      },
      "message": "blkio: Changes to IO controller additional stats patches\n\nthat include some minor fixes and addresses all comments.\n\nChangelog: (most based on Vivek Goyal\u0027s comments)\no renamed blkiocg_reset_write to blkiocg_reset_stats\no more clarification in the documentation on io_service_time and io_wait_time\no Initialize blkg-\u003estats_lock\no rename io_add_stat to blkio_add_stat and declare it static\no use bool for direction and sync\no derive direction and sync info from existing rq methods\no use 12 for major:minor string length\no define io_service_time better to cover the NCQ case\no add a separate reset_stats interface\no make the indexed stats a 2d array to simplify macro and function pointer code\no blkio.time now exports in jiffies as before\no Added stats description in patch description and\n  Documentation/cgroup/blkio-controller.txt\no Prefix all stats functions with blkio and make them static as applicable\no replace IO_TYPE_MAX with IO_TYPE_TOTAL\no Moved #define constant to top of blk-cgroup.c\no Pass dev_t around instead of char *\no Add note to documentation file about resetting stats\no use BLK_CGROUP_MODULE in addition to BLK_CGROUP config option in #ifdef\n  statements\no Avoid struct request specific knowledge in blk-cgroup. blk-cgroup.h now has\n  rq_direction() and rq_sync() functions which are used by CFQ and when using\n  io-controller at a higher level, bio_* functions can be added.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a74b2adae06265b8cfa335d7d40d4a5abd11e977",
      "tree": "13f3204faa4fc4bef6270bfaa269ea45474c39f1",
      "parents": [
        "144214537370b4f133a735446ebe86e90cfb2501"
      ],
      "author": {
        "name": "Ricky Benitez",
        "email": "rickyb@google.com",
        "time": "Mon Apr 05 18:22:17 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 05 18:22:17 2010 +0200"
      },
      "message": "block: expose the statistics in blkio.time and blkio.sectors for the root cgroup\n\nCurrently, the io statistics for the root cgroup are maintained, but\nthey are not shown because the device information is not available at\nthe point that the root blkio cgroup is created. This patch updates\nthe device information when the statistics are updated so that the\nstatistics become visible.\n\nSigned-off-by: Ricky Benitez \u003crickyb@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "9195291e5f05e01d67f9a09c756b8aca8f009089",
      "tree": "e46a151fe39be2bc23d0683bedb2cbefe916fb5b",
      "parents": [
        "303a3acb2362f16c7e7f4c53b40c2f4b396dc8d5"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Apr 01 15:01:41 2010 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 02 08:44:37 2010 +0200"
      },
      "message": "blkio: Increment the blkio cgroup stats for real now\n\nWe also add start_time_ns and io_start_time_ns fields to struct request\nhere to record the time when a request is created and when it is\ndispatched to device. We use ns uints here as ms and jiffies are\nnot very useful for non-rotational media.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "303a3acb2362f16c7e7f4c53b40c2f4b396dc8d5",
      "tree": "7996f28d5659fef44594f7049e30264b16baa62d",
      "parents": [
        "9a0785b0da561e1e9c6617df85e93ae107a42f18"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Apr 01 15:01:24 2010 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 02 08:44:36 2010 +0200"
      },
      "message": "blkio: Add io controller stats like\n\n- io_service_time\n- io_wait_time\n- io_serviced\n- io_service_bytes\n\nThese stats are accumulated per operation type helping us to distinguish between\nread and write, and sync and async IO. This patch does not increment any of\nthese stats.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "9a0785b0da561e1e9c6617df85e93ae107a42f18",
      "tree": "56cb6b65f175a13c85976192216a6b8101b0d0f3",
      "parents": [
        "ed6b6dc7c142bfb5840d201a9b4a465c9e56ce33"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Apr 01 15:01:04 2010 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 02 08:44:36 2010 +0200"
      },
      "message": "blkio: Remove per-cfqq nr_sectors as we\u0027ll be passing\n\nthat info at request dispatch with other stats now. This patch removes the\nexisting support for accounting sectors for a blkio_group. This will be added\nback differently in the next two patches.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "39c01b219fd30c74869b6fc8749f7900f04e9ef6",
      "tree": "7ce59210c28e2b53daf2957174d3ae164701b181",
      "parents": [
        "b1ffe737f5b743115ee46ffb59e338e580c54902"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Mar 25 15:45:57 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Mar 25 15:46:38 2010 +0100"
      },
      "message": "cfq-iosched: Do not merge queues of BE and IDLE classes\n\nEven if they are found to be co-operating.\n\nThe prio_trees do not have any IDLE cfqqs on them. cfq_close_cooperator()\nis called from cfq_select_queue() and cfq_completed_request(). The latter\nensures that the close cooperator code does not get invoked if the current\ncfqq is of class IDLE but the former doesn\u0027t seem to have any such checks.\nSo an IDLE cfqq may get merged with a BE cfqq from the same group which\nshould be avoided.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b1ffe737f5b743115ee46ffb59e338e580c54902",
      "tree": "fb069889c4832ff90adc63bfe422e607c9b0ebc8",
      "parents": [
        "8a6d9b149f105f8bdfa8e42dd9753e45a1887a16"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Thu Mar 25 15:45:03 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Mar 25 15:45:03 2010 +0100"
      },
      "message": "cfq-iosched: Add additional blktrace log messages in CFQ for easier debugging\n\nThese have helped us debug some issues we\u0027ve noticed in earlier IO\ncontroller versions and should be useful now as well. The extra logging\ncovers:\n- idling behavior. Since there are so many conditions based on which we decide\nto idle or not, this patch adds a log message for some conditions that we\u0027ve\nfound useful.\n- workload slices and current prio and workload type\n\nChangelog from v1:\no moved log message from cfq_set_active_queue() to __cfq_set_active_queue()\no changed queue_count to st-\u003ecount\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e9ce335df51ff782035a15c261a3c0c9892a1767",
      "tree": "9ecb3c0eab9dbb0117ad9d726456850ff2f49b78",
      "parents": [
        "910ac735bad53ce54741a72a5b19ab69794ae069"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Mar 19 08:03:04 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Mar 19 08:03:04 2010 +0100"
      },
      "message": "cfq-iosched: fix a kbuild regression\n\nAlex Shi reported a kbuild regression which is about 10% performance lost.\nHe bisected to this commit: 3dde36ddea3e07dd025c4c1ba47edec91606fec0.\nThe reason is cfqq_close() can\u0027t find close cooperator. Restoring\ncfq_rq_close()\u0027s threshold to original value makes the regression go away.\n\nSince for_preempt parameter isn\u0027t used anymore, this patch deletes it.\n\nReported-by: Alex Shi \u003calex.shi@intel.com\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "73e9ffdd0cc8159f876d5e29ecf2d9c1bfca544f",
      "tree": "3c7382e98d82234ab4b6eddebcc939071c963c5e",
      "parents": [
        "91f63d0efa1b2ff3f8773aad61c2970f097232aa"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Mon Mar 01 10:50:20 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Mar 01 10:50:20 2010 +0100"
      },
      "message": "cfq: remove 8 bytes of padding from cfq_rb_root on 64 bit builds\n\nReorder cfq_rb_root to remove 8 bytes of padding on 64 bit builds.\n\nConsequently removing 56 bytes from cfq_group and 64 bytes from\ncfq_data.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "abc3c744d0d7f4ad710a948ae73852ffea5fbc3b",
      "tree": "f3aebe4f1ee8138db560b049f84d30a4b7348e8a",
      "parents": [
        "9a8c28c8311e30ba97499447d5a11662f5aea094"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Mar 01 09:20:54 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Mar 01 09:20:54 2010 +0100"
      },
      "message": "cfq-iosched: quantum check tweak\n\nCurrently a queue can only dispatch up to 4 requests if there are other queues.\nThis isn\u0027t optimal, device can handle more requests, for example, AHCI can\nhandle 31 requests. I can understand the limit is for fairness, but we could\ndo a tweak: if the queue still has a lot of slice left, sounds we could\nignore the limit. Test shows this boost my workload (two thread randread of\na SSD) from 78m/s to 100m/s.\nThanks for suggestions from Corrado and Vivek for the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "53c583d2269851de9df1c2e992cb2f7f124a5f55",
      "tree": "993a4f67663b4457771b7069513ad6e0471223b3",
      "parents": [
        "87c3a922a7ee8cfb9ab837f4ae38c993e9b30711"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Sun Feb 28 19:45:05 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Feb 28 19:45:05 2010 +0100"
      },
      "message": "cfq-iosched: requests \"in flight\" vs \"in driver\" clarification\n\nCounters for requests \"in flight\" and \"in driver\" are used asymmetrically\nin cfq_may_dispatch, and have slightly different meaning.\nWe split the rq_in_flight counter (was sync_flight) to count both sync\nand async requests, in order to use this one, which is more accurate in\nsome corner cases.\nThe rq_in_driver counter is coalesced, since individual sync/async counts\nare not used any more.\n\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "41647e7a91338dba21773a16af7474ef95e0929e",
      "tree": "9520ffbb853af141af5b802fa00f5a2e4ed783bd",
      "parents": [
        "3dde36ddea3e07dd025c4c1ba47edec91606fec0"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Sat Feb 27 19:45:40 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Feb 28 19:41:25 2010 +0100"
      },
      "message": "cfq-iosched: rethink seeky detection for SSDs\n\nCFQ currently applies the same logic of detecting seeky queues and\ngrouping them together for rotational disks as well as SSDs.\nFor SSDs, the time to complete a request doesn\u0027t depend on the\nrequest location, but only on the size.\nThis patch therefore changes the criterion to group queues by\nrequest size in case of SSDs, in order to achieve better fairness.\n\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "3dde36ddea3e07dd025c4c1ba47edec91606fec0",
      "tree": "0b8bbdb3fa9a08a3e4c6b0181a7b3325d578b111",
      "parents": [
        "6fc2de06ef1e691d032aa572478c905b7495a274"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Sat Feb 27 19:45:39 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Feb 28 19:41:25 2010 +0100"
      },
      "message": "cfq-iosched: rework seeky detection\n\nCurrent seeky detection is based on average seek lenght.\nThis is suboptimal, since the average will not distinguish between:\n* a process doing medium sized seeks\n* a process doing some sequential requests interleaved with larger seeks\nand even a medium seek can take lot of time, if the requested sector\nhappens to be behind the disk head in the rotation (50% probability).\n\nTherefore, we change the seeky queue detection to work as follows:\n* each request can be classified as sequential if it is very close to\n  the current head position, i.e. it is likely in the disk cache (disks\n  usually read more data than requested, and put it in cache for\n  subsequent reads). Otherwise, the request is classified as seeky.\n* an history window of the last 32 requests is kept, storing the\n  classification result.\n* A queue is marked as seeky if more than 1/8 of the last 32 requests\n  were seeky.\n\nThis patch fixes a regression reported by Yanmin, on mmap 64k random\nreads.\n\nReported-by: Yanmin Zhang \u003cyanmin_zhang@linux.intel.com\u003e\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "024f9066165ffe9c8284431c78adcbcddd309831",
      "tree": "11b64dd7861985aca57bd7624cd25c804afd4b1a",
      "parents": [
        "7f03292ee16e68be96aa88904afc6152f8d37736"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Fri Feb 26 08:56:15 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Feb 26 08:56:15 2010 +0100"
      },
      "message": "cfq: Remove useless css reference get\n\nThere\u0027s no need to take css reference here, for the caller\nhas already called rcu_read_lock() to prevent cgroup from\nbeing removed.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c4081ba5c9f6f7bdffe49e501a8604a2c0797ef9",
      "tree": "2c2f59a61dc7a68088ff36262de3834b46334477",
      "parents": [
        "f11cbd74c5ff3614f6390b4de67a6ffdc614c378"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Mon Feb 22 13:49:24 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Feb 22 13:49:24 2010 +0100"
      },
      "message": "cfq: reorder cfq_queue removing padding on 64bit\n\nThis removes 8 bytes of padding from struct cfq_queue on 64 bit builds,\nshrinking it\u0027s size to 256 bytes, so fitting into 1 fewer cachelines and\nallowing 1 more object/slab in it\u0027s kmem_cache.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\n----\npatch against 2.6.33-rc8\ntested on x86_64 AMDX2\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ae54abed636d18f7939c965f21ad126001dbe34c",
      "tree": "6eecccf1cb910073273699d58e620b99bf32d1a6",
      "parents": [
        "fc76be434d90bcd57a0ea6b93a2e66a3fec4b664"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Feb 05 13:11:45 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Feb 05 13:11:45 2010 +0100"
      },
      "message": "cfq-iosched: split seeky coop queues after one slice\n\nCurrently we split seeky coop queues after 1s, which is too big. Below patch\nmarks seeky coop queue split_coop flag after one slice. After that, if new\nrequests come in, the queues will be splitted. Patch is suggested by Corrado.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1efe8fe1c2240acc476bed77740883df63373862",
      "tree": "9aab2376b46432d721cdb7cf6f3be992a8951c0c",
      "parents": [
        "bcf4dd43424cdfd8195f3955300a579fe58e9911"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Feb 02 20:45:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Feb 02 20:46:10 2010 +0100"
      },
      "message": "cfq-iosched: Do not idle on async queues\n\nFew weeks back, Shaohua Li had posted similar patch. I am reposting it\nwith more test results.\n\nThis patch does two things.\n\n- Do not idle on async queues.\n\n- It also changes the write queue depth CFQ drives (cfq_may_dispatch()).\n  Currently, we seem to driving queue depth of 1 always for WRITES. This is\n  true even if there is only one write queue in the system and all the logic\n  of infinite queue depth in case of single busy queue as well as slowly\n  increasing queue depth based on last delayed sync request does not seem to\n  be kicking in at all.\n\nThis patch will allow deeper WRITE queue depths (subjected to the other\nWRITE queue depth contstraints like cfq_quantum and last delayed sync\nrequest).\n\nShaohua Li had reported getting more out of his SSD. For me, I have got\none Lun exported from an HP EVA and when pure buffered writes are on, I\ncan get more out of the system. Following are test results of pure\nbuffered writes (with end_fsync\u003d1) with vanilla and patched kernel. These\nresults are average of 3 sets of run with increasing number of threads.\n\nAVERAGE[bufwfs][vanilla]\n-------\njob       Set NR  ReadBW(KB/s)   MaxClat(us)    WriteBW(KB/s)  MaxClat(us)\n---       --- --  ------------   -----------    -------------  -----------\nbufwfs    3   1   0              0              95349          474141\nbufwfs    3   2   0              0              100282         806926\nbufwfs    3   4   0              0              109989         2.7301e+06\nbufwfs    3   8   0              0              116642         3762231\nbufwfs    3   16  0              0              118230         6902970\n\nAVERAGE[bufwfs] [patched kernel]\n-------\nbufwfs    3   1   0              0              270722         404352\nbufwfs    3   2   0              0              206770         1.06552e+06\nbufwfs    3   4   0              0              195277         1.62283e+06\nbufwfs    3   8   0              0              260960         2.62979e+06\nbufwfs    3   16  0              0              299260         1.70731e+06\n\nI also ran buffered writes along with some sequential reads and some\nbuffered reads going on in the system on a SATA disk because the potential\nrisk could be that we should not be driving queue depth higher in presence\nof sync IO going to keep the max clat low.\n\nWith some random and sequential reads going on in the system on one SATA\ndisk I did not see any significant increase in max clat. So it looks like\nother WRITE queue depth control logic is doing its job. Here are the\nresults.\n\nAVERAGE[brr, bsr, bufw together] [vanilla]\n-------\njob       Set NR  ReadBW(KB/s)   MaxClat(us)    WriteBW(KB/s)  MaxClat(us)\n---       --- --  ------------   -----------    -------------  -----------\nbrr       3   1   850            546345         0              0\nbsr       3   1   14650          729543         0              0\nbufw      3   1   0              0              23908          8274517\n\nbrr       3   2   981.333        579395         0              0\nbsr       3   2   14149.7        1175689        0              0\nbufw      3   2   0              0              21921          1.28108e+07\n\nbrr       3   4   898.333        1.75527e+06    0              0\nbsr       3   4   12230.7        1.40072e+06    0              0\nbufw      3   4   0              0              19722.3        2.4901e+07\n\nbrr       3   8   900            3160594        0              0\nbsr       3   8   9282.33        1.91314e+06    0              0\nbufw      3   8   0              0              18789.3        23890622\n\nAVERAGE[brr, bsr, bufw mixed] [patched kernel]\n-------\njob       Set NR  ReadBW(KB/s)   MaxClat(us)    WriteBW(KB/s)  MaxClat(us)\n---       --- --  ------------   -----------    -------------  -----------\nbrr       3   1   837            417973         0              0\nbsr       3   1   14357.7        591275         0              0\nbufw      3   1   0              0              24869.7        8910662\n\nbrr       3   2   1038.33        543434         0              0\nbsr       3   2   13351.3        1205858        0              0\nbufw      3   2   0              0              18626.3        13280370\n\nbrr       3   4   913            1.86861e+06    0              0\nbsr       3   4   12652.3        1430974        0              0\nbufw      3   4   0              0              15343.3        2.81305e+07\n\nbrr       3   8   890            2.92695e+06    0              0\nbsr       3   8   9635.33        1.90244e+06    0              0\nbufw      3   8   0              0              17200.3        24424392\n\nSo looks like it might make sense to include this patch.\n\nThanks\nVivek\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "875feb63b9567442be73efbcc9a8470e376d6423",
      "tree": "554331e9634a5327daa755bb1b3338697866018b",
      "parents": [
        "7af92f8754b87bc78cbfd447d5f4096b25c46682"
      ],
      "author": {
        "name": "Divyesh Shah",
        "email": "dpshah@google.com",
        "time": "Wed Jan 06 18:58:20 2010 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Jan 11 16:16:18 2010 +0100"
      },
      "message": "cfq-iosched: Respect ioprio_class when preempting\n\nIn cfq_should_preempt(), we currently allow some cases where a non-RT request\ncan preempt an ongoing RT cfqq timeslice. This should not happen.\nExamples include:\n\no A sync_noidle wl type non-RT request pre-empting a sync_noidle wl type cfqq\n  on which we are idling.\no Once we have per-cgroup async queues, a non-RT sync request pre-empting a RT\n  async cfqq.\n\nSigned-off-by: Divyesh Shah\u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2f7a2d89a8b5915d89ad9ebeb0065db7d5831cea",
      "tree": "776c4a7e47b07437c30411d7324b5a1c7de01696",
      "parents": [
        "6ec1480d8539c8e2e6ba7fbbeffe5adc640bfe98"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Dec 28 13:18:44 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Dec 28 13:18:44 2009 +0100"
      },
      "message": "cfq-iosched: don\u0027t regard requests with long distance as close\n\nseek_mean could be very big sometimes, using it as close criteria is meaningless\nas this doen\u0027t improve any performance. So if it\u0027s big, let\u0027s fallback to\ndefault value.\n\nReviewed-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Shaohua Li\u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "65b32a573eefa1cdd3cbe5ea59326308e6c3b9ad",
      "tree": "bdcca029d184056ffc9eab0a9c0b95cdf123c9fb",
      "parents": [
        "fb104db41e6e006c85ce1097f372cd1e10c1755c"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 16 17:52:59 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 18 12:40:21 2009 +0100"
      },
      "message": "cfq-iosched: Remove prio_change logic for workload selection\n\no CFQ now internally divides cfq queues in therr workload categories. sync-idle,\n  sync-noidle and async. Which workload to run depends primarily on rb_key\n  offset across three service trees. Which is a combination of mulitiple things\n  including what time queue got queued on the service tree.\n\n  There is one exception though. That is if we switched the prio class, say\n  we served some RT tasks and again started serving BE class, then with-in\n  BE class we always started with sync-noidle workload irrespective of rb_key\n  offset in service trees.\n\n  This can provide better latencies for sync-noidle workload in the presence\n  of RT tasks.\n\no This patch gets rid of that exception and which workload to run with-in\n  class always depends on lowest rb_key across service trees. The reason\n  being that now we have multiple BE class groups and if we always switch\n  to sync-noidle workload with-in group, we can potentially starve a sync-idle\n  workload with-in group. Same is true for async workload which will be in\n  root group. Also the workload-switching with-in group will become very\n  unpredictable as it now depends whether some RT workload was running in\n  the system or not.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "fb104db41e6e006c85ce1097f372cd1e10c1755c",
      "tree": "b769fd161d325f959e3c2c36116c5eb2f0e29f00",
      "parents": [
        "1db32c40600437c5e049796bd32f49f61244c6ef"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 16 17:52:58 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 18 12:40:21 2009 +0100"
      },
      "message": "cfq-iosched: Get rid of nr_groups\n\no Currently code does not seem to be using cfqd-\u003enr_groups. Get rid of it.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1db32c40600437c5e049796bd32f49f61244c6ef",
      "tree": "09f72cf149d7d9034bc3cbcf9597e413c081c5d3",
      "parents": [
        "4a63b030d75a063b910b2bab014d84837cb33eb7"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 16 17:52:57 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 18 12:40:21 2009 +0100"
      },
      "message": "cfq-iosched: Remove the check for same cfq group from allow_merge\n\no allow_merge() already checks if submitting task is pointing to same cfqq\n  as rq has been queued in. If everything is fine, we should not be having\n  a task in one cgroup and having a pointer to cfqq in other cgroup.\n\n  Well I guess in some situations it can happen and that is, when a random\n  IO queue has been moved into root cgroup for group_isolation\u003d0. In\n  this case, tasks\u0027s cgroup/group is different from where actually cfqq is,\n  but this is intentional and in this case merging should be allowed.\n\n  The second situation is where due to close cooperator patches, multiple\n  processes can be sharing a cfqq. If everything implemented right, we should\n  not end up in a situation where tasks from different processes in different\n  groups are sharing the same cfqq as we allow merging of cooperating queues\n  only if they are in same group.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "66ae291978177d5c012015f12b8fbc76dc7d0965",
      "tree": "1351d66beea2b0b2300a7491ca8d9ffb83578e34",
      "parents": [
        "82bbbf28db4beefcd8b897800153e21378270cd1"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Dec 15 10:08:45 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Dec 15 10:08:45 2009 +0100"
      },
      "message": "cfq: set workload as expired if it doesn\u0027t have any slice left\n\nWhen a group is resumed, if it doesn\u0027t have workload slice left,\nwe should set workload_expires as expired. Otherwise, we might\nstart from where we left in previous group by error.\nThanks the idea from Corrado.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "82bbbf28db4beefcd8b897800153e21378270cd1",
      "tree": "3e8a437711010c14d2e9e88dcf29afcfecf7ba9a",
      "parents": [
        "554554f60ad619e1efab01897208bc320b81d9da"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 10 19:25:41 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 10 19:25:41 2009 +0100"
      },
      "message": "Fix a CFQ crash in \"for-2.6.33\" branch of block tree\n\nI think my previous patch introduced a bug which can lead to CFQ hitting\nBUG_ON().\n\nThe offending commit in for-2.6.33 branch is.\n\ncommit 7667aa0630407bc07dc38dcc79d29cc0a65553c1\nAuthor: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nDate:   Tue Dec 8 17:52:58 2009 -0500\n\n    cfq-iosched: Take care of corner cases of group losing share due to deletion\n\nWhile doing some stress testing on my box, I enountered following.\n\nlogin: [ 3165.148841] BUG: scheduling while\natomic: swapper/0/0x10000100\n[ 3165.149821] Modules linked in: cfq_iosched dm_multipath qla2xxx igb\nscsi_transport_fc dm_snapshot [last unloaded: scsi_wait_scan]\n[ 3165.149821] Pid: 0, comm: swapper Not tainted\n2.6.32-block-for-33-merged-new #3\n[ 3165.149821] Call Trace:\n[ 3165.149821]  \u003cIRQ\u003e  [\u003cffffffff8103fab8\u003e] __schedule_bug+0x5c/0x60\n[ 3165.149821]  [\u003cffffffff8103afd7\u003e] ? __wake_up+0x44/0x4d\n[ 3165.149821]  [\u003cffffffff8153a979\u003e] schedule+0xe3/0x7bc\n[ 3165.149821]  [\u003cffffffff8103a796\u003e] ? cpumask_next+0x1d/0x1f\n[ 3165.149821]  [\u003cffffffffa000b21d\u003e] ? cfq_dispatch_requests+0x6ba/0x93e\n[cfq_iosched]\n[ 3165.149821]  [\u003cffffffff810422d8\u003e] __cond_resched+0x2a/0x35\n[ 3165.149821]  [\u003cffffffffa000b21d\u003e] ? cfq_dispatch_requests+0x6ba/0x93e\n[cfq_iosched]\n[ 3165.149821]  [\u003cffffffff8153b1ee\u003e] _cond_resched+0x2c/0x37\n[ 3165.149821]  [\u003cffffffff8100e2db\u003e] is_valid_bugaddr+0x16/0x2f\n[ 3165.149821]  [\u003cffffffff811e4161\u003e] report_bug+0x18/0xac\n[ 3165.149821]  [\u003cffffffff8100f1fc\u003e] die+0x39/0x63\n[ 3165.149821]  [\u003cffffffff8153cde1\u003e] do_trap+0x11a/0x129\n[ 3165.149821]  [\u003cffffffff8100d470\u003e] do_invalid_op+0x96/0x9f\n[ 3165.149821]  [\u003cffffffffa000b21d\u003e] ? cfq_dispatch_requests+0x6ba/0x93e\n[cfq_iosched]\n[ 3165.149821]  [\u003cffffffff81034b4d\u003e] ? enqueue_task+0x5c/0x67\n[ 3165.149821]  [\u003cffffffff8103ae83\u003e] ? task_rq_unlock+0x11/0x13\n[ 3165.149821]  [\u003cffffffff81041aae\u003e] ? try_to_wake_up+0x292/0x2a4\n[ 3165.149821]  [\u003cffffffff8100c935\u003e] invalid_op+0x15/0x20\n[ 3165.149821]  [\u003cffffffffa000b21d\u003e] ? cfq_dispatch_requests+0x6ba/0x93e\n[cfq_iosched]\n[ 3165.149821]  [\u003cffffffff810df5a6\u003e] ? virt_to_head_page+0xe/0x2f\n[ 3165.149821]  [\u003cffffffff811d8c2a\u003e] blk_peek_request+0x191/0x1a7\n[ 3165.149821]  [\u003cffffffff811e5b8d\u003e] ? kobject_get+0x1a/0x21\n[ 3165.149821]  [\u003cffffffff812c8d4c\u003e] scsi_request_fn+0x82/0x3df\n[ 3165.149821]  [\u003cffffffff8110b2de\u003e] ? bio_fs_destructor+0x15/0x17\n[ 3165.149821]  [\u003cffffffff810df5a6\u003e] ? virt_to_head_page+0xe/0x2f\n[ 3165.149821]  [\u003cffffffff811d931f\u003e] __blk_run_queue+0x42/0x71\n[ 3165.149821]  [\u003cffffffff811d9403\u003e] blk_run_queue+0x26/0x3a\n[ 3165.149821]  [\u003cffffffff812c8761\u003e] scsi_run_queue+0x2de/0x375\n[ 3165.149821]  [\u003cffffffff812b60ac\u003e] ? put_device+0x17/0x19\n[ 3165.149821]  [\u003cffffffff812c92d7\u003e] scsi_next_command+0x3b/0x4b\n[ 3165.149821]  [\u003cffffffff812c9b9f\u003e] scsi_io_completion+0x1c9/0x3f5\n[ 3165.149821]  [\u003cffffffff812c3c36\u003e] scsi_finish_command+0xb5/0xbe\n\nI think I have hit following BUG_ON() in cfq_dispatch_request().\n\nBUG_ON(RB_EMPTY_ROOT(\u0026cfqq-\u003esort_list));\n\nPlease find attached the patch to fix it. I have done some stress testing\nwith it and have not seen it happening again.\n\no We should wait on a queue even after slice expiry only if it is empty. If\n  queue is not empty then continue to expire it.\n\no If we decide to keep the queue then make cfqq\u003dNULL. Otherwise select_queue()\n  will return a valid cfqq and cfq_dispatch_request() can hit following\n  BUG_ON().\n\n  BUG_ON(RB_EMPTY_ROOT(\u0026cfqq-\u003esort_list))\n\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "554554f60ad619e1efab01897208bc320b81d9da",
      "tree": "b240b0e65dc763c6c2f7b5661f59ad4bcb0385b3",
      "parents": [
        "edc71131c4dc6cc73e2a24aa0a7a79cfce738f12"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Thu Dec 10 09:38:39 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 10 09:38:39 2009 +0100"
      },
      "message": "cfq: Remove wait_request flag when idle time is being deleted\n\nRemove wait_request flag when idle time is being deleted, otherwise\nit\u0027ll hit this path every time when a request is enqueued.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "edc71131c4dc6cc73e2a24aa0a7a79cfce738f12",
      "tree": "b568734b3f053be12f0dabcf2ceea1049537cea1",
      "parents": [
        "7667aa0630407bc07dc38dcc79d29cc0a65553c1"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Wed Dec 09 20:56:04 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 09 20:56:04 2009 +0100"
      },
      "message": "cfq-iosched: commenting non-obvious initialization\n\nAdded a comment to explain the initialization of last_delayed_sync.\n\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "7667aa0630407bc07dc38dcc79d29cc0a65553c1",
      "tree": "cd9007b2dfebec215d955952ea0f9914490bddaa",
      "parents": [
        "c244bb50a9baa2ec47a458bbafb36b5e559ed5fa"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Dec 08 17:52:58 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 09 15:11:04 2009 +0100"
      },
      "message": "cfq-iosched: Take care of corner cases of group losing share due to deletion\n\nIf there is a sequential reader running in a group, we wait for next request\nto come in that group after slice expiry and once new request is in, we expire\nthe queue. Otherwise we delete the group from service tree and group looses\nits fair share.\n\nSo far I was marking a queue as wait_busy if it had consumed its slice and\nit was last queue in the group. But this condition did not cover following\ntwo cases.\n\n1.If a request completed and slice has not expired yet. Next request comes\n  in and is dispatched to disk. Now select_queue() hits and slice has expired.\n  This group will be deleted. Because request is still in the disk, this queue\n  will never get a chance to wait_busy.\n\n2.If request completed and slice has not expired yet. Before next request\n  comes in (delay due to think time), select_queue() hits and expires the\n  queue hence group. This queue never got a chance to wait busy.\n\nGui was hitting the boundary condition 1 and not getting fairness numbers\nproportional to weight.\n\nThis patch puts the checks for above two conditions and improves the fairness\nnumbers for sequential workload on rotational media. Check in select_queue()\ntakes care of case 1 and additional check in should_wait_busy() takes care\nof case 2.\n\nReported-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c244bb50a9baa2ec47a458bbafb36b5e559ed5fa",
      "tree": "946c9c87e21055ff371a05710c7a0bcf71bdcc18",
      "parents": [
        "b9d8f4c73b1af4cfd53f819bf84c2bce31232275"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Dec 08 17:52:57 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 09 15:11:03 2009 +0100"
      },
      "message": "cfq-iosched: Get rid of cfqq wait_busy_done flag\n\no Get rid of wait_busy_done flag. This flag only tells we were doing wait\n  busy on a queue and that queue got request so expire it. That information\n  can easily be obtained by (cfq_cfqq_wait_busy() \u0026\u0026 queue_is_not_empty). So\n  remove this flag and keep code simple.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b9d8f4c73b1af4cfd53f819bf84c2bce31232275",
      "tree": "2ae92bc6cabfd9d2308902c3ac92f04fe6fbf1fb",
      "parents": [
        "a3b8d92d25212c5b6534ae9b347ed2858de78336"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Dec 08 08:54:17 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Dec 09 15:11:03 2009 +0100"
      },
      "message": "cfq: Optimization for close cooperating queue searching\n\nIt doesn\u0027t make any sense to try to find out a close cooperating\nqueue if current cfqq is the only one in the group.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "573412b29586e58477adb70e022193a337763319",
      "tree": "757ebcc4da3ba7b8d8beb8e8e0ff6a4fe4428f52",
      "parents": [
        "2b876f95d03e226394b5d360c86127cbefaf614b"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Sun Dec 06 11:48:52 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.(none)",
        "time": "Wed Dec 09 12:32:55 2009 +0100"
      },
      "message": "cfq-iosched: reduce write depth only if sync was delayed\n\nThe introduction of ramp-up formula for async queue depths has\nslowed down dirty page reclaim, by reducing async write performance.\nThis patch makes sure the formula kicks in only when sync request\nwas recently delayed.\n\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "878eaddd05d251cefa9632c2b8046833c5eead66",
      "tree": "a5bf9b6c1856969ff7a7cd0d676ea2b419072103",
      "parents": [
        "accee7854b378a8ab5995d8f5dc5d8abc3b3d23a"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Dec 07 19:37:15 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.(none)",
        "time": "Mon Dec 07 19:37:15 2009 +0100"
      },
      "message": "cfq-iosched: Do not access cfqq after freeing it\n\nFix a crash during boot reported by Jeff Moyer. Fix the issue of accessing\ncfqq after freeing it.\n\nReported-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@carl.(none)\u003e\n"
    },
    {
      "commit": "bb729bc98c0f3e6a898d8730df3e2830bf68751a",
      "tree": "f2170f8f688a7c7f813168a6c8c757087934c094",
      "parents": [
        "846954b0a32f4ae953e082eabd178e7a98dd2efd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Dec 06 09:54:19 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Dec 06 09:54:19 2009 +0100"
      },
      "message": "cfq-iosched: use call_rcu() instead of doing grace period stall on queue exit\n\nAfter the merge of the IO controller patches, booting on my megaraid\nbox ran much slower. Vivek Goyal traced it down to megaraid discovery\ncreating tons of devices, each suffering a grace period when they later\nkill that queue (if no device is found).\n\nSo lets use call_rcu() to batch these deferred frees, instead of taking\nthe grace period hit for each one.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "3e2520668970aab5a764044a298e987aafc1f63d",
      "tree": "088ebf7c4576d597774c8c332bab590dc3a472d6",
      "parents": [
        "9d6a986c0b276085f7944cd8ad65f4f82aff7536"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Dec 04 10:36:42 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 16:38:14 2009 +0100"
      },
      "message": "blkio: Implement dynamic io controlling policy registration\n\no One of the goals of block IO controller is that it should be able to\n  support mulitple io control policies, some of which be operational at\n  higher level in storage hierarchy.\n\no To begin with, we had one io controlling policy implemented by CFQ, and\n  I hard coded the CFQ functions called by blkio. This created issues when\n  CFQ is compiled as module.\n\no This patch implements a basic dynamic io controlling policy registration\n  functionality in blkio. This is similar to elevator functionality where\n  ioschedulers register the functions dynamically.\n\no Now in future, when more IO controlling policies are implemented, these\n  can dynakically register with block IO controller.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "9d6a986c0b276085f7944cd8ad65f4f82aff7536",
      "tree": "1e72c813f4346ee329d5d427e214d183af78934f",
      "parents": [
        "b69f2292063d2caf37ca9aec7d63ded203701bf3"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Dec 04 10:36:41 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 16:38:14 2009 +0100"
      },
      "message": "blkio: Export some symbols from blkio as its user CFQ can be a module\n\no blkio controller is inside the kernel and cfq makes use of interfaces\n  exported by blkio. CFQ can be a module too, hence export symbols used\n  by CFQ.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "3c764b7a654668dd04905841d6024f7b6aa843a5",
      "tree": "68b7c611f5e98bab3c781ecc775a0ecf46c43b61",
      "parents": [
        "237e5bc4e51813e9d8ba9da0f63e7acc608882d7"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Dec 04 13:12:06 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 13:12:06 2009 +0100"
      },
      "message": "cfq-iosched: make nonrot check logic consistent\n\ncfq_arm_slice_timer() has logic to disable idle window for SSD device. The same\nthing should be done at cfq_select_queue() too, otherwise we will still see\nidle window. This makes the nonrot check logic consistent in cfq.\nTests in a intel SSD with low_latency knob close, below patch can triple disk\nthoughput for muti-thread sequential read.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f2eecb91522686edf8199947b77f435a4031d92f",
      "tree": "e584c9d81971fb741508c176d74ef51ff45a4bcc",
      "parents": [
        "2f5ea47712489a9d2d3cb832eb06062e4e64e0ec"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 10:06:35 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 10:06:35 2009 +0100"
      },
      "message": "cfq-iosched: move IO controller declerations to a header file\n\nThey should not be declared inside some other file that\u0027s not related\nto CFQ.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c04645e592d4dd60c58def40c913699d4c806727",
      "tree": "61e2b6fac3c9dd0f211c07f024fe5cb17ff5d3cf",
      "parents": [
        "ae30c286553c91c49af5cbc0265a05a6543d0c52"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:56 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:53 2009 +0100"
      },
      "message": "blkio: Wait on sync-noidle queue even if rq_noidle \u003d 1\n\no rq_noidle() is supposed to tell cfq that do not expect a request after this\n  one, hence don\u0027t idle. But this does not seem to work very well. For example\n  for direct random readers, rq_noidle \u003d 1 but there is next request coming\n  after this. Not idling, leads to a group not getting its share even if\n  group_isolation\u003d1.\n\no The right solution for this issue is to scan the higher layers and set\n  right flag (WRITE_SYNC or WRITE_ODIRECT). For the time being, this single\n  line fix helps. This should not have any significant impact when we are\n  not using cgroups. I will later figure out IO paths in higher layer and\n  fix it.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ae30c286553c91c49af5cbc0265a05a6543d0c52",
      "tree": "1dcb055e156ca9190d0da5bccf32a3a166e12d52",
      "parents": [
        "f26bd1f0a3a31bc5e16d285f5e1b00a56abf6238"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:55 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:53 2009 +0100"
      },
      "message": "blkio: Implement group_isolation tunable\n\no If a group is running only a random reader, then it will not have enough\n  traffic to keep disk busy and we will reduce overall throughput. This\n  should result in better latencies for random reader though. If we don\u0027t\n  idle on random reader service tree, then this random reader will experience\n  large latencies if there are other groups present in system with sequential\n  readers running in these.\n\no One solution suggested by corrado is that by default keep the random readers\n  or sync-noidle workload in root group so that during one dispatch round\n  we idle only once on sync-noidle tree. This means that all the sync-idle\n  workload queues will be in their respective group and we will see service\n  differentiation in those but not on sync-noidle workload.\n\no Provide a tunable group_isolation. If set, this will make sure that even\n  sync-noidle queues go in their respective group and we wait on these. This\n  provides stronger isolation between groups but at the expense of throughput\n  if group does not have enough traffic to keep the disk busy.\n\no By default group_isolation \u003d 0\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f26bd1f0a3a31bc5e16d285f5e1b00a56abf6238",
      "tree": "8e49302c146eacdd1cfbe78a6bd3aad2b81c3050",
      "parents": [
        "f75edf2dc828802d358393be80a6c89e919f8273"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:54 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:53 2009 +0100"
      },
      "message": "blkio: Determine async workload length based on total number of queues\n\no Async queues are not per group. Instead these are system wide and maintained\n  in root group. Hence their workload slice length should be calculated\n  based on total number of queues in the system and not just queues in the\n  root group.\n\no As root group\u0027s default weight is 1000, make sure to charge async queue\n  more in terms of vtime so that it does not get more time on disk because\n  root group has higher weight.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f75edf2dc828802d358393be80a6c89e919f8273",
      "tree": "a3b2fb05298ea41ecc0fd7ad56e1218369f7f9fd",
      "parents": [
        "f8d461d692c341add957fb973fb5ee1f62039dc7"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:53 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:53 2009 +0100"
      },
      "message": "blkio: Wait for cfq queue to get backlogged if group is empty\n\no If a queue consumes its slice and then gets deleted from service tree, its\n  associated group will also get deleted from service tree if this was the\n  only queue in the group. That will make group loose its share.\n\no For the queues on which we have idling on and if these have used their\n  slice, wait a bit for these queues to get backlogged again and then\n  expire these queues so that group does not loose its share.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f8d461d692c341add957fb973fb5ee1f62039dc7",
      "tree": "42c6cf987aa4d38b271a60d2b62e92c6c748cd69",
      "parents": [
        "24610333d578478d354144ab4709a203684afc5f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:52 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:53 2009 +0100"
      },
      "message": "blkio: Propagate cgroup weight updation to cfq groups\n\no Propagate blkio cgroup weight updation to associated cfq groups.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "24610333d578478d354144ab4709a203684afc5f",
      "tree": "d258c695cfa320845212f71e8900af4d90538d6b",
      "parents": [
        "8682e1f15f26dae9a9e8af794d179055fbd81166"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:51 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Drop the reference to queue once the task changes cgroup\n\no If a task changes cgroup, drop reference to the cfqq associated with io\n  context and set cfqq pointer stored in ioc to NULL so that upon next request\n  arrival we will allocate a  new queue in new group.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8682e1f15f26dae9a9e8af794d179055fbd81166",
      "tree": "d6e87631f91527656490df9b28be107fb5e974b0",
      "parents": [
        "220841906fccafaf4094e87bdb6d252e20cf8c7c"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:50 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Provide some isolation between groups\n\no Do not allow following three operations across groups for isolation.\n\t- selection of co-operating queues\n\t- preemtpions across groups\n\t- request merging across groups.\n\no Async queues are currently global and not per group. Allow preemption of\n  an async queue if a sync queue in other group gets backlogged.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "220841906fccafaf4094e87bdb6d252e20cf8c7c",
      "tree": "f25b1f057887cf2a05bb8309e0b757149e052797",
      "parents": [
        "2868ef7b39490e6b41c2c61cd9a5cd891e778b54"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:49 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Export disk time and sectors used by a group to user space\n\no Export disk time and sector used by a group to user space through cgroup\n  interface.\n\no Also export a \"dequeue\" interface to cgroup which keeps track of how many\n  a times a group was deleted from service tree. Helps in debugging.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2868ef7b39490e6b41c2c61cd9a5cd891e778b54",
      "tree": "e50e169e984d8bd201de2f73f98e31a65c028feb",
      "parents": [
        "b1c3576961847da26c91b1e97f226bb66be5fa3f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:48 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Some debugging aids for CFQ\n\no Some debugging aids for CFQ.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b1c3576961847da26c91b1e97f226bb66be5fa3f",
      "tree": "e228525220031232463f9cbbe017bad67807e6d4",
      "parents": [
        "25fb5169d4c9d4255107abbb7c08ab712434efc8"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:47 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Take care of cgroup deletion and cfq group reference counting\n\no One can choose to change elevator or delete a cgroup. Implement group\n  reference counting so that both elevator exit and cgroup deletion can\n  take place gracefully.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Nauman Rafique \u003cnauman@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "25fb5169d4c9d4255107abbb7c08ab712434efc8",
      "tree": "8939bd6f73f9888d954672dfaac1cc25e313cb2f",
      "parents": [
        "dae739ebc4c590630039533a5bbd05865966094f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:46 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Dynamic cfq group creation based on cgroup tasks belongs to\n\no Determine the cgroup IO submitting task belongs to and create the cfq\n  group if it does not exist already.\n\no Also link cfqq and associated cfq group.\n\no Currently all async IO is mapped to root group.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "dae739ebc4c590630039533a5bbd05865966094f",
      "tree": "005f98ed4c4302ea71b48ad6a074fa6ff714df4a",
      "parents": [
        "58ff82f34cded3812af5b6c69b6aa626b6be2490"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:45 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Group time used accounting and workload context save restore\n\no This patch introduces the functionality to do the accounting of group time\n  when a queue expires. This time used decides which is the group to go\n  next.\n\no Also introduce the functionlity to save and restore the workload type\n  context with-in group. It might happen that once we expire the cfq queue\n  and group, a different group will schedule in and we will lose the context\n  of the workload type. Hence save and restore it upon queue expiry.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "58ff82f34cded3812af5b6c69b6aa626b6be2490",
      "tree": "06098474c5763f20d1c9715faf67c83c56b9a787",
      "parents": [
        "25bc6b07767fe77422312eda2af99c9477f76191"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:44 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Implement per cfq group latency target and busy queue avg\n\no So far we had 300ms soft target latency system wide. Now with the\n  introduction of cfq groups, divide that latency by number of groups so\n  that one can come up with group target latency which will be helpful\n  in determining the workload slice with-in group and also the dynamic\n  slice length of the cfq queue.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "25bc6b07767fe77422312eda2af99c9477f76191",
      "tree": "1e0f2d5a18efb63c651df8773a6d5ad2b87d7687",
      "parents": [
        "31e4c28d95e64f2d5d3c497a3ecf37c62de635b4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Dec 03 12:59:43 2009 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 19:28:52 2009 +0100"
      },
      "message": "blkio: Introduce per cfq group weights and vdisktime calculations\n\no Bring in the per cfq group weight and how vdisktime is calculated for the\n  group. Also bring in the functionality of updating the min_vdisktime of\n  the group service tree.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    }
  ],
  "next": "1fa8f6d68b5c8ca0a608fd8d296c5f07ac788cd6"
}
