)]}'
{
  "log": [
    {
      "commit": "3c9c708c9fc967e389f85bc735e4c1f65d67334e",
      "tree": "946eeefd4599bb1adafd87ad8f46d52382935001",
      "parents": [
        "b77874c9699522540e65aa4291e37a7e43533bf3"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "edumazet@google.com",
        "time": "Thu May 31 13:39:05 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu May 31 13:39:05 2012 +0200"
      },
      "message": "block: avoid infinite loop in get_task_io_context()\n\nCalling get_task_io_context() on a exiting task which isn\u0027t %current can\nloop forever. This triggers at boot time on my dev machine.\n\nBUG: soft lockup - CPU#3 stuck for 22s ! [mountall.1603]\n\nFix this by making create_task_io_context() returns -EBUSY in this case\nto break the loop.\n\nSigned-off-by: Eric Dumazet \u003cedumazet@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Alan Cox \u003calan@linux.intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "959d851caa48829eb85cb85aa949fd6b4c5d5bc6",
      "tree": "3ba9c94ec346275fb44c4f0d1cd2537cdff8d811",
      "parents": [
        "a5567932fc926739e29e98487128080f40c61710",
        "48ddbe194623ae089cc0576e60363f2d2e85662a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:30:01 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:55:00 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.5\u0027 of ../cgroup into block/for-3.5/core-merged\n\ncgroup/for-3.5 contains the following changes which blk-cgroup needs\nto proceed with the on-going cleanup.\n\n* Dynamic addition and removal of cftypes to make config/stat file\n  handling modular for policies.\n\n* cgroup removal update to not wait for css references to drain to fix\n  blkcg removal hang caused by cfq caching cfqgs.\n\nPull in cgroup/for-3.5 into block/for-3.5/core.  This causes the\nfollowing conflicts in block/blk-cgroup.c.\n\n* 761b3ef50e \"cgroup: remove cgroup_subsys argument from callbacks\"\n  conflicts with blkiocg_pre_destroy() addition and blkiocg_attach()\n  removal.  Resolved by removing @subsys from all subsys methods.\n\n* 676f7c8f84 \"cgroup: relocate cftype and cgroup_subsys definitions in\n  controllers\" conflicts with -\u003epre_destroy() and -\u003eattach() updates\n  and removal of modular config.  Resolved by dropping forward\n  declarations of the methods and applying updates to the relocated\n  blkio_subsys.\n\n* 4baf6e3325 \"cgroup: convert all non-memcg controllers to the new\n  cftype interface\" builds upon the previous item.  Resolved by adding\n  -\u003ebase_cftypes to the relocated blkio_subsys.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "2b566fa55b9a94b53217c2818e6c5e5756eeb1a1",
      "tree": "d2186ebd18062172a7b0c83e31ca834f44ecdcc0",
      "parents": [
        "598971bfbdfdc8701337dc1636c7919c44699914"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 19 15:10:59 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:47:48 2012 +0100"
      },
      "message": "block: remove ioc_*_changed()\n\nAfter the previous patch to cfq, there\u0027s no ioc_get_changed() user\nleft.  This patch yanks out ioc_{ioprio|cgroup|get}_changed() and all\nrelated stuff.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "ff8c1474cc2f5e11414c71ec4d739c18e6e669c0",
      "tree": "d498e6e97243a25d20100b9c5a1cee8c73920fb7",
      "parents": [
        "ea5f4db8ece896c2ab9eafa0924148a2596c52e4"
      ],
      "author": {
        "name": "Xiaotian Feng",
        "email": "xtfeng@gmail.com",
        "time": "Wed Mar 14 15:34:48 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Mar 14 15:34:48 2012 +0100"
      },
      "message": "block: fix ioc leak in put_io_context\n\nWhen put_io_context is called, if ioc-\u003eicq_list is empty and refcount\nis 1, kernel will not free the ioc.\n\nThis is caught by following kmemleak:\n\nunreferenced object 0xffff880036349fe0 (size 216):\n  comm \"sh\", pid 2137, jiffies 4294931140 (age 290579.412s)\n  hex dump (first 32 bytes):\n    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................\n    01 00 01 00 ad 4e ad de ff ff ff ff 00 00 00 00  .....N..........\n  backtrace:\n    [\u003cffffffff8169f926\u003e] kmemleak_alloc+0x26/0x50\n    [\u003cffffffff81195a9c\u003e] kmem_cache_alloc_node+0x1cc/0x2a0\n    [\u003cffffffff81356b67\u003e] create_io_context_slowpath+0x27/0x130\n    [\u003cffffffff81356d2b\u003e] get_task_io_context+0xbb/0xf0\n    [\u003cffffffff81055f0e\u003e] copy_process+0x188e/0x18b0\n    [\u003cffffffff8105609b\u003e] do_fork+0x11b/0x420\n    [\u003cffffffff810247f8\u003e] sys_clone+0x28/0x30\n    [\u003cffffffff816d3373\u003e] stub_clone+0x13/0x20\n    [\u003cffffffffffffffff\u003e] 0xffffffffffffffff\n\nioc should be freed if ioc-\u003eicq_list is empty.\nSigned-off-by: Xiaotian Feng \u003cdannyfeng@tencent.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f6e8d01bee036460e03bd4f6a79d014f98ba712e",
      "tree": "acaaab3667e0450f0f05464426c3540c89ce4e18",
      "parents": [
        "3d48749d93a3dce732dd30a14002ab90ec4355f3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:26 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: add io_context-\u003eactive_ref\n\nCurrently ioc-\u003enr_tasks is used to decide two things - whether an ioc\nis done issuing IOs and whether it\u0027s shared by multiple tasks.  This\npatch separate out the first into ioc-\u003eactive_ref, which is acquired\nand released using {get|put}_io_context_active() respectively.\n\nThis will be used to associate bio\u0027s with a given task.  This patch\ndoesn\u0027t introduce any visible behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "24acfc34fba0b4f62ef9d5c2616eb0faa802b606",
      "tree": "42d07b0e4ad922b24853fe542cb9ab543aa8174c",
      "parents": [
        "b679281a6410676a41b175c5a185150a1ae42f9d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:24 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: interface update for ioc/icq creation functions\n\nMake the following interface updates to prepare for future ioc related\nchanges.\n\n* create_io_context() returning ioc only works for %current because it\n  doesn\u0027t increment ref on the ioc.  Drop @task parameter from it and\n  always assume %current.\n\n* Make create_io_context_slowpath() return 0 or -errno and rename it\n  to create_task_io_context().\n\n* Make ioc_create_icq() take @ioc as parameter instead of assuming\n  that of %current.  The caller, get_request(), is updated to create\n  ioc explicitly and then pass it into ioc_create_icq().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "621032ad6eaabf2fe771c4fa0d8f58e1fcfcdba6",
      "tree": "903f4b1ae7dc9aa4f0538b606b1c7deb1542e704",
      "parents": [
        "2274b029f640cd652ab59c363e5beebf5f50e609"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 15 09:45:53 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 15 09:45:53 2012 +0100"
      },
      "message": "block: exit_io_context() should call elevator_exit_icq_fn()\n\nWhile updating locking, b2efa05265 \"block, cfq: unlink\ncfq_io_context\u0027s immediately\" moved elevator_exit_icq_fn() invocation\nfrom exit_io_context() to the final ioc put.  While this doesn\u0027t cause\ncatastrophic failure, it effectively removes task exit notification to\nelevator and cause noticeable IO performance degradation with CFQ.\n\nOn task exit, CFQ used to immediately expire the slice if it was being\nused by the exiting task as no more IO would be issued by the task;\nhowever, after b2efa05265, the notification is lost and disk could sit\nidle needlessly, leading to noticeable IO performance degradation for\ncertain workloads.\n\nThis patch renames ioc_exit_icq() to ioc_destroy_icq(), separates\nelevator_exit_icq_fn() invocation into ioc_exit_icq() and invokes it\nfrom exit_io_context().  ICQ_EXITED flag is added to avoid invoking\nthe callback more than once for the same icq.\n\nWalking icq_list from ioc side and invoking elevator callback requires\nreverse double locking.  This may be better implemented using RCU;\nunfortunately, using RCU isn\u0027t trivial.  e.g. RCU protection would\nneed to cover request_queue and queue_lock switch on cleanup makes\ngrabbing queue_lock from RCU unsafe.  Reverse double locking should\ndo, at least for now.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-and-bisected-by: Shaohua Li \u003cshli@kernel.org\u003e\nLKML-Reference: \u003cCANejiEVzs\u003dpUhQSTvUppkDcc2TNZyfohBRLygW5zFmXyk5A-xQ@mail.gmail.com\u003e\nTested-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "2274b029f640cd652ab59c363e5beebf5f50e609",
      "tree": "652a2e774c537b83cd70481a936f5c7485436491",
      "parents": [
        "d705ae6b133f9f6a8beee617b1224b6a5c99c5da"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 15 09:45:52 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 15 09:45:52 2012 +0100"
      },
      "message": "block: simplify ioc_release_fn()\n\nReverse double lock dancing in ioc_release_fn() can be simplified by\njust using trylock on the queue_lock and back out from ioc lock on\ntrylock failure.  Simplify it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nTested-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "d705ae6b133f9f6a8beee617b1224b6a5c99c5da",
      "tree": "b1a0b09ae01f8385e66c021c338106b88e8d23f8",
      "parents": [
        "7ada1dd62804ca9ce1cb8666c6e563cd92fa50c1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 15 09:45:49 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 15 09:45:49 2012 +0100"
      },
      "message": "block: replace icq-\u003echanged with icq-\u003eflags\n\nicq-\u003echanged was used for ICQ_*_CHANGED bits.  Rename it to flags and\naccess it under ioc-\u003elock instead of using atomic bitops.\nioc_get_changed() is added so that the changed part can be fetched and\ncleared as before.\n\nicq-\u003eflags will be used to carry other flags.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nTested-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "d8c66c5d59247e25a69428aced0b79d33b9c66d6",
      "tree": "1aed7dc560df36157d8cde6fdebc1d86f4ed61ad",
      "parents": [
        "f6302f1bcd75a042df69866d98b8d775a668f8f1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 11 12:37:25 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sat Feb 11 12:37:25 2012 +0100"
      },
      "message": "block: fix lockdep warning on io_context release put_io_context()\n\n11a3122f6c \"block: strip out locking optimization in put_io_context()\"\nremoved ioc_lock depth lockdep annoation along with locking\noptimization; however, while recursing from put_io_context() is no\nlonger possible, ioc_release_fn() may still end up putting the last\nreference of another ioc through elevator, which wlil grab ioc-\u003elock\ntriggering spurious (as the ioc is always different one) A-A deadlock\nwarning.\n\nAs this can only happen one time from ioc_release_fn(), using non-zero\nsubclass from ioc_release_fn() is enough.  Use subclass 1.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "11a3122f6cf2d988a77eb8883d0fc49cd013a6d5",
      "tree": "ded8ea8a2982754ff0c58448a7ed2e59487104cb",
      "parents": [
        "822bfa51ce44f2c63c300fdb76dc99c4d5a5ca9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "message": "block: strip out locking optimization in put_io_context()\n\nput_io_context() performed a complex trylock dancing to avoid\ndeferring ioc release to workqueue.  It was also broken on UP because\ntrylock was always assumed to succeed which resulted in unbalanced\npreemption count.\n\nWhile there are ways to fix the UP breakage, even the most\npathological microbench (forced ioc allocation and tight fork/exit\nloop) fails to show any appreciable performance benefit of the\noptimization.  Strip it out.  If there turns out to be workloads which\nare affected by this change, simpler optimization from the discussion\nthread can be applied later.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c1328514611.21268.66.camel@sli10-conroe\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9fa73472ddbcd3da87d35a7f4566eaaf345f798e",
      "tree": "6564619c63104411c1370249029f2389510790c6",
      "parents": [
        "05c30b9551f1904d9950ad0d28e65fc4ff3c8a8e"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Feb 06 08:57:29 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Feb 06 08:57:29 2012 +0100"
      },
      "message": "block: fix ioc locking warning\n\nMeelis reported a warning:\n\nWARNING: at kernel/timer.c:1122 run_timer_softirq+0x199/0x1ec()\nHardware name: 939Dual-SATA2\ntimer: cfq_idle_slice_timer+0x0/0xaa preempt leak: 00000102 -\u003e 00000103\nModules linked in: sr_mod cdrom videodev media drm_kms_helper ohci_hcd ehci_hcd v4l2_compat_ioctl32 usbcore i2c_ali15x3 snd_seq drm snd_timer snd_seq\nPid: 0, comm: swapper Not tainted 3.3.0-rc2-00110-gd125666 #176\nCall Trace:\n \u003cIRQ\u003e  [\u003cffffffff81022aaa\u003e] warn_slowpath_common+0x7e/0x96\n [\u003cffffffff8114c485\u003e] ? cfq_slice_expired+0x1d/0x1d\n [\u003cffffffff81022b56\u003e] warn_slowpath_fmt+0x41/0x43\n [\u003cffffffff8114c526\u003e] ? cfq_idle_slice_timer+0xa1/0xaa\n [\u003cffffffff8114c485\u003e] ? cfq_slice_expired+0x1d/0x1d\n [\u003cffffffff8102c124\u003e] run_timer_softirq+0x199/0x1ec\n [\u003cffffffff81047a53\u003e] ? timekeeping_get_ns+0x12/0x31\n [\u003cffffffff810145fd\u003e] ? apic_write+0x11/0x13\n [\u003cffffffff81027475\u003e] __do_softirq+0x74/0xfa\n [\u003cffffffff812f337a\u003e] call_softirq+0x1a/0x30\n [\u003cffffffff81002ff9\u003e] do_softirq+0x31/0x68\n [\u003cffffffff810276cf\u003e] irq_exit+0x3d/0xa3\n [\u003cffffffff81014aca\u003e] smp_apic_timer_interrupt+0x6b/0x77\n [\u003cffffffff812f2de9\u003e] apic_timer_interrupt+0x69/0x70\n \u003cEOI\u003e  [\u003cffffffff81040136\u003e] ? sched_clock_cpu+0x73/0x7d\n [\u003cffffffff81040136\u003e] ? sched_clock_cpu+0x73/0x7d\n [\u003cffffffff8100801f\u003e] ? default_idle+0x1e/0x32\n [\u003cffffffff81008019\u003e] ? default_idle+0x18/0x32\n [\u003cffffffff810008b1\u003e] cpu_idle+0x87/0xd1\n [\u003cffffffff812de861\u003e] rest_init+0x85/0x89\n [\u003cffffffff81659a4d\u003e] start_kernel+0x2eb/0x2f8\n [\u003cffffffff8165926e\u003e] x86_64_start_reservations+0x7e/0x82\n [\u003cffffffff81659362\u003e] x86_64_start_kernel+0xf0/0xf7\n\nthis_q \u003d\u003d locked_q is possible. There are two problems here:\n1. In UP case, there is preemption counter issue as spin_trylock always\nsuccesses.\n2. In SMP case, the loop breaks too earlier.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReported-by: Meelis Roos \u003cmroos@linux.ee\u003e\nReported-by: Knut Petersen \u003cKnut_Petersen@t-online.de\u003e\nTested-by: Knut Petersen \u003cKnut_Petersen@t-online.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c98b2cc29af8e84e7364b53e9bb4cc7cfaf62555",
      "tree": "ed6e9642bb32fe53f5c036c66df4b6692228d0a9",
      "parents": [
        "fd63836811d6e5b5f5f608abf865bc9e91762c8c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Dec 27 18:52:16 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Dec 27 18:52:16 2011 +0100"
      },
      "message": "block: remove WARN_ON_ONCE() in exit_io_context()\n\n6e736be7 \"block: make ioc get/put interface more conventional and fix\nrace on alloction\" added WARN_ON_ONCE() in exit_io_context() which\ntriggers if !PF_EXITING.  All tasks hitting exit_io_context() from\ntask exit should have PF_EXITING set but task struct tearing down\nafter fork failure calls into the function without PF_EXITING,\ntriggering the condition.\n\n  WARNING: at block/blk-ioc.c:234 exit_io_context+0x40/0x92()\n  Pid: 17090, comm: trinity Not tainted 3.2.0-rc6-next-20111222-sasha-dirty #77\n  Call Trace:\n   [\u003cffffffff810b69a3\u003e] warn_slowpath_common+0x8f/0xb2\n   [\u003cffffffff810b6a77\u003e] warn_slowpath_null+0x18/0x1a\n   [\u003cffffffff8181a7a2\u003e] exit_io_context+0x40/0x92\n   [\u003cffffffff810b58c9\u003e] copy_process+0x126f/0x1453\n   [\u003cffffffff810b5c1b\u003e] do_fork+0x120/0x3e9\n   [\u003cffffffff8106242f\u003e] sys_clone+0x26/0x28\n   [\u003cffffffff82425803\u003e] stub_clone+0x13/0x20\n  ---[ end trace a2e4eb670b375238 ]---\n\nReported-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "fd63836811d6e5b5f5f608abf865bc9e91762c8c",
      "tree": "9262ccdc0319b331c497701a851c8c5752dedb00",
      "parents": [
        "64c42998f14d5894ea3138625897d620b30c8e4e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Dec 25 14:29:14 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sun Dec 25 14:29:14 2011 +0100"
      },
      "message": "block: an exiting task should be allowed to create io_context\n\nWhile fixing io_context creation / task exit race condition,\n6e736be7f2 \"block: make ioc get/put interface more conventional and\nfix race on alloction\" also prevented an exiting (%PF_EXITING) task\nfrom creating its own io_context.  This is incorrect as exit path may\nissue IOs, e.g. from exit_files(), and if those IOs are the first ones\nissued by the task, io_context needs to be created to process the IOs.\n\nCombined with the existing problem of io_context / io_cq creation\nfailure having the possibility of stalling IO, this problem results in\ndeterministic full IO lockup with certain workloads.\n\nFix it by allowing io_context creation regardless of %PF_EXITING for\n%current.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "64c42998f14d5894ea3138625897d620b30c8e4e",
      "tree": "10a7f02d30f6f70f02f8e9db6f93aae41edc85f8",
      "parents": [
        "274193224cdabd687d804a26e0150bb20f2dd52c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Dec 19 10:36:44 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Dec 19 10:36:44 2011 +0100"
      },
      "message": "block: ioc_cgroup_changed() needs to be exported\n\nWith the ioc changed, ioc_cgroup_changed() can be used by modular\ncode. So ensure that it is exported.\n\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f1f8cc94651738b418ba54c039df536303b91704",
      "tree": "eb8bc5a33dec104ab32a935a5bb1e1da2e7cdd34",
      "parents": [
        "9b84cacd013996f244d85b3d873287c2a8f88658"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move icq creation and rq-\u003eelv.icq association to block core\n\nNow block layer knows everything necessary to create and associate\nicq\u0027s with requests.  Move ioc_create_icq() to blk-ioc.c and update\nget_request() such that, if elevator_type-\u003eicq_size is set, requests\nare automatically associated with their matching icq\u0027s before\nelv_set_request().  io_context reference is also managed by block core\non request alloc/free.\n\n* Only ioprio/cgroup changed handling remains from cfq_get_cic().\n  Collapsed into cfq_set_request().\n\n* This removes queue kicking on icq allocation failure (for now).  As\n  icq allocation failure is rare and the only effect of queue kicking\n  achieved was possibily accelerating queue processing, this change\n  shouldn\u0027t be noticeable.\n\n  There is a larger underlying problem.  Unlike request allocation,\n  icq allocation is not guaranteed to succeed eventually after\n  retries.  The number of icq is unbound and thus mempool can\u0027t be the\n  solution either.  This effectively adds allocation dependency on\n  memory free path and thus possibility of deadlock.\n\n  This usually wouldn\u0027t happen because icq allocation is not a hot\n  path and, even when the condition triggers, it\u0027s highly unlikely\n  that none of the writeback workers already has icq.\n\n  However, this is still possible especially if elevator is being\n  switched under high memory pressure, so we better get it fixed.\n  Probably the only solution is just bypassing elevator and appending\n  to dispatch queue on any elevator allocation failure.\n\n* Comment added to explain how icq\u0027s are managed and synchronized.\n\nThis completes cleanup of io_context interface.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "7e5a8794492e43e9eebb68a98a23be055888ccd0",
      "tree": "cc049a23b2c994f910d3101860bc1c2ecb7aa35f",
      "parents": [
        "3d3c2379feb177a5fd55bb0ed76776dc9d4f3243"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move io_cq exit/release to blk-ioc.c\n\nWith kmem_cache managed by blk-ioc, io_cq exit/release can be moved to\nblk-ioc too.  The odd -\u003eio_cq-\u003eexit/release() callbacks are replaced\nwith elevator_ops-\u003eelevator_exit_icq_fn() with unlinking from both ioc\nand q, and freeing automatically handled by blk-ioc.  The elevator\noperation only need to perform exit operation specific to the elevator\n- in cfq\u0027s case, exiting the cfqq\u0027s.\n\nAlso, clearing of io_cq\u0027s on q detach is moved to block core and\nautomatically performed on elevator switch and q release.\n\nBecause the q io_cq points to might be freed before RCU callback for\nthe io_cq runs, blk-ioc code should remember to which cache the io_cq\nneeds to be freed when the io_cq is released.  New field\nio_cq-\u003e__rcu_icq_cache is added for this purpose.  As both the new\nfield and rcu_head are used only after io_cq is released and the\nq/ioc_node fields aren\u0027t, they are put into unions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "47fdd4ca96bf4b28ac4d05d7a6e382df31d3d758",
      "tree": "bcb928575b66511345b00102a7e8cace84526e3e",
      "parents": [
        "a612fddf0d8090f2877305c9168b6c1a34fb5d90"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move io_cq lookup to blk-ioc.c\n\nNow that all io_cq related data structures are in block core layer,\nio_cq lookup can be moved from cfq-iosched.c to blk-ioc.c.\n\nLookup logic from cfq_cic_lookup() is moved to ioc_lookup_icq() with\nparameter return type changes (cfqd -\u003e request_queue, cfq_io_cq -\u003e\nio_cq) and cfq_cic_lookup() becomes thin wrapper around\ncfq_cic_lookup().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c58698073218f2c8f2fc5982fa3938c2d3803b9f",
      "tree": "ccd2403fd8674051a062efd2c22e6fdd179b7b8f",
      "parents": [
        "22f746e235a5cbee2a6ca9887b1be2aa7d31fe71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: reorganize cfq_io_context into generic and cfq specific parts\n\nCurrently io_context and cfq logics are mixed without clear boundary.\nMost of io_context is independent from cfq but cfq_io_context handling\nlogic is dispersed between generic ioc code and cfq.\n\ncfq_io_context represents association between an io_context and a\nrequest_queue, which is a concept useful outside of cfq, but it also\ncontains fields which are useful only to cfq.\n\nThis patch takes out generic part and put it into io_cq (io\ncontext-queue) and the rest into cfq_io_cq (cic moniker remains the\nsame) which contains io_cq.  The following changes are made together.\n\n* cfq_ttime and cfq_io_cq now live in cfq-iosched.c.\n\n* All related fields, functions and constants are renamed accordingly.\n\n* ioc-\u003eioc_data is now \"struct io_cq *\" instead of \"void *\" and\n  renamed to icq_hint.\n\nThis prepares for io_context API cleanup.  Documentation is currently\nsparse.  It will be added later.\n\nChanges in this patch are mechanical and don\u0027t cause functional\nchange.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f2dbd76a0a994bc1d5a3d0e7c844cc373832e86c",
      "tree": "cae6a4333ee6e5eb76ef133dfdee95e1943c0ab1",
      "parents": [
        "1238033c79e92e5c315af12e45396f1a78c73dec"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "message": "block, cfq: replace current_io_context() with create_io_context()\n\nWhen called under queue_lock, current_io_context() triggers lockdep\nwarning if it hits allocation path.  This is because io_context\ninstallation is protected by task_lock which is not IRQ safe, so it\ntriggers irq-unsafe-lock -\u003e irq -\u003e irq-safe-lock -\u003e irq-unsafe-lock\ndeadlock warning.\n\nGiven the restriction, accessor + creator rolled into one doesn\u0027t work\ntoo well.  Drop current_io_context() and let the users access\ntask-\u003eio_context directly inside queue_lock combined with explicit\ncreation using create_io_context().\n\nFuture ioc updates will further consolidate ioc access and the create\ninterface will be unexported.\n\nWhile at it, relocate ioc internal interface declarations in blk.h and\nadd section comments before and after.\n\nThis patch does not introduce functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b2efa05265d62bc29f3a64400fad4b44340eedb8",
      "tree": "4555f0b5f0025c099997b81f7b3f8bc48b44220d",
      "parents": [
        "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: unlink cfq_io_context\u0027s immediately\n\ncic is association between io_context and request_queue.  A cic is\nlinked from both ioc and q and should be destroyed when either one\ngoes away.  As ioc and q both have their own locks, locking becomes a\nbit complex - both orders work for removal from one but not from the\nother.\n\nCurrently, cfq tries to circumvent this locking order issue with RCU.\nioc-\u003elock nests inside queue_lock but the radix tree and cic\u0027s are\nalso protected by RCU allowing either side to walk their lists without\ngrabbing lock.\n\nThis rather unconventional use of RCU quickly devolves into extremely\nfragile convolution.  e.g. The following is from cfqd going away too\nsoon after ioc and q exits raced.\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n [   88.503444]\n Pid: 599, comm: hexdump Not tainted 3.1.0-rc10-work+ #158 Bochs Bochs\n RIP: 0010:[\u003cffffffff81397628\u003e]  [\u003cffffffff81397628\u003e] cfq_exit_single_io_context+0x58/0xf0\n ...\n Call Trace:\n  [\u003cffffffff81395a4a\u003e] call_for_each_cic+0x5a/0x90\n  [\u003cffffffff81395ab5\u003e] cfq_exit_io_context+0x15/0x20\n  [\u003cffffffff81389130\u003e] exit_io_context+0x100/0x140\n  [\u003cffffffff81098a29\u003e] do_exit+0x579/0x850\n  [\u003cffffffff81098d5b\u003e] do_group_exit+0x5b/0xd0\n  [\u003cffffffff81098de7\u003e] sys_exit_group+0x17/0x20\n  [\u003cffffffff81b02f2b\u003e] system_call_fastpath+0x16/0x1b\n\nThe only real hot path here is cic lookup during request\ninitialization and avoiding extra locking requires very confined use\nof RCU.  This patch makes cic removal from both ioc and request_queue\nperform double-locking and unlink immediately.\n\n* From q side, the change is almost trivial as ioc-\u003elock nests inside\n  queue_lock.  It just needs to grab each ioc-\u003elock as it walks\n  cic_list and unlink it.\n\n* From ioc side, it\u0027s a bit more difficult because of inversed lock\n  order.  ioc needs its lock to walk its cic_list but can\u0027t grab the\n  matching queue_lock and needs to perform unlock-relock dancing.\n\n  Unlinking is now wholly done from put_io_context() and fast path is\n  optimized by using the queue_lock the caller already holds, which is\n  by far the most common case.  If the ioc accessed multiple devices,\n  it tries with trylock.  In unlikely cases of fast path failure, it\n  falls back to full double-locking dance from workqueue.\n\nDouble-locking isn\u0027t the prettiest thing in the world but it\u0027s *far*\nsimpler and more understandable than RCU trick without adding any\nmeaningful overhead.\n\nThis still leaves a lot of now unnecessary RCU logics.  Future patches\nwill trim them.\n\n-v2: Vivek pointed out that cic-\u003eq was being dereferenced after\n     cic-\u003erelease() was called.  Updated to use local variable @this_q\n     instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d",
      "tree": "ec24aa4b076f54fcfb0558d5113f5c5e0f4bc173",
      "parents": [
        "283287a52e3c3f7f8f9da747f4b8c5202740d776"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: move ioc ioprio/cgroup changed handling to cic\n\nioprio/cgroup change was handled by marking the changed state in ioc\nand, on the following access to the ioc, performing RCU-protected\niteration through all cic\u0027s grabbing the matching queue_lock.\n\nThis patch moves the changed state to each cic.  When ioprio or cgroup\nchanges, the respective bit is set on all cic\u0027s of the ioc and when\neach of those cic (not ioc) is accessed, change is applied for that\nspecific ioc-queue pair.\n\nThis also fixes the following two race conditions between setting and\nclearing of changed states.\n\n* Missing barrier between assign/load of ioprio and ioprio_changed\n  allowed applying old ioprio.\n\n* Change requests could happen between application of change and\n  clearing of changed variables.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6e736be7f282fff705db7c34a15313281b372a76",
      "tree": "1683e00e073ee4bd3027798f92ae2d368404d44b",
      "parents": [
        "42ec57a8f68311bbbf4ff96a5d33c8a2e90b9d05"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block: make ioc get/put interface more conventional and fix race on alloction\n\nIgnoring copy_io() during fork, io_context can be allocated from two\nplaces - current_io_context() and set_task_ioprio().  The former is\nalways called from local task while the latter can be called from\ndifferent task.  The synchornization between them are peculiar and\ndubious.\n\n* current_io_context() doesn\u0027t grab task_lock() and assumes that if it\n  saw %NULL -\u003eio_context, it would stay that way until allocation and\n  assignment is complete.  It has smp_wmb() between alloc/init and\n  assignment.\n\n* set_task_ioprio() grabs task_lock() for assignment and does\n  smp_read_barrier_depends() between \"ioc \u003d task-\u003eio_context\" and \"if\n  (ioc)\".  Unfortunately, this doesn\u0027t achieve anything - the latter\n  is not a dependent load of the former.  ie, if ioc itself were being\n  dereferenced \"ioc-\u003exxx\", it would mean something (not sure what tho)\n  but as the code currently stands, the dependent read barrier is\n  noop.\n\nAs only one of the the two test-assignment sequences is task_lock()\nprotected, the task_lock() can\u0027t do much about race between the two.\nNothing prevents current_io_context() and set_task_ioprio() allocating\nits own ioc for the same task and overwriting the other\u0027s.\n\nAlso, set_task_ioprio() can race with exiting task and create a new\nioc after exit_io_context() is finished.\n\nioc get/put doesn\u0027t have any reason to be complex.  The only hot path\nis accessing the existing ioc of %current, which is simple to achieve\ngiven that -\u003eio_context is never destroyed as long as the task is\nalive.  All other paths can happily go through task_lock() like all\nother task sub structures without impacting anything.\n\nThis patch updates ioc get/put so that it becomes more conventional.\n\n* alloc_io_context() is replaced with get_task_io_context().  This is\n  the only interface which can acquire access to ioc of another task.\n  On return, the caller has an explicit reference to the object which\n  should be put using put_io_context() afterwards.\n\n* The functionality of current_io_context() remains the same but when\n  creating a new ioc, it shares the code path with\n  get_task_io_context() and always goes through task_lock().\n\n* get_io_context() now means incrementing ref on an ioc which the\n  caller already has access to (be that an explicit refcnt or implicit\n  %current one).\n\n* PF_EXITING inhibits creation of new io_context and once\n  exit_io_context() is finished, it\u0027s guaranteed that both ioc\n  acquisition functions return %NULL.\n\n* All users are updated.  Most are trivial but\n  smp_read_barrier_depends() removal from cfq_get_io_context() needs a\n  bit of explanation.  I suppose the original intention was to ensure\n  ioc-\u003eioprio is visible when set_task_ioprio() allocates new\n  io_context and installs it; however, this wouldn\u0027t have worked\n  because set_task_ioprio() doesn\u0027t have wmb between init and install.\n  There are other problems with this which will be fixed in another\n  patch.\n\n* While at it, use NUMA_NO_NODE instead of -1 for wildcard node\n  specification.\n\n-v2: Vivek spotted contamination from debug patch.  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "42ec57a8f68311bbbf4ff96a5d33c8a2e90b9d05",
      "tree": "3aead2658435f53bd637967c5722358039acc390",
      "parents": [
        "a73f730d013ff2788389fd0c46ad3e5510f124e6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block: misc ioc cleanups\n\n* int return from put_io_context() wasn\u0027t used by anybody.  Make it\n  return void like other put functions and docbook-fy the function\n  comment.\n\n* Reorder dummy declarations for !CONFIG_BLOCK case a bit.\n\n* Make alloc_ioc_context() use __GFP_ZERO allocation, take init out of\n  if block and drop 0\u0027ing.\n\n* Docbook-fy current_io_context() comment.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "04bf7869ca0fd12009aee301cac2264a36df4d98",
      "tree": "66cb81ebf8b76560a31433c2c493dc430c914af9",
      "parents": [
        "d2f31a5fd60d168b00fc4f7617b68a1287b21e90",
        "7b28afe01ab6ffb5f152f47831b44933facd2328"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-3.1/core\n\nConflicts:\n\tblock/blk-throttle.c\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "df4156569d4ace581bd1581e7aa4a9dd7d2f0775",
      "tree": "1163b57017ce3ccef73f08d4d1c8b93417fec4d2",
      "parents": [
        "8aea45451b252e4be09ee9974c5658bb47c81625"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Mon Jun 06 05:11:34 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:57:25 2011 +0200"
      },
      "message": "block: rename the return of two functions\n\nIf we rename the return of alloc_io_context() and get_io_context() from\n\"ret\" to \"ioc\" the code get\u0027s (a bit) more readable and (a lot) more\ngrepable.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "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": "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": "27667c996f6a0bed4ad1e10ac0a0dbb6037968db",
      "tree": "dcbcd7354f6ccaa3fe88fdf0a0a5f1e168ff8c40",
      "parents": [
        "3603b8eaccc8e41d3f355b3cadd662a3dd6699fd"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Tue Dec 21 15:07:45 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Dec 21 15:07:45 2010 +0100"
      },
      "message": "block: Clean up exit_io_context() source code.\n\nThis patch fixes a spelling error in a source code comment and removes\nsuperfluous braces in the function exit_io_context().\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "cedb4a7d9f6aedb0dce94d6285b69dcb3c10fa05",
      "tree": "49a6b255a727421658cb917321ad3e29c8bd9fc0",
      "parents": [
        "17a9e7bbae178d1326e4631ab6350a272349c99d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Nov 11 13:37:54 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Nov 11 13:40:11 2010 +0100"
      },
      "message": "block: remove unused copy_io_context()\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "4671a1322052425afa38fcb7980d2fd2bb0fc99b",
      "tree": "d31e221682a11e7af2771b426773dff249ed115c",
      "parents": [
        "73e9ffdd0cc8159f876d5e29ecf2d9c1bfca544f"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Mon Mar 01 10:57:22 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Mar 01 10:57:22 2010 +0100"
      },
      "message": "block: don\u0027t access jiffies when initialising io_context\n\nAs the comment says the initial value of last_waited is never used, so\nthere is no need to initialise it with the current jiffies. Jiffies is\nhot enough without accessing it for no reason.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ce289321b7dc1eb108e3df0dec872b7429ef49f7",
      "tree": "9153bc19d805d796b7a9ddac04d2d060a9d3261e",
      "parents": [
        "b27d7f16d3c6c27345d4280a739809c1c2c4c0b5"
      ],
      "author": {
        "name": "Kirill Afonshin",
        "email": "kirill_nnov@mail.ru",
        "time": "Fri Jan 08 22:09:59 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Jan 11 14:29:20 2010 +0100"
      },
      "message": "block: removed unused as_io_context\n\nIt isn\u0027t used anymore, since AS was deleted.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b69f2292063d2caf37ca9aec7d63ded203701bf3",
      "tree": "be4acb81ea4ab7014047808ec2b2c908e8334f55",
      "parents": [
        "61cc74fbb87af6aa551a06a370590c9bc07e29d9"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Dec 04 14:52:42 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 16:36:18 2009 +0100"
      },
      "message": "block: Fix io_context leak after failure of clone with CLONE_IO\n\nWith CLONE_IO, parent\u0027s io_context-\u003enr_tasks is incremented, but never\ndecremented whenever copy_process() fails afterwards, which prevents\nexit_io_context() from calling IO schedulers exit functions.\n\nGive a task_struct to exit_io_context(), and call exit_io_context() instead of\nput_io_context() in copy_process() cleanup path.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "61cc74fbb87af6aa551a06a370590c9bc07e29d9",
      "tree": "351116a74bba13b016c730f777eca86b3b197e5e",
      "parents": [
        "3c764b7a654668dd04905841d6024f7b6aa843a5"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Dec 04 14:52:41 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 16:36:18 2009 +0100"
      },
      "message": "block: Fix io_context leak after clone with CLONE_IO\n\nWith CLONE_IO, copy_io() increments both ioc-\u003erefcount and ioc-\u003enr_tasks.\nHowever exit_io_context() only decrements ioc-\u003erefcount if ioc-\u003enr_tasks\nreaches 0.\n\nAlways call put_io_context() in exit_io_context().\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d9c7d394a8ebacb60097b192939ae9f15235225e",
      "tree": "4fbf9c7677acb03c23d05faba1a4b0bcfb6702b4",
      "parents": [
        "1d589bb16b825b3a7b4edd34d997f1f1f953033d"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@novell.com",
        "time": "Wed Jun 10 12:57:06 2009 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Jun 10 23:07:15 2009 +0200"
      },
      "message": "block: prevent possible io_context-\u003erefcount overflow\n\nCurrently io_context has an atomic_t(32-bit) as refcount.  In the case of\ncfq, for each device against whcih a task does I/O, a reference to the\nio_context would be taken.  And when there are multiple process sharing\nio_contexts(CLONE_IO) would also have a reference to the same io_context.\n\nTheoretically the possible maximum number of processes sharing the same\nio_context + the number of disks/cfq_data referring to the same io_context\ncan overflow the 32-bit counter on a very high-end machine.\n\nEven though it is an improbable case, let us make it atomic_long_t.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "07416d29bcf608257f1e5280642dcbe0021518a3",
      "tree": "6b88b2b043cac10b34234320c68e06848c00127c",
      "parents": [
        "aa94b5371f6f898558d9fa5690cc6e4bf917a572"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed May 07 09:17:12 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed May 07 09:28:57 2008 +0200"
      },
      "message": "cfq-iosched: fix RCU race in the cfq io_context destructor handling\n\nput_io_context() drops the RCU read lock before calling into cfq_dtor(),\nhowever we need to hold off freeing there before grabbing and\ndereferencing the first object on the list.\n\nSo extend the rcu_read_lock() scope to cover the calling of cfq_dtor(),\nand optimize cfq_free_io_context() to use a new variant for\ncall_for_each_cic() that assumes the RCU read lock is already held.\n\nHit in the wild by Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ffc4e7595734cf768fa60cea8a4d545dfef8231a",
      "tree": "9b95aca67ea7c9e87254da501f73cca64504051d",
      "parents": [
        "84e9e03c55c2456799ab19f1d577e72f721fdd39"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Feb 19 10:02:29 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Feb 19 10:04:00 2008 +0100"
      },
      "message": "cfq-iosched: add hlist for browsing parallel to the radix tree\n\nIt\u0027s cumbersome to browse a radix tree from start to finish, especially\nsince we modify keys when a process exits. So add a hlist for the single\npurpose of browsing over all known cfq_io_contexts, used for exit,\nio prio change, etc.\n\nThis fixes http://bugzilla.kernel.org/show_bug.cgi?id\u003d9948\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "13341598263011e079386b22ea35e482f97714c0",
      "tree": "8a4caf93f9fed9e3b318304759028201a477f733",
      "parents": [
        "5ece6c52ea52f9e94298e950a837ccff415c7687"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Mon Feb 18 13:45:53 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Feb 19 10:04:00 2008 +0100"
      },
      "message": "make blk_ioc_init() static\n\nblk_ioc_init() can become static.\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@carl.home.kernel.dk\u003e\n"
    },
    {
      "commit": "3bc217ffe6774e7971d6a7ce6350ce806ebab044",
      "tree": "b1ccad14a0c23f12248092feb867d2e311db59f0",
      "parents": [
        "8bdd3f8a6993fef2f364aca6e1a59559405773a2"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Feb 01 11:34:49 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Feb 01 11:34:49 2008 +0100"
      },
      "message": "block: kill swap_io_context()\n\nIt blindly copies everything in the io_context, including the lock.\nThat doesn\u0027t work so well for either lock ordering or lockdep.\n\nThere seems zero point in swapping io contexts on a request to request\nmerge, so the best point of action is to just remove it.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "86db1e29772372155db08ff48a9ceb76e11a2ad1",
      "tree": "312f38eb3245873c476c50f816b85610fef9615a",
      "parents": [
        "8324aa91d1e11a1fc25f209687a0b2e6c2ed47d0"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 14:53:40 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jan 29 21:55:08 2008 +0100"
      },
      "message": "block: continue ll_rw_blk.c splitup\n\nAdds files for barrier handling, rq execution, io context handling,\nmapping data to requests, and queue settings.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    }
  ]
}
