)]}'
{
  "log": [
    {
      "commit": "e2bd9678fc0085acf540dc4cb48ff961cd4d88c0",
      "tree": "25fa9535761abdafa1f9de9fc86108d8b178cfef",
      "parents": [
        "28304f485c3627cc5e1665b92e26eb7fcfe98088"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "message": "block: Use hlist_entry() for io_context.cic_list.first\n\nlist_entry() and hlist_entry() are both simply aliases for\ncontainer_of(), but since io_context.cic_list.first is an hlist_node one\nshould at least use the correct alias.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "28304f485c3627cc5e1665b92e26eb7fcfe98088",
      "tree": "c885abcc932d5ae28fdeb49027ea5eafaaafd376",
      "parents": [
        "4c49ff3fe128ca68dabd07537415c419ad7f82f9"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "message": "cfq-iosched: Remove bogus check in queue_fail path\n\nqueue_fail can only be reached if cic is NULL, so its check for cic must\nbe bogus.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4495a7d41dbda03841c2a1c2a5ce7135a45131ba",
      "tree": "9c5044963151f3c058d9e20ef88c4a856497fe27",
      "parents": [
        "ea9d6553b3b3044e7374774cc33bb1b2eee19dd3"
      ],
      "author": {
        "name": "Kyungmin Park",
        "email": "kyungmin.park@samsung.com",
        "time": "Tue May 31 10:04:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 31 19:49:44 2011 +0200"
      },
      "message": "CFQ: Fix typo and remove unnecessary semicolon\n\nFix comment typo and remove unnecessary semicolon at macro\n\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "bdf7cf1c83872a0586ce4c4da6889103cc36dbd3",
      "tree": "9311bbcf8b9ffbe7207eba5cca557275f8151ae7",
      "parents": [
        "40efeb4d0bb1993c3c10baff9b7d86839f99171e",
        "ac04fee0b5c55bbac0858727a4154110b55d3f5a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 27 10:24:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 27 10:24:40 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  loop: export module parameters\n  block: export blk_{get,put}_queue()\n  block: remove unused variable in bio_attempt_front_merge()\n  block: always allocate genhd-\u003eev if check_events is implemented\n  brd: export module parameters\n  brd: fix comment on initial device creation\n  brd: handle on-demand devices correctly\n  brd: limit \u0027max_part\u0027 module param to DISK_MAX_PARTS\n  brd: get rid of unused members from struct brd_device\n  block: fix oops on !disk-\u003equeue and sysfs discard alignment display\n"
    },
    {
      "commit": "d86e0e83b32bc84600adb0b6ea1fce389b266682",
      "tree": "3b71c7692b00b0aa557d06c9cd0e84ba6b8532af",
      "parents": [
        "700c4f3325495d2e0e619fb48b900ec942f1470b"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 27 07:44:43 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 27 07:45:45 2011 +0200"
      },
      "message": "block: export blk_{get,put}_queue()\n\nWe need them in SCSI to fix a bug, but currently they are not\nexported to modules. Export them.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f780bdb7c1c73009cb57adcf99ef50027d80bf3c",
      "tree": "d15668ffcc40a2aaa31723b87cfda0b166f84d57",
      "parents": [
        "4714d1d32d97239fb5ae3e10521d3f133a899b66"
      ],
      "author": {
        "name": "Ben Blum",
        "email": "bblum@andrew.cmu.edu",
        "time": "Thu May 26 16:25:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:34 2011 -0700"
      },
      "message": "cgroups: add per-thread subsystem callbacks\n\nAdd cgroup subsystem callbacks for per-thread attachment in atomic contexts\n\nAdd can_attach_task(), pre_attach(), and attach_task() as new callbacks\nfor cgroups\u0027s subsystem interface.  Unlike can_attach and attach, these\nare for per-thread operations, to be called potentially many times when\nattaching an entire threadgroup.\n\nAlso, the old \"bool threadgroup\" interface is removed, as replaced by\nthis.  All subsystems are modified for the new interface - of note is\ncpuset, which requires from/to nodemasks for attach to be globally scoped\n(though per-cpuset would work too) to persist from its pre_attach to\nattach_task and attach.\n\nThis is a pre-patch for cgroup-procs-writable.patch.\n\nSigned-off-by: Ben Blum \u003cbblum@andrew.cmu.edu\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nReviewed-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "700c4f3325495d2e0e619fb48b900ec942f1470b",
      "tree": "649f36acbbf68223908dcb52d881d0ff2fb4b79c",
      "parents": [
        "75e3f3ee3c64968d42f4843ec49e579f84b5aa0c"
      ],
      "author": {
        "name": "Luca Tettamanti",
        "email": "kronos.it@gmail.com",
        "time": "Thu May 26 21:07:26 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu May 26 21:07:26 2011 +0200"
      },
      "message": "block: remove unused variable in bio_attempt_front_merge()\n\nsector is never read inside the function.\n\nSigned-off-by: Luca Tettamanti \u003ckronos.it@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "75e3f3ee3c64968d42f4843ec49e579f84b5aa0c",
      "tree": "0522cb42944f2da85143f234b0f4b3f5319834eb",
      "parents": [
        "8892cbaf686fb18a5f0558b9fd7773b32c0c7852"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 26 21:06:50 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu May 26 21:06:50 2011 +0200"
      },
      "message": "block: always allocate genhd-\u003eev if check_events is implemented\n\n9fd097b149 (block: unexport DISK_EVENT_MEDIA_CHANGE for legacy/fringe\ndrivers) removed DISK_EVENT_MEDIA_CHANGE from legacy/fringe block\ndrivers which have inadequate -\u003echeck_events().  Combined with earlier\nchange 7c88a168da (block: don\u0027t propagate unlisted DISK_EVENTs to\nuserland), this enables using -\u003echeck_events() for internal processing\nwhile avoiding enabling in-kernel block event polling which can lead\nto infinite event loop.\n\nUnfortunately, this made many drivers including floppy without any bit\nset in disk-\u003eevents and -\u003easync_events in which case disk_add_events()\nsimply skipped allocation of disk-\u003eev, which disables whole event\nhandling.  As -\u003echeck_events() is still used during open processing\nfor revalidation, this can lead to open failure.\n\nThis patch always allocates disk-\u003eev if -\u003echeck_events is implemented.\nIn the long term, it would make sense to simply include the event\nstructure inline into genhd as it\u0027s now used by virtually all block\ndevices.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Ondrej Zary \u003clinux@rainbow-software.org\u003e\nReported-by: Alex Villacis Lasso \u003cavillaci@ceibo.fiec.espol.edu.ec\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1547010e6e15a3f44f49381246421a1e19de526e",
      "tree": "560796824e489a5d5c0b6de7a143d9a48a558d83",
      "parents": [
        "20359f27e8ff115f7cddf3da5b3a6cdcca2e650d"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "message": "cfq-iosched: free cic_index if cfqd allocation fails\n\nWhen struct cfq_data allocation fails, cic_index need to be freed.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "20359f27e8ff115f7cddf3da5b3a6cdcca2e650d",
      "tree": "b87c86545f68c5c660f3aeaf4cf3e366fa7db668",
      "parents": [
        "229836bd63c5413a4f8eed93d610b432be141e9b"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "message": "cfq-iosched: remove unused \u0027group_changed\u0027 in cfq_service_tree_add()\n\nThe \u0027group_changed\u0027 variable is initialized to 0 and never changed, so\nchecking the variable is meaningless.\n\nIt is a leftover from 0bbfeb832042 (\"cfq-iosched: Always provide group\niosolation.\"). Let\u0027s get rid of it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "229836bd63c5413a4f8eed93d610b432be141e9b",
      "tree": "a55fa492dbcde4c8f179d58d07165bdff872c34e",
      "parents": [
        "b9f8ce059940064a732da49b5d6e618381dad956"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "message": "cfq-iosched: reduce bit operations in cfq_choose_req()\n\nReduce the number of bit operations in cfq_choose_req() on average\n(and worst) cases.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b9f8ce059940064a732da49b5d6e618381dad956",
      "tree": "850281e8dd7bf5813d2960c2d42177803072bc02",
      "parents": [
        "4cbadbd16e2fb727f6926597e0a580829e6222f1"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "message": "cfq-iosched: algebraic simplification in cfq_prio_to_maxrq()\n\nSimplify the calculation in cfq_prio_to_maxrq(), plus replace CFQ_PRIO_LISTS to\nIOPRIO_BE_NR since they are the same and IOPRIO_BE_NR looks more reasonable in\nthis context IMHO.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4cbadbd16e2fb727f6926597e0a580829e6222f1",
      "tree": "d3482b68a6743609cedcd3a5165a749b0d9ca990",
      "parents": [
        "7e69723fef8771a9d57bd27d36281d756130b4b5"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 23 19:35:04 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 23 19:35:04 2011 +0200"
      },
      "message": "blk-cgroup: Initialize ioc-\u003ecgroup_changed at ioc creation time\n\nIf we don\u0027t explicitly initialize it to zero, CFQ might think that\ncgroup of ioc has changed and it generates lots of unnecessary calls\nto call_for_each_cic(changed_cgroup). Fix it.\n\ncfq_get_io_context()\n  cfq_ioc_set_cgroup()\n     call_for_each_cic(ioc, changed_cgroup)\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "95cf3dd9dbe6883a0328724e2110e3fc6465630b",
      "tree": "738ee1f31ee14c9dbfd4336bd8c20ee42d26743d",
      "parents": [
        "317389a7739675aa990b7e0d750a7c435f1d25d7"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "message": "block: call elv_bio_merged() when merged\n\nCommit 73c101011926 (\"block: initial patch for on-stack per-task plugging\")\nremoved calls to elv_bio_merged() when @bio merged with @req. Re-add them.\n\nThis in turn will update merged stats in associated group. That\nshould be safe as long as request has got reference to the blkio_group.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Divyesh Shah \u003cdpshah@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "317389a7739675aa990b7e0d750a7c435f1d25d7",
      "tree": "c24b7bb45d03233d76405dab4f9406c05c44eafa",
      "parents": [
        "2abae55f5a41d29f21b5b259c33d218c950d5c90"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "message": "cfq-iosched: Make IO merge related stats per cpu\n\nMake BLKIO_STAT_MERGED per cpu hence gettring rid of need of taking\nblkg-\u003estats_lock.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2abae55f5a41d29f21b5b259c33d218c950d5c90",
      "tree": "69169fa89fb25fcf7521999d7fca91664262bfc7",
      "parents": [
        "345227d705f2318e9bc088e79fe71a38bb5fe82b"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "message": "cfq-iosched: Fix a memory leak of per cpu stats for root group\n\nWe allocated per cpu stats struct for root group but did not free it.\nFix it.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "771949d03b4f5295f648f09141325fd478f6c7ce",
      "tree": "5e69b743566cc8f1eaafffcd03554bbd2b84e028",
      "parents": [
        "0eb8e885726a3a93206510092bbc7e39e272f6ef"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:52:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:52:16 2011 +0200"
      },
      "message": "block: get rid of on-stack plugging debug checks\n\nWe don\u0027t need them anymore, so kill:\n\n- REQ_ON_PLUG checks in various places\n- !rq_mergeable() check in plug merging\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0eb8e885726a3a93206510092bbc7e39e272f6ef",
      "tree": "d866a663df8d7d0f6a405d7eba45d889c12ba8bb",
      "parents": [
        "af75cd3c67845ebe31d2df9a780889a5ebecef11",
        "0a58e077eb600d1efd7e54ad9926a75a39d7f8ae"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:36:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:36:16 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-2.6.40/core\n\nThis patch merges in a fix that missed 2.6.39 final.\n\nConflicts:\n\tblock/blk.h\n"
    },
    {
      "commit": "af75cd3c67845ebe31d2df9a780889a5ebecef11",
      "tree": "2d8cdeb9db03a72a90b9b80612f08bd0e7bb4f61",
      "parents": [
        "f0bdc8cdd9a2bcc2c84ae2a1fdbff4188b354d8d"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:31 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:53 2011 +0200"
      },
      "message": "blk-throttle: Make no throttling rule group processing lockless\n\nCurrently we take a queue lock on each bio to check if there are any\nthrottling rules associated with the group and also update the stats.\nNow access the group under rcu and update the stats without taking\nthe queue lock. Queue lock is taken only if there are throttling rules\nassociated with the group.\n\nSo the common case of root group when there are no rules, save\nunnecessary pounding of request queue lock.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f0bdc8cdd9a2bcc2c84ae2a1fdbff4188b354d8d",
      "tree": "6d34ecec4cfc29c6032a7b6ce1acbb61088d1787",
      "parents": [
        "575969a0dd3fe65c6556bcb8f87c42303326ea55"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:30 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:53 2011 +0200"
      },
      "message": "blk-cgroup: Make cgroup stat reset path blkg-\u003elock free for dispatch stats\n\nNow dispatch stats update is lock free. But reset of these stats still\ntakes blkg-\u003estats_lock and is dependent on that. As stats are per cpu,\nwe should be able to just reset the stats on each cpu without any locks.\n(Atleast for 64bit arch).\n\nOn 32bit arch there is a small race where 64bit updates are not atomic.\nThe result of this race can be that in the presence of other writers,\none might not get 0 value after reset of a stat and might see something\nintermediate\n\nOne can write more complicated code to cover this race like sending IPI\nto other cpus to reset stats and for offline cpus, reset these directly.\n\nRight not I am not taking that path because reset_update is more of a\ndebug feature and it can happen only on 32bit arch and possibility of\nit happening is small. Will fix it if it becomes a real problem. For\nthe time being going for code simplicity.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "575969a0dd3fe65c6556bcb8f87c42303326ea55",
      "tree": "0db18fa173b20076e03b5b9c4be4c31c56baa438",
      "parents": [
        "5624a4e445e2ec27582984b068d7bf7f127cee10"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:29 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:53 2011 +0200"
      },
      "message": "blk-cgroup: Make 64bit per cpu stats safe on 32bit arch\n\nSome of the stats are 64bit and updation will be non atomic on 32bit\narchitecture. Use sequence counters on 32bit arch to make reading\nof stats safe.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5624a4e445e2ec27582984b068d7bf7f127cee10",
      "tree": "0827c83c6e5f5fa83bd0dadc1bc395c0f0657dae",
      "parents": [
        "4843c69d496a8d2e4caab6182fe016b9a79136e0"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:28 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Make dispatch stats per cpu\n\nCurrently we take blkg_stat lock for even updating the stats. So even if\na group has no throttling rules (common case for root group), we end\nup taking blkg_lock, for updating the stats.\n\nMake dispatch stats per cpu so that these can be updated without taking\nblkg lock.\n\nIf cpu goes offline, these stats simply disappear. No protection has\nbeen provided for that yet. Do we really need anything for that?\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4843c69d496a8d2e4caab6182fe016b9a79136e0",
      "tree": "0812bb95cfc7769a3ccd90d84f303bed861c9c0a",
      "parents": [
        "5617cbef7723952cbdff28c7a10ff8a254945f4f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:27 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Free up a group only after one rcu grace period\n\nSoon we will allow accessing a throtl_grp under rcu_read_lock(). Hence\nstart freeing up throtl_grp after one rcu grace period.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5617cbef7723952cbdff28c7a10ff8a254945f4f",
      "tree": "1922ac8f6011d5ccc92c668448971a12cc6df909",
      "parents": [
        "269f541555d8f5da322d592fb3e13e23ed62d80c"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:26 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Use helper function to add root throtl group to lists\n\nUse same helper function for root group as we use with dynamically\nallocated groups to add it to various lists.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "269f541555d8f5da322d592fb3e13e23ed62d80c",
      "tree": "8aaf602bc8d284f9c43720801b799f631dc47419",
      "parents": [
        "29b125892f3317ada86b662e0b6ebc0f79be9037"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:25 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Introduce a helper function to fill in device details\n\nA helper function for the code which is used at 2-3 places. Makes reading\ncode little easier.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "29b125892f3317ada86b662e0b6ebc0f79be9037",
      "tree": "a8caa5a8d521c0d667bbae956ff4d8b160ad02d9",
      "parents": [
        "f469a7b4d5b1d1d053200a9015fd25d59c057f49"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:24 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Dynamically allocate root group\n\nCurrently, we allocate root throtl_grp statically. But as we will be\nintroducing per cpu stat pointers and that will be allocated\ndynamically even for root group, we might as well make whole root\nthrotl_grp allocation dynamic and treat it in same manner as other\ngroups.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f469a7b4d5b1d1d053200a9015fd25d59c057f49",
      "tree": "2c68c0689e40955b186e350b15d44d0b260f4655",
      "parents": [
        "56edf7d75db5b14d628b46623c414ffbeed68d7f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:23 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-cgroup: Allow sleeping while dynamically allocating a group\n\nCurrently, all the cfq_group or throtl_group allocations happen while\nwe are holding -\u003equeue_lock and sleeping is not allowed.\n\nSoon, we will move to per cpu stats and also need to allocate the\nper group stats. As one can not call alloc_percpu() from atomic\ncontext as it can sleep, we need to drop -\u003equeue_lock, allocate the\ngroup, retake the lock and continue processing.\n\nIn throttling code, I check the queue DEAD flag again to make sure\nthat driver did not call blk_cleanup_queue() in the mean time.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "56edf7d75db5b14d628b46623c414ffbeed68d7f",
      "tree": "7d7ff46f03676154d0edf3da85c8e738d506ad92",
      "parents": [
        "3e59cf9d66a87763fef6c232a4a8dc664461ca50"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:22 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "cfq-iosched: Fix a possible race with cfq cgroup removal code\n\nblkg-\u003ekey \u003d cfqd is an rcu protected pointer and hence we used to do\ncall_rcu(cfqd-\u003ercu_head) to free up cfqd after one rcu grace period.\n\nThe problem here is that even though cfqd is around, there are no\ngurantees that associated request queue (td-\u003equeue) or q-\u003equeue_lock\nis still around. A driver might have called blk_cleanup_queue() and\nrelease the lock.\n\nIt might happen that after freeing up the lock we call\nblkg-\u003ekey-\u003equeue-\u003equeue_ock and crash. This is possible in following\npath.\n\nblkiocg_destroy()\n blkio_unlink_group_fn()\n  cfq_unlink_blkio_group()\n\nHence, wait for an rcu peirod if there are groups which have not\nbeen unlinked from blkcg-\u003eblkg_list. That way, if there are any groups\nwhich are taking cfq_unlink_blkio_group() path, can safely take queue\nlock.\n\nThis is how we have taken care of race in throttling logic also.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3e59cf9d66a87763fef6c232a4a8dc664461ca50",
      "tree": "2a7a0618092f29ac72b3723e0e3e64a7e4227716",
      "parents": [
        "a23e68695593d00b35a6cddf8e9c9ec03505ecb9"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:21 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "cfq-iosched: Get rid of redundant function parameter \"create\"\n\nNobody seems to be using cfq_find_alloc_cfqg() function parameter \"create\".\nGet rid of that.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a23e68695593d00b35a6cddf8e9c9ec03505ecb9",
      "tree": "954a92fb07408e4b7483881f09d2afc91002bc00",
      "parents": [
        "a29a171e7c46c60842b85729280e2f5690372683"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:20 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-cgroup: move some fields of unaccounted_time file under right config option\n\ncgroup unaccounted_time file is created only if CONFIG_DEBUG_BLK_CGROUP\u003dy.\nthere are some fields which are out side this config option. Fix that.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a29a171e7c46c60842b85729280e2f5690372683",
      "tree": "83d9be7f8801c04feeac0256e677da7240239046",
      "parents": [
        "698567f3fa790fea37509a54dea855302dd88331"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:19 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:51 2011 +0200"
      },
      "message": "blk-throttle: Do the new group initialization with the help of a function\n\nGroup initialization code seems to be at two places. root group\ninitialization in blk_throtl_init() and dynamically allocated group\nin throtl_find_alloc_tg(). Create a common function and use at both\nthe places.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "698567f3fa790fea37509a54dea855302dd88331",
      "tree": "7a1df976a0eb12cab03e82c18809a30d5482fee4",
      "parents": [
        "d70d0711edd8076ec2ce0ed109106e2df950681b",
        "61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:33:15 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:33:15 2011 +0200"
      },
      "message": "Merge commit \u0027v2.6.39\u0027 into for-2.6.40/core\n\nSince for-2.6.40/core was forked off the 2.6.39 devel tree, we\u0027ve\nhad churn in the core area that makes it difficult to handle\npatches for eg cfq or blk-throttle. Instead of requiring that they\nbe based in older versions with bugs that have been fixed later\nin the rc cycle, merge in 2.6.39 final.\n\nAlso fixes up conflicts in the below files.\n\nConflicts:\n\tdrivers/block/paride/pcd.c\n\tdrivers/cdrom/viocd.c\n\tdrivers/ide/ide-cd.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0a58e077eb600d1efd7e54ad9926a75a39d7f8ae",
      "tree": "eb1b325d28c0aa44b1dba3bdb0b31b662b2a1f7f",
      "parents": [
        "a2b9c1f6208126e6df6c02428c501f8853685812"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Wed May 18 16:20:10 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed May 18 19:30:32 2011 +0200"
      },
      "message": "block: add proper state guards to __elv_next_request\n\nblk_cleanup_queue() calls elevator_exit() and after this, we can\u0027t\ntouch the elevator without oopsing.  __elv_next_request() must check\nfor this state because in the refcounted queue model, we can still\ncall it after blk_cleanup_queue() has been called.\n\nThis was reported as causing an oops attributable to scsi.\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3ec717b7ca4ee1d75d77e4f6286430d8f01d1dbd",
      "tree": "fcf1db152baea6270dd6c4dbdf6ff8dd15ad440f",
      "parents": [
        "9937a5e2f32892db0dbeefc2b3bc74b3ae3ea9c7"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Wed May 18 11:22:43 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed May 18 12:24:03 2011 +0200"
      },
      "message": "block: don\u0027t delay blk_run_queue_async\n\nLet\u0027s check a scenario:\n1. blk_delay_queue(q, SCSI_QUEUE_DELAY);\n2. blk_run_queue_async();\nthe second one will became a noop, because q-\u003edelay_work already has\nWORK_STRUCT_PENDING_BIT set, so the delayed work will still run after\nSCSI_QUEUE_DELAY. But blk_run_queue_async actually hopes the delayed\nwork runs immediately.\n\nFix this by doing a cancel on potentially pending delayed work\nbefore queuing an immediate run of the workqueue.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a934a00a69e940b126b9bdbf83e630ef5fe43523",
      "tree": "b3f82d7b0a6c34c4d449debd2d1d242bdbf84b56",
      "parents": [
        "bbdd304cf66fbf2b4b2d28418dc619d443635e83"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed May 18 10:37:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed May 18 10:37:35 2011 +0200"
      },
      "message": "block: Fix discard topology stacking and reporting\n\nIn some cases we would end up stacking discard_zeroes_data incorrectly.\nFix this by enabling the feature by default for stacking drivers and\nclearing it for low-level drivers. Incorporating a device that does not\nsupport dzd will then cause the feature to be disabled in the stacking\ndriver.\n\nAlso ensure that the maximum discard value does not overflow when\nexported in sysfs and return 0 in the alignment and dzd fields for\ndevices that don\u0027t support discard.\n\nReported-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "70087dc38cc77ca8f46059564c00338777734762",
      "tree": "2ffd5885a12acb44d90d3c3c1a578387bad94a32",
      "parents": [
        "02e352287a40bd456eb78df705bf888bc3161d3f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 16 15:24:08 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 16 15:24:08 2011 +0200"
      },
      "message": "blk-throttle: Use task_subsys_state() to determine a task\u0027s blkio_cgroup\n\nCurrentlly we first map the task to cgroup and then cgroup to\nblkio_cgroup. There is a more direct way to get to blkio_cgroup\nfrom task using task_subsys_state(). Use that.\n\nThe real reason for the fix is that it also avoids a race in generic\ncgroup code. During remount/umount rebind_subsystems() is called and\nit can do following with and rcu protection.\n\ncgrp-\u003esubsys[i] \u003d NULL;\n\nThat means if somebody got hold of cgroup under rcu and then it tried\nto do cgroup-\u003esubsys[] to get to blkio_cgroup, it would get NULL which\nis wrong. I was running into this race condition with ltp running on a\nupstream derived kernel and that lead to crash.\n\nSo ideally we should also fix cgroup generic code to wait for rcu\ngrace period before setting pointer to NULL. Li Zefan is not very keen\non introducing synchronize_wait() as he thinks it will slow\ndown moun/remount/umount operations.\n\nSo for the time being atleast fix the kernel crash by taking a more\ndirect route to blkio_cgroup.\n\nOne tester had reported a crash while running LTP on a derived kernel\nand with this fix crash is no more seen while the test has been\nrunning for over 6 days.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8af1954d172a46a63e5e79dae523a6d74715e458",
      "tree": "6142f111bb600c4bbf194209155e857fd5f83ca8",
      "parents": [
        "5baebe5c86acd6100536a466905880529f79cf1a"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri May 06 19:30:01 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 19:30:01 2011 -0600"
      },
      "message": "blkdev: Do not return -EOPNOTSUPP if discard is supported\n\nCurrently we return -EOPNOTSUPP in blkdev_issue_discard() if any of the\nbio fails due to underlying device not supporting discard request.\nHowever, if the device is for example dm device composed of devices\nwhich some of them support discard and some of them does not, it is ok\nfor some bios to fail with EOPNOTSUPP, but it does not mean that discard\nis not supported at all.\n\nThis commit removes the check for bios failed with EOPNOTSUPP and change\nblkdev_issue_discard() to return operation not supported if and only if\nthe device does not actually supports it, not just part of the device as\nsome bios might indicate.\n\nThis change also fixes problem with BLKDISCARD ioctl() which now works\ncorrectly on such dm devices.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nCC: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nCC: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5baebe5c86acd6100536a466905880529f79cf1a",
      "tree": "6c7b4e6e170037981ea1bc094547034d3281c344",
      "parents": [
        "5dba3089ed03f84b84c6c739df8330112f04a15d"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri May 06 19:26:28 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 19:26:28 2011 -0600"
      },
      "message": "blkdev: Simple cleanup in blkdev_issue_zeroout()\n\nIn blkdev_issue_zeroout() we are submitting regular WRITE bios, so we do\nnot need to check for -EOPNOTSUPP specifically in case of error. Also\nthere is no need to have label submit: because there is no way to jump\nout from the while cycle without an error and we really want to exit,\nrather than try again. And also remove the check for (sz \u003d\u003d 0) since at\nthat point sz can never be zero.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCC: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nCC: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5dba3089ed03f84b84c6c739df8330112f04a15d",
      "tree": "a61a12a0a13eba03b47fe1cba76afe5ac8677992",
      "parents": [
        "900e599eb0c16390ff671652a44e0ea90532220e"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri May 06 19:26:27 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 19:26:27 2011 -0600"
      },
      "message": "blkdev: Submit discard bio in batches in blkdev_issue_discard()\n\nCurrently we are waiting for every submitted REQ_DISCARD bio separately,\nbut it can have unwanted consequences of repeatedly flushing the queue,\nso we rather submit bios in batches and wait for the entire batch, hence\nnarrowing the window of other ios going in.\n\nUse bio_batch_end_io() and struct bio_batch for that purpose, the same\nis used by blkdev_issue_zeroout(). Also change bio_batch_end_io() so we\nalways set !BIO_UPTODATE in the case of error and remove the check for\nbb, since we are the only user of this function and we always set this.\n\nRemove bio_get()/bio_put() from the blkdev_issue_discard() since\nbio_alloc() and bio_batch_end_io() is doing the same thing, hence it is\nnot needed anymore.\n\nI have done simple dd testing with surprising results. The script I have\nused is:\n\nfor i in $(seq 10); do\n        echo $i\n        dd if\u003d/dev/sdb1 of\u003d/dev/sdc1 bs\u003d4k \u0026\n        sleep 5\ndone\n/usr/bin/time -f %e ./blkdiscard /dev/sdc1\n\nRunning time of BLKDISCARD on the whole device:\nwith patch              without patch\n0.95                    15.58\n\nSo we can see that in this artificial test the kernel with the patch\napplied is approx 16x faster in discarding the device.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nCC: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nCC: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nCC: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3ac0cc4508709d42ec9aa351086c7d38bfc0660c",
      "tree": "933d5ab6ff9b0763f36e614962abb5bdcc4a348a",
      "parents": [
        "f3876930952390a31c3a7fd68dd621464a36eb80"
      ],
      "author": {
        "name": "shaohua.li@intel.com",
        "email": "shaohua.li@intel.com",
        "time": "Fri May 06 11:34:41 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 11:36:25 2011 -0600"
      },
      "message": "block: hold queue if flush is running for non-queueable flush drive\n\nIn some drives, flush requests are non-queueable. When flush request is\nrunning, normal read/write requests can\u0027t run. If block layer dispatches\nsuch request, driver can\u0027t handle it and requeue it.  Tejun suggested we\ncan hold the queue when flush is running. This can avoid unnecessary\nrequeue.  Also this can improve performance. For example, we have\nrequest flush1, write1, flush 2. flush1 is dispatched, then queue is\nhold, write1 isn\u0027t inserted to queue. After flush1 is finished, flush2\nwill be dispatched. Since disk cache is already clean, flush2 will be\nfinished very soon, so looks like flush2 is folded to flush1.\n\nIn my test, the queue holding completely solves a regression introduced by\ncommit 53d63e6b0dfb95882ec0219ba6bbd50cde423794:\n\n    block: make the flush insertion use the tail of the dispatch list\n\n    It\u0027s not a preempt type request, in fact we have to insert it\n    behind requests that do specify INSERT_FRONT.\n\nwhich causes about 20% regression running a sysbench fileio\nworkload.\n\nStable: 2.6.39 only\n\nCc: stable@kernel.org\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f3876930952390a31c3a7fd68dd621464a36eb80",
      "tree": "7fe2306a8dc2022ac7724b2d47629e38e3fb354b",
      "parents": [
        "490b94be0282c3b67f56453628ff0aaae827a670"
      ],
      "author": {
        "name": "shaohua.li@intel.com",
        "email": "shaohua.li@intel.com",
        "time": "Fri May 06 11:34:32 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 06 11:36:25 2011 -0600"
      },
      "message": "block: add a non-queueable flush flag\n\nflush request isn\u0027t queueable in some drives. Add a flag to let driver\nnotify block layer about this. We can optimize flush performance with the\nknowledge.\n\nStable: 2.6.39 only\n\nCc: stable@kernel.org\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "490b94be0282c3b67f56453628ff0aaae827a670",
      "tree": "8f77bbe2aac76f1cdd85f5fe0e6aad65db515f3b",
      "parents": [
        "addd0a09fc06179f2e02b4221775d9ab265c9fc7"
      ],
      "author": {
        "name": "Kees Cook",
        "email": "kees.cook@canonical.com",
        "time": "Thu May 05 18:02:12 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu May 05 18:02:12 2011 -0600"
      },
      "message": "iosched: remove redundant sprintf\n\nAfter the anticipatory scheduler was dropped, there was no need to\nspecial-case the request_module string. As such, drop the redundant\nsprintf and stack variable.\n\nSigned-off-by: Kees Cook \u003ckees.cook@canonical.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "addd0a09fc06179f2e02b4221775d9ab265c9fc7",
      "tree": "4e8c919a2937cd3d37d8a5c2f23e28ab130000a5",
      "parents": [
        "d4dc210f69bcb0b4bef5a83b1c323817be89bad1"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu May 05 15:10:05 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu May 05 15:10:05 2011 -0600"
      },
      "message": "block: Remove \u0027plug/unplug\u0027 comment in blk_execute_rq_nowait\n\nunplug is replaced with blk_run_queue now in blk_execute_rq_nowait,\nso change the comment accordingly.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7c88a168da8003fd4d8fb6ae103c4ecf29cb1130",
      "tree": "121d1b65615faf98e3c77f066b50527275d4b4c3",
      "parents": [
        "3aa72873ffdcc2f7919743efbbefc351ec73f5cb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Apr 21 19:43:58 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Apr 21 19:43:58 2011 +0200"
      },
      "message": "block: don\u0027t propagate unlisted DISK_EVENTs to userland\n\nDISK_EVENT_MEDIA_CHANGE is used for both userland visible event and\ninternal event for revalidation of removeable devices.  Some legacy\ndrivers don\u0027t implement proper event detection and continuously\ngenerate events under certain circumstances.  For example, ide-cd\ngenerates media changed continuously if there\u0027s no media in the drive,\nwhich can lead to infinite loop of events jumping back and forth\nbetween the driver and userland event handler.\n\nThis patch updates disk event infrastructure such that it never\npropagates events not listed in disk-\u003eevents to userland.  Those\nevents are processed the same for internal purposes but uevent\ngeneration is suppressed.\n\nThis also ensures that userland only gets events which are advertised\nin the @events sysfs node lowering risk of confusion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3aa72873ffdcc2f7919743efbbefc351ec73f5cb",
      "tree": "f159c777a489c6ac3721ba1f1cadbe2d86b19fa5",
      "parents": [
        "584f79046780e10cb24367a691f8c28398a00e84"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Apr 21 19:28:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Apr 21 19:28:35 2011 +0200"
      },
      "message": "elevator: check for ELEVATOR_INSERT_SORT_MERGE in !elvpriv case too\n\nThe sort insert is the one that goes to the IO scheduler. With\nthe SORT_MERGE addition, we could bypass IO scheduler setup\nbut still ask the IO scheduler to insert the request. This would\ncause an oops on switching IO schedulers through the sysfs\ninterface, unless the disk just happened to be idle while it\noccured.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "60735b6362f29b52b5635a2dfa9ab5ad39948345",
      "tree": "e590ce1697965a4ccb48af5cb729c64452cdcc6f",
      "parents": [
        "ed5302d3c25006a9edc7a7fbea97a30483f89ef7"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Tue Apr 19 13:50:40 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:51:53 2011 +0200"
      },
      "message": "block: Remove the extra check in queue_requests_store\n\nIn queue_requests_store, the code looks like\n\tif (rl-\u003ecount[BLK_RW_SYNC] \u003e\u003d q-\u003enr_requests) {\n\t\tblk_set_queue_full(q, BLK_RW_SYNC);\n\t} else if (rl-\u003ecount[BLK_RW_SYNC]+1 \u003c\u003d q-\u003enr_requests) {\n\t\tblk_clear_queue_full(q, BLK_RW_SYNC);\n\t\twake_up(\u0026rl-\u003ewait[BLK_RW_SYNC]);\n\t}\nIf we don\u0027t satify the situation of \"if\", we can get that\nrl-\u003ecount[BLK_RW_SYNC} \u003c q-\u003enr_quests. It is the same as\nrl-\u003ecount[BLK_RW_SYNC]+1 \u003c\u003d q-\u003enr_requests.\nAll the \"else\" should satisfy the \"else if\" check so it isn\u0027t\nneeded actually.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ed5302d3c25006a9edc7a7fbea97a30483f89ef7",
      "tree": "7322cdd2607d7d8ffaf8a6539ca001771928363f",
      "parents": [
        "d350e6b6e819df0a383ff34465720bfaa0f91c79"
      ],
      "author": {
        "name": "Liu Yuan",
        "email": "tailai.ly@taobao.com",
        "time": "Tue Apr 19 13:47:58 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:51:53 2011 +0200"
      },
      "message": "block, blk-sysfs: Fix an err return path in blk_register_queue()\n\nWe do not call blk_trace_remove_sysfs() in err return path\nif kobject_add() fails. This path fixes it.\n\nCc: stable@kernel.org\nSigned-off-by: Liu Yuan \u003ctailai.ly@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d350e6b6e819df0a383ff34465720bfaa0f91c79",
      "tree": "338c44b5ffaab070c3fdf2f2772cfd50f6163559",
      "parents": [
        "c21e6beba8835d09bb80e34961430b13e60381c5"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:34:14 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:34:14 2011 +0200"
      },
      "message": "block: remove stale kerneldoc member from __blk_run_queue()\n\nWe don\u0027t pass in a \u0027force_kblockd\u0027 anymore, get rid of the\nstsale comment.\n\nReported-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c21e6beba8835d09bb80e34961430b13e60381c5",
      "tree": "cdf6f6d40130b95e641ab5db1de0f6ecc179054a",
      "parents": [
        "5f45c69589b7d2953584e6cd0b31e35dbe960ad0"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:32:46 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 13:32:46 2011 +0200"
      },
      "message": "block: get rid of QUEUE_FLAG_REENTER\n\nWe are currently using this flag to check whether it\u0027s safe\nto call into -\u003erequest_fn(). If it is set, we punt to kblockd.\nBut we get a lot of false positives and excessive punts to\nkblockd, which hurts performance.\n\nThe only real abuser of this infrastructure is SCSI. So export\nthe async queue run and convert SCSI over to use that. There\u0027s\nroom for improvement in that SCSI need not always use the async\ncall, but this fixes our performance issue and they can fix that\nup in due time.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5f45c69589b7d2953584e6cd0b31e35dbe960ad0",
      "tree": "7f920cebcbbe6a1435975e355cee15289ddbc428",
      "parents": [
        "bd900d4580107c899d43b262fbbd995f11097a43"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 09:10:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 09:10:35 2011 +0200"
      },
      "message": "cfq-iosched: read_lock() does not always imply rcu_read_lock()\n\nFor some configurations of CONFIG_PREEMPT that is not true. So\nget rid of __call_for_each_cic() and always uses the explicitly\nrcu_read_lock() protected call_for_each_cic() instead.\n\nThis fixes a potential bug related to IO scheduler removal or\nonline switching.\n\nThanks to Paul McKenney for clarifying this.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "bd900d4580107c899d43b262fbbd995f11097a43",
      "tree": "c58b69acd1e5dc54e0e675901ab3d609c0cae945",
      "parents": [
        "24ecfbe27f65563909b14492afda2f1c21f7c044"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 22:06:57 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 22:06:57 2011 +0200"
      },
      "message": "block: kill blk_flush_plug_list() export\n\nWith all drivers and file systems converted, we only have\nin-core use of this function. So remove the export.\n\nReporteed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "24ecfbe27f65563909b14492afda2f1c21f7c044",
      "tree": "a7e51d903c400d0925f87be5f3069a5a44e0af24",
      "parents": [
        "4521cc4ed5173f92714f6999a69910c3385fed68"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Apr 18 11:41:33 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 11:41:33 2011 +0200"
      },
      "message": "block: add blk_run_queue_async\n\nInstead of overloading __blk_run_queue to force an offload to kblockd\nadd a new blk_run_queue_async helper to do it explicitly.  I\u0027ve kept\nthe blk_queue_stopped check for now, but I suspect it\u0027s not needed\nas the check we do when the workqueue items runs should be enough.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4521cc4ed5173f92714f6999a69910c3385fed68",
      "tree": "26ff58e87dfd303024df098935cc55e9a7bbe48d",
      "parents": [
        "c3b328ac846bcf6b9a62c5563380a81ab723006d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 11:36:39 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 11:36:39 2011 +0200"
      },
      "message": "block: blk_delay_queue() should use kblockd workqueue\n\nReported-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "99e22598e9a8e0a996d69c8c0f6b7027cb57720a",
      "tree": "9cf18bc4681889bdfcbc0c845e384f809fb29fce",
      "parents": [
        "b4cb290e0a7d19235bd075c2ad4d60dbab0bac15"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:59:55 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:59:55 2011 +0200"
      },
      "message": "block: drop queue lock before calling __blk_run_queue() for kblockd punt\n\nIf we know we are going to punt to kblockd, we can drop the queue\nlock before calling into __blk_run_queue() since it only does a\nsafe bit test and a workqueue call. Since kblockd needs to grab\nthis very lock as one of the first things it does, it\u0027s a good\noptimization to drop the lock before waking kblockd.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b4cb290e0a7d19235bd075c2ad4d60dbab0bac15",
      "tree": "2674fc5e3d0ee76e8b8205ab771fe7bbed173a88",
      "parents": [
        "048c9374a749a27f16493cea033fa4a8ff492356"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:54:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:54:05 2011 +0200"
      },
      "message": "Revert \"block: add callback function for unplug notification\"\n\nMD can\u0027t use this since it really requires us to be able to\nkeep more than a single piece of state for the unplug. Commit\n048c9374 added the required support for MD, so get rid of this\nnow unused code.\n\nThis reverts commit f75664570d8b75469cc468f23c2b27220984983b.\n\nConflicts:\n\n\tblock/blk-core.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "048c9374a749a27f16493cea033fa4a8ff492356",
      "tree": "64f520a1a2d2e1a9c30b45e306ce6f901f8f8d49",
      "parents": [
        "a1b49cb7e2a7961ec3aa8b64860bf480d4ec9077"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 09:52:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 18 09:52:22 2011 +0200"
      },
      "message": "block: Enhance new plugging support to support general callbacks\n\nmd/raid requires an unplug callback, but as it does not uses\nrequests the current code cannot provide one.\n\nSo allow arbitrary callbacks to be attached to the blk_plug.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "49cac01e1fa74174d72adb0e872504a7fefd7c01",
      "tree": "a1ab1974eceea3179a604413955ad8369ba715d7",
      "parents": [
        "a237c1c5bc5dc5c76a21be922dca4826f3eca8ca"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Apr 16 13:51:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Apr 16 13:51:05 2011 +0200"
      },
      "message": "block: make unplug timer trace event correspond to the schedule() unplug\n\nIt\u0027s a pretty close match to what we had before - the timer triggering\nwould mean that nobody unplugged the plug in due time, in the new\nscheme this matches very closely what the schedule() unplug now is.\nIt\u0027s essentially the difference between an explicit unplug (IO unplug)\nor an implicit unplug (timer unplug, we scheduled with pending IO\nqueued).\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f6603783f9f099bf7a83b3f6c689bbbf74f0e96e",
      "tree": "450065f77e95b6cd0eee13c9d8f721016be79839",
      "parents": [
        "88b996cd0652280cc9b9fc70008fda15f14175e1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Apr 15 15:49:07 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Apr 15 15:49:07 2011 +0200"
      },
      "message": "block: only force kblockd unplugging from the schedule() path\n\nFor the explicit unplugging, we\u0027d prefer to kick things off\nimmediately and not pay the penalty of the latency to switch\nto kblockd. So let blk_finish_plug() do the run inline, while\nthe implicit-on-schedule-out unplug will punt to kblockd.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "88b996cd0652280cc9b9fc70008fda15f14175e1",
      "tree": "c842575e47ab094bced8a01b241568616e89366a",
      "parents": [
        "80656b67b3988f83edd86a280d9937124fe62050"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Apr 15 15:20:10 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Apr 15 15:20:10 2011 +0200"
      },
      "message": "block: cleanup the block plug helper functions\n\nIt\u0027s a bit of a mess currently. task-\u003eplug is being cleared\nand reset in __blk_finish_plug(), and blk_finish_plug() is\ntesting for a NULL plug which cannot happen even from schedule()\nanymore since it uses blk_needs_flush_plug() to determine\nwhether to call into this function at all.\n\nSo get rid of some of the cruft.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "80656b67b3988f83edd86a280d9937124fe62050",
      "tree": "58d23b396fa17262b697134cf2a58651f26d3460",
      "parents": [
        "f4af3c3d077a004762aaad052049c809fd8c6f0c"
      ],
      "author": {
        "name": "Liu Yuan",
        "email": "tailai.ly@taobao.com",
        "time": "Wed Apr 13 22:14:54 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Apr 13 22:14:54 2011 +0200"
      },
      "message": "block, blk-sysfs: Use the variable directly instead of a function call\n\nIn the function blk_register_queue(), var _dev_ is already assigned by\ndisk_to_dev().So use it directly instead of calling disk_to_dev() again.\n\nSigned-off-by: Liu Yuan \u003ctailai.ly@taobao.com\u003e\n\nModified by me to delete an empty line in the same function while\nin there anyway.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f4af3c3d077a004762aaad052049c809fd8c6f0c",
      "tree": "c4cbbc37e357775fc8200e16c6eb9b3f14d30069",
      "parents": [
        "cf82c798394cd443eed7d91f998b79a63f341e91"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 14:58:51 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 14:58:51 2011 +0200"
      },
      "message": "block: move queue run on unplug to kblockd\n\nThere are worries that we are now consuming a lot more stack in\nsome cases, since we potentially call into IO dispatch from\nschedule() or io_schedule(). We can reduce this problem by moving\nthe running of the queue to kblockd, like the old plugging scheme\ndid as well.\n\nThis may or may not be a good idea from a performance perspective,\ndepending on how many tasks have queue plugs running at the same\ntime. For even the slightly contended case, doing just a single\nqueue run from kblockd instead of multiple runs directly from the\nunpluggers will be faster.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "cf82c798394cd443eed7d91f998b79a63f341e91",
      "tree": "7ec33967528f4106dbbe32dad5e823c2c299b0a5",
      "parents": [
        "dc6d36c9710d1fed42d1bbe7d8e4f742abd844c6"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:30:53 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:30:53 2011 +0200"
      },
      "message": "block: kill queue_sync_plugs()\n\nThe original use for this dates back to when we had to track write\nrequests for serializing around barriers. That\u0027s not needed anymore,\nso kill it.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "dc6d36c9710d1fed42d1bbe7d8e4f742abd844c6",
      "tree": "88062deeeb7f8d6973056422f08d47f8c5a27c51",
      "parents": [
        "f75664570d8b75469cc468f23c2b27220984983b"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:28:28 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:28:28 2011 +0200"
      },
      "message": "block: readd plug trace event\n\nThis was removed with the queue plug state. But we can easily readd\nby checking if this is the first request going to this queue. It\u0027s\ngood information to have when tracing to see how effective the\nplugging is.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f75664570d8b75469cc468f23c2b27220984983b",
      "tree": "48f1e9b8576892cab65361e39b874e0e07d3b32a",
      "parents": [
        "188112722cce083c8f1a7d0d84f55c2cd885920c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:17:31 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:17:31 2011 +0200"
      },
      "message": "block: add callback function for unplug notification\n\nMD would like to know when a queue is unplugged, so it can flush\nit\u0027s bitmap writes. Add such a callback.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "188112722cce083c8f1a7d0d84f55c2cd885920c",
      "tree": "eb285b823d2dd5a7fa88e9d6a1ee77299c14ff88",
      "parents": [
        "94b5eb28b41cc79d9713696e0005ae167b5afd1b"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:11:24 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:12:29 2011 +0200"
      },
      "message": "block: add comment on why we save and disable interrupts in flush_plug_list()\n\nIt\u0027s done at the top to avoid doing it for every queue we unplug.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "94b5eb28b41cc79d9713696e0005ae167b5afd1b",
      "tree": "404680c86a360bfe623b5a287ee87dd5263b5a8e",
      "parents": [
        "d9c97833179036408e53ef5f3f5c7eaf781769bc"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:12:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 12 10:12:19 2011 +0200"
      },
      "message": "block: fixup block IO unplug trace call\n\nIt was removed with the on-stack plugging, readd it and track the\ndepth of requests added when flushing the plug.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "109b81296c63228578d4760794d8dd46e02eddfb",
      "tree": "2f723e1b69ab08e12528f677f04edbfc7473b7c5",
      "parents": [
        "4263a2f1dad8c8e7ce2352a0cbc882c2b0c044a9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 11 14:13:10 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Apr 11 14:13:10 2011 +0200"
      },
      "message": "block: splice plug list to local context\n\nIf the request_fn ends up blocking, we could be re-entering\nthe plug flush. Since the list is protected by explicitly\nnot allowing schedule events, this isn\u0027t a terribly good idea.\n\nAdditionally, it can cause us to recurse. As request_fn called by\n__blk_run_queue is allowed to \u0027schedule()\u0027 (after dropping the queue\nlock of course), it is possible to get a recursive call:\n\n schedule -\u003e blk_flush_plug -\u003e __blk_finish_plug -\u003e flush_plug_list\n      -\u003e __blk_run_queue -\u003e request_fn -\u003e schedule\n\nWe must make sure that the second schedule does not call into\nblk_flush_plug again.  So instead of leaving the list of requests on\nblk_plug-\u003elist, move them to a separate list leaving blk_plug-\u003elist\nempty.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "42933bac11e811f02200c944d8562a15f8ec4ff0",
      "tree": "fcdd9afe56eb0e746565ddd1f92f22d36678b843",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "25985edcedea6396277003854657b5f3cb31a628"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6\n\n* \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6:\n  Fix common misspellings\n"
    },
    {
      "commit": "f83e826181f7f8fb152e4190d03854fc3a5dd040",
      "tree": "989f440665d529587fcc6365b1968e2b29fb7c94",
      "parents": [
        "a63a5cf84dac7a23a57c800eea5734701e7d3c04"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Mon Apr 04 00:15:02 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:52:49 2011 +0200"
      },
      "message": "block: fix request sorting at unplug\n\nComparison function for list_sort() must be anticommutative,\notherwise it is not sorting in ordinary meaning.\n\nBut fortunately list_sort() always check ((*cmp)(priv, a, b) \u003c\u003d 0)\nit not distinguish negative and zero, so comparison function can\nimplement only less-or-equal instead of full three-way comparison.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a63a5cf84dac7a23a57c800eea5734701e7d3c04",
      "tree": "965552b96d7eacc21206a4f28672efd24a04d913",
      "parents": [
        "7dcda1c96d7c643101d4a05579ef4512a4baa7ef"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Apr 01 21:02:31 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:52:43 2011 +0200"
      },
      "message": "dm: improve block integrity support\n\nThe current block integrity (DIF/DIX) support in DM is verifying that\nall devices\u0027 integrity profiles match during DM device resume (which\nis past the point of no return).  To some degree that is unavoidable\n(stacked DM devices force this late checking).  But for most DM\ndevices (which aren\u0027t stacking on other DM devices) the ideal time to\nverify all integrity profiles match is during table load.\n\nIntroduce the notion of an \"initialized\" integrity profile: a profile\nthat was blk_integrity_register()\u0027d with a non-NULL \u0027blk_integrity\u0027\ntemplate.  Add blk_integrity_is_initialized() to allow checking if a\nprofile was initialized.\n\nUpdate DM integrity support to:\n- check all devices with _initialized_ integrity profiles match\n  during table load; uninitialized profiles (e.g. for underlying DM\n  device(s) of a stacked DM device) are ignored.\n- disallow a table load that would result in an integrity profile that\n  conflicts with a DM device\u0027s existing (in-use) integrity profile\n- avoid clearing an existing integrity profile\n- validate all integrity profiles match during resume; but if they\n  don\u0027t all we can do is report the mismatch (during resume we\u0027re past\n  the point of no return)\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6f0379377047b18103b88ce33c03e5b19747ae57",
      "tree": "83a39f34bd29c38ab46faa21d65a45831a659287",
      "parents": [
        "ee3dea3549444e6e76d27af48b4929983e6f023c"
      ],
      "author": {
        "name": "Andreas Schwab",
        "email": "schwab@linux-m68k.org",
        "time": "Wed Mar 30 12:21:56 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "blk-throttle: don\u0027t call xchg on bool\n\nxchg does not work portably with smaller than 32bit types.\n\nSigned-off-by: Andreas Schwab \u003cschwab@linux-m68k.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "53d63e6b0dfb95882ec0219ba6bbd50cde423794",
      "tree": "46fe9518a681943b0daccf39267d588ff03717f5",
      "parents": [
        "b710a480554f2be682bac3cb59b0e085ba3d644b"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 30 13:27:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "block: make the flush insertion use the tail of the dispatch list\n\nIt\u0027s not a preempt type request, in fact we have to insert it\nbehind requests that do specify INSERT_FRONT.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b710a480554f2be682bac3cb59b0e085ba3d644b",
      "tree": "bd1b9d5080bca2b35c861ddbc98d4116445bebfb",
      "parents": [
        "8182924bc5850281985d73c312876746acd390b5"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 30 09:52:30 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "block: get rid of elv_insert() interface\n\nMerge it with __elv_add_request(), it\u0027s pretty pointless to\nhave a function with only two callers. The main interface\nis elv_add_request()/__elv_add_request().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8182924bc5850281985d73c312876746acd390b5",
      "tree": "b095bab06ba6fa55b26047534ebe31004f531e18",
      "parents": [
        "b2a8b4b81966094703088a7bc76a313af841924d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 30 09:51:33 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "block: dump request state on seeing a corrupted request completion\n\nCurrently we just dump a non-informative \u0027request botched\u0027 message.\nLets actually try and print something sane to help debug issues\naround this.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "ad3d9d7ede04a9c71be7a9fe1a23961817f371f7",
      "tree": "33b0eded3b689020529cf8c0d4febf956ff10140",
      "parents": [
        "401a18e92ce32cd0ddfa5738899ca2b8114f2bbf"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 16:58:59 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 17:04:08 2011 +0100"
      },
      "message": "block: fix issue with calling blk_stop_queue() from the request_fn handler\n\nWhen the queue work handler was converted to delayed work, the\nstopping was inadvertently made sync as well. Change this back\nto being async stop, using __cancel_delayed_work() instead of\ncancel_delayed_work().\n\nReported-by: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nReported-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "401a18e92ce32cd0ddfa5738899ca2b8114f2bbf",
      "tree": "f8c7dbb61a7a90ae43065075b640512899fafd28",
      "parents": [
        "6c5103890057b1bb781b26b7aae38d33e4c517d8"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 16:57:52 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 25 17:04:08 2011 +0100"
      },
      "message": "block: fix bug with inserting flush requests as sort/merge\n\nWith the introduction of the on-stack plugging, we would assume\nthat any request being inserted was a normal file system request.\nAs flush/fua requires a special insert mode, this caused problems.\n\nFix this up by checking for this in flush_plug_list() and use\nthe appropriate insert mechanism.\n\nBig thanks goes to Markus Tripplesdorf for tirelessly testing\npatches, and to Sergey Senozhatsky for helping find the real\nissue.\n\nReported-by: Markus Tripplesdorf \u003cmarkus@trippelsdorf.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6c5103890057b1bb781b26b7aae38d33e4c517d8",
      "tree": "e6e57961dcddcb5841acb34956e70b9dc696a880",
      "parents": [
        "3dab04e6978e358ad2307bca563fabd6c5d2c58b",
        "9d2e157d970a73b3f270b631828e03eb452d525e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block: (65 commits)\n  Documentation/iostats.txt: bit-size reference etc.\n  cfq-iosched: removing unnecessary think time checking\n  cfq-iosched: Don\u0027t clear queue stats when preempt.\n  blk-throttle: Reset group slice when limits are changed\n  blk-cgroup: Only give unaccounted_time under debug\n  cfq-iosched: Don\u0027t set active queue in preempt\n  block: fix non-atomic access to genhd inflight structures\n  block: attempt to merge with existing requests on plug flush\n  block: NULL dereference on error path in __blkdev_get()\n  cfq-iosched: Don\u0027t update group weights when on service tree\n  fs: assign sb-\u003es_bdi to default_backing_dev_info if the bdi is going away\n  block: Require subsystems to explicitly allocate bio_set integrity mempool\n  jbd2: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  jbd: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  fs: make fsync_buffers_list() plug\n  mm: make generic_writepages() use plugging\n  blk-cgroup: Add unaccounted time to timeslice_used.\n  block: fixup plugging stubs for !CONFIG_BLOCK\n  block: remove obsolete comments for blkdev_issue_zeroout.\n  blktrace: Use rq-\u003ecmd_flags directly in blk_add_trace_rq.\n  ...\n\nFix up conflicts in fs/{aio.c,super.c}\n"
    },
    {
      "commit": "c4ade94fc00f8b34589719d8a347f658b6d3951e",
      "tree": "24868fc90f85ce3cba1b8218e771ce00506c3f51",
      "parents": [
        "62a37f6badd1ac97ba07d543b5d4be2f9cb17217"
      ],
      "author": {
        "name": "Li, Shaohua",
        "email": "shaohua.li@intel.com",
        "time": "Wed Mar 23 08:30:34 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 23 08:30:34 2011 +0100"
      },
      "message": "cfq-iosched: removing unnecessary think time checking\n\nRemoving think time checking. A high thinktime queue might means the queue\ndispatches several requests and then do away. Limitting such queue seems\nmeaningless. And also this can simplify code. This is suggested by Vivek.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "62a37f6badd1ac97ba07d543b5d4be2f9cb17217",
      "tree": "b659ac7b4c9fce787694bb8a33affa229d1cd552",
      "parents": [
        "04521db04e9a11e74b0252d222051cb194487f4d"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Wed Mar 23 08:25:44 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 23 08:25:44 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t clear queue stats when preempt.\n\nFor v2, I added back lines to cfq_preempt_queue() that were removed\nduring updates for accounting unaccounted_time. Thanks for pointing out\nthat I\u0027d missed these, Vivek.\n\nPrevious commit \"cfq-iosched: Don\u0027t set active queue in preempt\" wrongly\ncleared stats for preempting queues when it shouldn\u0027t have, because when\nwe choose a queue to preempt, it still isn\u0027t necessarily scheduled next.\n\nThanks to Vivek Goyal for figuring this out and understanding how the\npreemption code works.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "04521db04e9a11e74b0252d222051cb194487f4d",
      "tree": "4a07811529a16f9e25c4de44ef0bf2621d360249",
      "parents": [
        "9026e521c0da0731eb31f9f9022dd00cc3cd8885"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Mar 22 21:54:29 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:55:00 2011 +0100"
      },
      "message": "blk-throttle: Reset group slice when limits are changed\n\nLina reported that if throttle limits are initially very high and then\ndropped, then no new bio might be dispatched for a long time. And the\nreason being that after dropping the limits we don\u0027t reset the existing\nslice and do the rate calculation with new low rate and account the bios\ndispatched at high rate. To fix it, reset the slice upon rate change.\n\nhttps://lkml.org/lkml/2011/3/10/298\n\nAnother problem with very high limit is that we never queued the\nbio on throtl service tree. That means we kept on extending the\ngroup slice but never trimmed it. Fix that also by regulary\ntrimming the slice even if bio is not being queued up.\n\nReported-by: Lina Lu \u003clulina_nuaa@foxmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9026e521c0da0731eb31f9f9022dd00cc3cd8885",
      "tree": "b2e9f44d22d009efcac6bf4a25a620017ac903a0",
      "parents": [
        "eda5e0c91fed2d2a38a341b0957263406d330274"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 22 21:26:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:26:54 2011 +0100"
      },
      "message": "blk-cgroup: Only give unaccounted_time under debug\n\nThis change moves unaccounted_time to only be reported when\nCONFIG_DEBUG_BLK_CGROUP is true.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "eda5e0c91fed2d2a38a341b0957263406d330274",
      "tree": "d09564b4ef18dc8f9703a3d67def655b24b992c8",
      "parents": [
        "1e9bb8808ac11094d711d20d580e7b45a4992d0c"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 22 21:26:49 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:26:49 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t set active queue in preempt\n\nCommit \"Add unaccounted time to timeslice_used\" changed the behavior of\ncfq_preempt_queue to set cfqq active. Vivek pointed out that other\npreemption rules might get involved, so we shouldn\u0027t manually set which\nqueue is active.\n\nThis cleans up the code to just clear the queue stats at preemption\ntime.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5e84ea3a9c662dc2d7a48703a4468fad954a3b7f",
      "tree": "3fa0fb26a7c8a970213584104cc2498ef46d60a3",
      "parents": [
        "4345caba340f051e10847924fc078ae18ed6695c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 21 10:14:27 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 21 10:14:27 2011 +0100"
      },
      "message": "block: attempt to merge with existing requests on plug flush\n\nOne of the disadvantages of on-stack plugging is that we potentially\nlose out on merging since all pending IO isn\u0027t always visible to\neverybody. When we flush the on-stack plugs, right now we don\u0027t do\nany checks to see if potential merge candidates could be utilized.\n\nCorrect this by adding a new insert variant, ELEVATOR_INSERT_SORT_MERGE.\nIt works just ELEVATOR_INSERT_SORT, but first checks whether we can\nmerge with an existing request before doing the insertion (if we fail\nmerging).\n\nThis fixes a regression with multiple processes issuing IO that\ncan be merged.\n\nThanks to Shaohua Li \u003cshaohua.li@intel.com\u003e for testing and fixing\nan accounting bug.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c55d267de274d308927b60c3e740c1a826832317",
      "tree": "21b53a8c725d9f9650f60d94b349459d5b8dae10",
      "parents": [
        "61ef46fd45c3c62dc7c880a45dd2aa841b9af8fb",
        "bc898c97f7ba24def788d9f80786cf028a197122"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 17:54:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 17:54:40 2011 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (170 commits)\n  [SCSI] scsi_dh_rdac: Add MD36xxf into device list\n  [SCSI] scsi_debug: add consecutive medium errors\n  [SCSI] libsas: fix ata list corruption issue\n  [SCSI] hpsa: export resettable host attribute\n  [SCSI] hpsa: move device attributes to avoid forward declarations\n  [SCSI] scsi_debug: Logical Block Provisioning (SBC3r26)\n  [SCSI] sd: Logical Block Provisioning update\n  [SCSI] Include protection operation in SCSI command trace\n  [SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try)\n  [SCSI] target: Fix volume size misreporting for volumes \u003e 2TB\n  [SCSI] bnx2fc: Broadcom FCoE offload driver\n  [SCSI] fcoe: fix broken fcoe interface reset\n  [SCSI] fcoe: precedence bug in fcoe_filter_frames()\n  [SCSI] libfcoe: Remove stale fcoe-netdev entries\n  [SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h\n  [SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument\n  [SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs\n  [SCSI] Revert \"[SCSI] libfc: fix exchange being deleted when the abort itself is timed out\"\n  [SCSI] libfc: Fixing a memory leak when destroying an interface\n  [SCSI] megaraid_sas: Version and Changelog update\n  ...\n\nFix up trivial conflicts due to whitespace differences in\ndrivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}\n"
    },
    {
      "commit": "8184f93eced1e304721c2a55c00d87d5a14f8907",
      "tree": "b5ed43533eee883bc25920c191cb095584d29822",
      "parents": [
        "95f28604a65b1c40b6c6cd95e58439cd7ded3add"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Thu Mar 17 16:12:36 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 17 16:12:36 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t update group weights when on service tree\n\nVersion 3 is updated to apply to for-2.6.39/core.\n\nFor version 2, I took Vivek\u0027s advice and made sure we update the group\nweight from cfq_group_service_tree_add().\n\nIf a weight was updated while a group is on the service tree, the\ncalculation for the total weight of the service tree can be adjusted\nimproperly, which either leads to bad service tree weights, or\npotentially crashes (if total_weight becomes 0).\n\nThis patch defers updates to the weight until a group is off the service\ntree.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "167400d34070ebbc408dc0f447c4ddb4bf837360",
      "tree": "19100b0511a7e3e18f6f61d90a5fe5f1c40f59c4",
      "parents": [
        "1f940bdfc0d03265d178d9dfd840d854819f797d"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Sat Mar 12 16:54:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Mar 12 16:54:00 2011 +0100"
      },
      "message": "blk-cgroup: Add unaccounted time to timeslice_used.\n\nThere are two kind of times that tasks are not charged for: the first\nseek and the extra time slice used over the allocated timeslice. Both\nof these exported as a new unaccounted_time stat.\n\nI think it would be good to have this reported in \u0027time\u0027 as well, but\nthat is probably a separate discussion.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "eba2ed9c9636d9e7ed203a2498ed230b48341709",
      "tree": "c989fdc098b09947888f67badbfeecb1e04cd1fc",
      "parents": [
        "805f6b5e1cbfedfb9b3d354013e7f4b13a79270f"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Fri Mar 11 20:13:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 20:13:54 2011 +0100"
      },
      "message": "block: remove obsolete comments for blkdev_issue_zeroout.\n\nbarrier is already removed, so remove the obsolete comments\nin blkdev_issue_zeroout.\n\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0aeea18964173715a1037034ef6838198f319319",
      "tree": "62ff402a41a675f0269bf5172d14b7db8c4e47ee",
      "parents": [
        "9179746652faf0aba07b8b7f770dcf29892a24c6"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri Mar 11 10:23:53 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 15:36:08 2011 +0100"
      },
      "message": "block: fix mis-synchronisation in blkdev_issue_zeroout()\n\nBZ29402\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d29402\n\nWe can hit serious mis-synchronization in bio completion path of\nblkdev_issue_zeroout() leading to a panic.\n\nThe problem is that when we are going to wait_for_completion() in\nblkdev_issue_zeroout() we check if the bb.done equals issued (number of\nsubmitted bios). If it does, we can skip the wait_for_completition()\nand just out of the function since there is nothing to wait for.\nHowever, there is a ordering problem because bio_batch_end_io() is\ncalling atomic_inc(\u0026bb-\u003edone) before complete(), hence it might seem to\nblkdev_issue_zeroout() that all bios has been completed and exit. At\nthis point when bio_batch_end_io() is going to call complete(bb-\u003ewait),\nbb and wait does not longer exist since it was allocated on stack in\nblkdev_issue_zeroout() \u003d\u003d\u003e panic!\n\n(thread 1)                      (thread 2)\nbio_batch_end_io()              blkdev_issue_zeroout()\n  if(bb) {                      ...\n    if (bb-\u003eend_io)             ...\n      bb-\u003eend_io(bio, err);     ...\n    atomic_inc(\u0026bb-\u003edone);      ...\n    ...                         while (issued !\u003d atomic_read(\u0026bb.done))\n    ...                         (let issued \u003d\u003d bb.done)\n    ...                         (do the rest of the function)\n    ...                         return ret;\n    complete(bb-\u003ewait);\n    ^^^^^^^^\n    panic\n\nWe can fix this easily by simplifying bio_batch and completion counting.\n\nAlso remove bio_end_io_t *end_io since it is not used.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nReported-by: Eric Whitney \u003ceric.whitney@hp.com\u003e\nTested-by: Eric Whitney \u003ceric.whitney@hp.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCC: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "69d60eb96ae8a73cf9b79cf28051caf973006011",
      "tree": "254be7302abbd6a21d4f54cfdad6a0af6db282d0",
      "parents": [
        "721a9602e6607417c6bc15b18e97a2f35266c690"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Mar 09 08:27:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:27 2011 +0100"
      },
      "message": "blk-throttle: Use blk_plug in throttle dispatch\n\nUse plug in throttle dispatch also as we are dispatching a bunch of\nbios in throttle context and some of them might merge.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "721a9602e6607417c6bc15b18e97a2f35266c690",
      "tree": "4987991e43f35b8b3b685fea0040c5265b578996",
      "parents": [
        "cf15900e1209d5b46ec2d24643adbf561830935f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 09 11:56:30 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:27 2011 +0100"
      },
      "message": "block: kill off REQ_UNPLUG\n\nWith the plugging now being explicitly controlled by the\nsubmitter, callers need not pass down unplugging hints\nto the block layer. If they want to unplug, it\u0027s because they\nmanually plugged on their own - in which case, they should just\nunplug at will.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "73c101011926c5832e6e141682180c4debe2cf45",
      "tree": "b8eeb521a7833cb198d6f39d5a931d820e2a663f",
      "parents": [
        "a488e74976bf0a9bccecdd094378394942dacef1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 08 13:19:51 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:45:54 2011 +0100"
      },
      "message": "block: initial patch for on-stack per-task plugging\n\nThis patch adds support for creating a queuing context outside\nof the queue itself. This enables us to batch up pieces of IO\nbefore grabbing the block device queue lock and submitting them to\nthe IO scheduler.\n\nThe context is created on the stack of the process and assigned in\nthe task structure, so that we can auto-unplug it if we hit a schedule\nevent.\n\nThe current queue plugging happens implicitly if IO is submitted to\nan empty device, yet callers have to remember to unplug that IO when\nthey are going to wait for it. This is an ugly API and has caused bugs\nin the past. Additionally, it requires hacks in the vm (-\u003esync_page()\ncallback) to handle that logic. By switching to an explicit plugging\nscheme we make the API a lot nicer and can get rid of the -\u003esync_page()\nhack in the vm.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3cca6dc1c81e2407928dc4c6105252146fd3924f",
      "tree": "b78b0d93e7c02abdc37e1d5a6204ab6b94d56fd4",
      "parents": [
        "53f22956effe1c9e7961b8c6e4362ecca5e460b7"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 11:08:00 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:45:54 2011 +0100"
      },
      "message": "block: add API for delaying work/request_fn a little bit\n\nCurrently we use plugging for that, but as plugging is going away,\nwe need an alternative mechanism.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "facc31ddc3570a3a0d8951c94f16b898e01b464d",
      "tree": "23b8294910c26cabb4335a418b7ca27e52eaaaa8",
      "parents": [
        "df457f845e5449be2e7d96668791f789b3770ac7"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 09 19:54:27 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 09 19:54:27 2011 +0100"
      },
      "message": "block: Don\u0027t implicitly trigger event check on disk_unblock_events()\n\nCurrently, disk_unblock_events() implicitly kick event check if the\nblock count reaches zero.  This behavior is not described in the\ncomment and hinders with future changes.  Make the unblocker\nexplicitly check events by calling disk_check_events() as necessary.\n\nThis patch doesn\u0027t cause any behavior difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\n"
    },
    {
      "commit": "df457f845e5449be2e7d96668791f789b3770ac7",
      "tree": "5279d8ad1379ab890a90453d5018bb473c90d7d5",
      "parents": [
        "df677140281beb608f6748c341af7612f7bfe7a0"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Mar 08 19:45:00 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 08 19:45:00 2011 +0100"
      },
      "message": "blk-cgroup: Lower minimum weight from 100 to 10.\n\nWe\u0027ve found that we still get good, useful isolation at weights this\nlow. I\u0027d like to adjust the minimum so that any other changes can take\nthese values into account.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "de701c74a34005e637e1ca2634fbf28fd1debba2",
      "tree": "45a4af16e2a76cbf5866cfb3f284956988918a13",
      "parents": [
        "231d704b4ab7491473c0b1a9cd0c6e0d1cba85b9"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 07 21:09:32 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 21:09:32 2011 +0100"
      },
      "message": "blk-throttle: Some cleanups and race fixes in limit  update code\n\nWhen throttle group limits are updated through cgroups, a thread is\nwoken up to process these updates. While reviewing that code, oleg noted\ncouple of race conditions existed in the code and he also suggested that\ncode can be simplified.\n\nThis patch fixes the races simplifies the code based on Oleg\u0027s suggestions:\n\n\t- Use xchg().\n\t- Introduced a common function throtl_update_blkio_group_common()\n          which is shared now by all iops/bps update functions.\n\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n\nFixed a merge issue, throtl_schedule_delayed_work() takes throtl_data\nas the argument now, not the queue.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "231d704b4ab7491473c0b1a9cd0c6e0d1cba85b9",
      "tree": "a4666d35b6e11f92eb0fc4506bdd7f65185a7aa6",
      "parents": [
        "b873c5d692d4d5453cceed18bb06c62bb1a73ac0"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 07 21:05:14 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 21:05:14 2011 +0100"
      },
      "message": "blk-throttle: process limit change only through one function\n\nWith the help of cgroup interface one can go and upate the bps/iops\nlimits of existing group. Once the limits are udpated, a thread is\nwoken up to see if some blocked group needs recalculation based on new\nlimits and needs to be requeued.\n\nThere was also a piece of code where I was checking for group limit\nupdate when a fresh bio comes in. This patch gets rid of that piece of\ncode and keeps processing the limit change at one place\nthrotl_process_limit_change().  It just keeps the code simple and easy\nto understand.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b873c5d692d4d5453cceed18bb06c62bb1a73ac0",
      "tree": "f9d5816bc26ced37f187a141ee6c74c7b8e00fcf",
      "parents": [
        "a60327107b56573c305ecc78e471dbdbb4d2f426",
        "e83a46bbb1d4c03defd733a64b727632a40059ad"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:40:21 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 09:40:21 2011 +0100"
      },
      "message": "Merge branch \u0027block-for-2.6.39-core\u0027 of ssh://master.kernel.org/pub/scm/linux/kernel/git/tj/misc into for-2.6.39/core\n"
    }
  ],
  "next": "a60327107b56573c305ecc78e471dbdbb4d2f426"
}
