)]}'
{
  "log": [
    {
      "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": "37b40adf2d1b4a5e51323be73ccf8ddcf3f15dd3",
      "tree": "39c935adb74eccf088dabad743425a822a843910",
      "parents": [
        "07c2bd37350c9b1af71b35d05f16e300a6602948"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Wed Feb 08 20:02:03 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 08 20:02:03 2012 +0100"
      },
      "message": "bsg: fix sysfs link remove warning\n\nWe create \"bsg\" link if q-\u003ekobj.sd is not NULL, so remove it only\nwhen the same condition is true.\n\nFixes:\n\nWARNING: at fs/sysfs/inode.c:323 sysfs_hash_and_remove+0x2b/0x77()\nsysfs: can not remove \u0027bsg\u0027, no directory\nCall Trace:\n  [\u003cc0429683\u003e] warn_slowpath_common+0x6a/0x7f\n  [\u003cc0537a68\u003e] ? sysfs_hash_and_remove+0x2b/0x77\n  [\u003cc042970b\u003e] warn_slowpath_fmt+0x2b/0x2f\n  [\u003cc0537a68\u003e] sysfs_hash_and_remove+0x2b/0x77\n  [\u003cc053969a\u003e] sysfs_remove_link+0x20/0x23\n  [\u003cc05d88f1\u003e] bsg_unregister_queue+0x40/0x6d\n  [\u003cc0692263\u003e] __scsi_remove_device+0x31/0x9d\n  [\u003cc069149f\u003e] scsi_forget_host+0x41/0x52\n  [\u003cc0689fa9\u003e] scsi_remove_host+0x71/0xe0\n  [\u003cf7de5945\u003e] quiesce_and_remove_host+0x51/0x83 [usb_storage]\n  [\u003cf7de5a1e\u003e] usb_stor_disconnect+0x18/0x22 [usb_storage]\n  [\u003cc06c29de\u003e] usb_unbind_interface+0x4e/0x109\n  [\u003cc067a80f\u003e] __device_release_driver+0x6b/0xa6\n  [\u003cc067a861\u003e] device_release_driver+0x17/0x22\n  [\u003cc067a46a\u003e] bus_remove_device+0xd6/0xe6\n  [\u003cc06785e2\u003e] device_del+0xf2/0x137\n  [\u003cc06c101f\u003e] usb_disable_device+0x94/0x1a0\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "07c2bd37350c9b1af71b35d05f16e300a6602948",
      "tree": "e45ee2952fb78d6d8f2372c8ea1f854da825fa90",
      "parents": [
        "050c8ea80e3e90019d9e981c6a117ef614e882ed"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 08 09:19:42 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 08 09:19:42 2012 +0100"
      },
      "message": "block: don\u0027t call elevator callbacks for plug merges\n\nPlug merge calls two elevator callbacks outside queue lock -\nelevator_allow_merge_fn() and elevator_bio_merged_fn().  Although\nattempt_plug_merge() suggests that elevator is guaranteed to be there\nthrough the existing request on the plug list, nothing prevents plug\nmerge from calling into dying or initializing elevator.\n\nFor regular merges, bypass ensures elvpriv count to reach zero, which\nin turn prevents merges as all !ELVPRIV requests get REQ_SOFTBARRIER\nfrom forced back insertion.  Plug merge doesn\u0027t check ELVPRIV, and, as\nthe requests haven\u0027t gone through elevator insertion yet, it doesn\u0027t\nhave SOFTBARRIER set allowing merges on a bypassed queue.\n\nThis, for example, leads to the following crash during elevator\nswitch.\n\n BUG: unable to handle kernel NULL pointer dereference at 0000000000000008\n IP: [\u003cffffffff813b34e9\u003e] cfq_allow_merge+0x49/0xa0\n PGD 112cbc067 PUD 115d5c067 PMD 0\n Oops: 0000 [#1] PREEMPT SMP\n CPU 1\n Modules linked in: deadline_iosched\n\n Pid: 819, comm: dd Not tainted 3.3.0-rc2-work+ #76 Bochs Bochs\n RIP: 0010:[\u003cffffffff813b34e9\u003e]  [\u003cffffffff813b34e9\u003e] cfq_allow_merge+0x49/0xa0\n RSP: 0018:ffff8801143a38f8  EFLAGS: 00010297\n RAX: 0000000000000000 RBX: ffff88011817ce28 RCX: ffff880116eb6cc0\n RDX: 0000000000000000 RSI: ffff880118056e20 RDI: ffff8801199512f8\n RBP: ffff8801143a3908 R08: 0000000000000000 R09: 0000000000000000\n R10: 0000000000000001 R11: 0000000000000000 R12: ffff880118195708\n R13: ffff880118052aa0 R14: ffff8801143a3d50 R15: ffff880118195708\n FS:  00007f19f82cb700(0000) GS:ffff88011fc80000(0000) knlGS:0000000000000000\n CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n CR2: 0000000000000008 CR3: 0000000112c6a000 CR4: 00000000000006e0\n DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n Process dd (pid: 819, threadinfo ffff8801143a2000, task ffff880116eb6cc0)\n Stack:\n  ffff88011817ce28 ffff880118195708 ffff8801143a3928 ffffffff81391bba\n  ffff88011817ce28 ffff880118195708 ffff8801143a3948 ffffffff81391bf1\n  ffff88011817ce28 0000000000000000 ffff8801143a39a8 ffffffff81398e3e\n Call Trace:\n  [\u003cffffffff81391bba\u003e] elv_rq_merge_ok+0x4a/0x60\n  [\u003cffffffff81391bf1\u003e] elv_try_merge+0x21/0x40\n  [\u003cffffffff81398e3e\u003e] blk_queue_bio+0x8e/0x390\n  [\u003cffffffff81396a5a\u003e] generic_make_request+0xca/0x100\n  [\u003cffffffff81396b04\u003e] submit_bio+0x74/0x100\n  [\u003cffffffff811d45c2\u003e] __blockdev_direct_IO+0x1ce2/0x3450\n  [\u003cffffffff811d0dc7\u003e] blkdev_direct_IO+0x57/0x60\n  [\u003cffffffff811460b5\u003e] generic_file_aio_read+0x6d5/0x760\n  [\u003cffffffff811986b2\u003e] do_sync_read+0xe2/0x120\n  [\u003cffffffff81199345\u003e] vfs_read+0xc5/0x180\n  [\u003cffffffff81199501\u003e] sys_read+0x51/0x90\n  [\u003cffffffff81aeac12\u003e] system_call_fastpath+0x16/0x1b\n\nThere are multiple ways to fix this including making plug merge check\nELVPRIV; however,\n\n* Calling into elevator outside queue lock is confusing and\n  error-prone.\n\n* Requests on plug list aren\u0027t known to the elevator.  They aren\u0027t on\n  the elevator yet, so there\u0027s no elevator specific state to update.\n\n* Given the nature of plug merges - collecting bio\u0027s for the same\n  purpose from the same issuer - elevator specific restrictions aren\u0027t\n  applicable.\n\nSo, simply don\u0027t call into elevator methods from plug merge by moving\nelv_bio_merged() from bio_attempt_*_merge() to blk_queue_bio(), and\nusing blk_try_merge() in attempt_plug_merge().\n\nThis is based on Jens\u0027 patch to skip elevator_allow_merge_fn() from\nplug merge.\n\nNote that this makes per-cgroup merged stats skip plug merging.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c4F16F3CA.90904@kernel.dk\u003e\nOriginal-patch-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "050c8ea80e3e90019d9e981c6a117ef614e882ed",
      "tree": "e1c53f17a93ba48b9aedb0c1560dfb022733845f",
      "parents": [
        "4e8670e26135d8fbfd5e084fddc1a8ed9f8eb4cb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 08 09:19:38 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 08 09:19:38 2012 +0100"
      },
      "message": "block: separate out blk_rq_merge_ok() and blk_try_merge() from elevator functions\n\nblk_rq_merge_ok() is the elevator-neutral part of merge eligibility\ntest.  blk_try_merge() determines merge direction and expects the\ncaller to have tested elv_rq_merge_ok() previously.\n\nelv_rq_merge_ok() now wraps blk_rq_merge_ok() and then calls\nelv_iosched_allow_merge().  elv_try_merge() is removed and the two\ncallers are updated to call elv_rq_merge_ok() explicitly followed by\nblk_try_merge().  While at it, make rq_merge_ok() functions return\nbool.\n\nThis is to prepare for plug merge update and doesn\u0027t introduce any\nbehavior change.\n\nThis is based on Jens\u0027 patch to skip elevator_allow_merge_fn() from\nplug merge.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c4F16F3CA.90904@kernel.dk\u003e\nOriginal-patch-by: Jens Axboe \u003caxboe@kernel.dk\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": "05c30b9551f1904d9950ad0d28e65fc4ff3c8a8e",
      "tree": "2efdf9cd5e28ee20e9b2824b13e621826d56f19e",
      "parents": [
        "df0793abb929e66606fa25f3875ff1b89de5ad32"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 19 09:20:10 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Jan 19 09:20:10 2012 +0100"
      },
      "message": "block: fix NULL icq_cache reference\n\nVivek reported a kernel crash:\n[   94.217015] BUG: unable to handle kernel NULL pointer dereference at 000000000000001c\n[   94.218004] IP: [\u003cffffffff81142fae\u003e] kmem_cache_free+0x5e/0x200\n[   94.218004] PGD 13abda067 PUD 137d52067 PMD 0\n[   94.218004] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC\n[   94.218004] CPU 0\n[   94.218004] Modules linked in: [last unloaded: scsi_wait_scan]\n[   94.218004]\n[   94.218004] Pid: 0, comm: swapper/0 Not tainted 3.2.0+ #16 Hewlett-Packard HP xw6600 Workstation/0A9Ch\n[   94.218004] RIP: 0010:[\u003cffffffff81142fae\u003e]  [\u003cffffffff81142fae\u003e] kmem_cache_free+0x5e/0x200\n[   94.218004] RSP: 0018:ffff88013fc03de0  EFLAGS: 00010006\n[   94.218004] RAX: ffffffff81e0d020 RBX: ffff880138b3c680 RCX: 00000001801c001b\n[   94.218004] RDX: 00000000003aac1d RSI: ffff880138b3c680 RDI: ffffffff81142fae\n[   94.218004] RBP: ffff88013fc03e10 R08: ffff880137830238 R09: 0000000000000001\n[   94.218004] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000\n[   94.218004] R13: ffffea0004e2cf00 R14: ffffffff812f6eb6 R15: 0000000000000246\n[   94.218004] FS:  0000000000000000(0000) GS:ffff88013fc00000(0000) knlGS:0000000000000000\n[   94.218004] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n[   94.218004] CR2: 000000000000001c CR3: 00000001395ab000 CR4: 00000000000006f0\n[   94.218004] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n[   94.218004] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n[   94.218004] Process swapper/0 (pid: 0, threadinfo ffffffff81e00000, task ffffffff81e0d020)\n[   94.218004] Stack:\n[   94.218004]  0000000000000102 ffff88013fc0db20 ffffffff81e22700 ffff880139500f00\n[   94.218004]  0000000000000001 000000000000000a ffff88013fc03e20 ffffffff812f6eb6\n[   94.218004]  ffff88013fc03e90 ffffffff810c8da2 ffffffff81e01fd8 ffff880137830240\n[   94.218004] Call Trace:\n[   94.218004]  \u003cIRQ\u003e\n[   94.218004]  [\u003cffffffff812f6eb6\u003e] icq_free_icq_rcu+0x16/0x20\n[   94.218004]  [\u003cffffffff810c8da2\u003e] __rcu_process_callbacks+0x1c2/0x420\n[   94.218004]  [\u003cffffffff810c9038\u003e] rcu_process_callbacks+0x38/0x250\n[   94.218004]  [\u003cffffffff810405ee\u003e] __do_softirq+0xce/0x3e0\n[   94.218004]  [\u003cffffffff8108ed04\u003e] ? clockevents_program_event+0x74/0x100\n[   94.218004]  [\u003cffffffff81090104\u003e] ? tick_program_event+0x24/0x30\n[   94.218004]  [\u003cffffffff8183ed1c\u003e] call_softirq+0x1c/0x30\n[   94.218004]  [\u003cffffffff8100422d\u003e] do_softirq+0x8d/0xc0\n[   94.218004]  [\u003cffffffff81040c3e\u003e] irq_exit+0xae/0xe0\n[   94.218004]  [\u003cffffffff8183f4be\u003e] smp_apic_timer_interrupt+0x6e/0x99\n[   94.218004]  [\u003cffffffff8183e330\u003e] apic_timer_interrupt+0x70/0x80\n\nOnce a queue is quiesced, it\u0027s not supposed to have any elvpriv data or\nicq\u0027s, and elevator switching depends on that.  Request alloc path\nfollowed the rule for elvpriv data but forgot apply it to icq\u0027s\nleading to the following crash during elevator switch. Fix it by not\nallocating icq\u0027s if ELVPRIV is not set for the request.\n\nReported-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nTested-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "df0793abb929e66606fa25f3875ff1b89de5ad32",
      "tree": "fa53e6e4e7f4a6773f45173132bbfd77908f7c17",
      "parents": [
        "90a4c0f51e8e44111a926be6f4c87af3938a79c3"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 19 09:20:09 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Jan 19 09:20:09 2012 +0100"
      },
      "message": "block,cfq: change code order\n\ncfq_slice_expired will change saved_workload_slice. It should be called\nfirst so saved_workload_slice is correctly set to 0 after workload type\nis changed.\nThis fixes the code order changed by 54b466e44b1c7.\n\nTested-by: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "54b466e44b1c7809144bbd8cd6be3f85877ca46f",
      "tree": "01c99a8b6fff843ac7c327b8a0c777039e2c405e",
      "parents": [
        "b3c9dd182ed3bdcdaf0e42625a35924b0497afdc"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jan 17 21:26:11 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jan 17 21:26:11 2012 +0100"
      },
      "message": "cfq-iosched: fix use-after-free of cfqq\n\nWith the changes in life time management between the cfq IO contexts\nand the cfq queues, we now risk having cfqd-\u003eactive_queue being\nfreed when cfq_slice_expired() is being called. cfq_preempt_queue()\ncaches this queue and uses it after calling said function, causing\na use-after-free condition. This triggers the following oops,\nwhen cfqq_type() attempts to dereference it:\n\nBUG: unable to handle kernel paging request at ffff8800746c4f0c\nIP: [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\nPGD 18d4063 PUD 1fe15067 PMD 1ffb9067 PTE 80000000746c4160\nOops: 0000 [#1] SMP DEBUG_PAGEALLOC\nCPU 3\nModules linked in:\n\nPid: 1, comm: init Not tainted 3.2.0-josef+ #367 Bochs Bochs\nRIP: 0010:[\u003cffffffff81266d59\u003e]  [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\nRSP: 0018:ffff880079c11778  EFLAGS: 00010046\nRAX: 0000000000000000 RBX: ffff880076f3df08 RCX: 0000000000000000\nRDX: 0000000000000006 RSI: ffff880074271888 RDI: ffff8800746c4f08\nRBP: ffff880079c11778 R08: 0000000000000078 R09: 0000000000000001\nR10: 09f911029d74e35b R11: 09f911029d74e35b R12: ffff880076f337f0\nR13: ffff8800746c4f08 R14: ffff8800746c4f08 R15: 0000000000000002\nFS:  00007f62fd44f700(0000) GS:ffff88007cd80000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\nCR2: ffff8800746c4f0c CR3: 0000000076c21000 CR4: 00000000000006e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess init (pid: 1, threadinfo ffff880079c10000, task ffff880079c0a040)\nStack:\n ffff880079c117c8 ffffffff812683d8 ffff880079c117a8 ffffffff8125de43\n ffff8800744fcf48 ffff880074b43e98 ffff8800770c8828 ffff880074b43e98\n 0000000000000003 0000000000000000 ffff880079c117f8 ffffffff81254149\nCall Trace:\n [\u003cffffffff812683d8\u003e] cfq_insert_request+0x3f5/0x47c\n [\u003cffffffff8125de43\u003e] ? blk_recount_segments+0x20/0x31\n [\u003cffffffff81254149\u003e] __elv_add_request+0x1ca/0x200\n [\u003cffffffff8125aa99\u003e] blk_queue_bio+0x2ef/0x312\n [\u003cffffffff81258f7b\u003e] generic_make_request+0x9f/0xe0\n [\u003cffffffff8125907b\u003e] submit_bio+0xbf/0xca\n [\u003cffffffff81136ec7\u003e] submit_bh+0xdf/0xfe\n [\u003cffffffff81176d04\u003e] ext3_bread+0x50/0x99\n [\u003cffffffff811785b3\u003e] dx_probe+0x38/0x291\n [\u003cffffffff81178864\u003e] ext3_dx_find_entry+0x58/0x219\n [\u003cffffffff81178ad5\u003e] ext3_find_entry+0xb0/0x406\n [\u003cffffffff8110c4d5\u003e] ? cache_alloc_debugcheck_after.isra.46+0x14d/0x1a0\n [\u003cffffffff8110cfbd\u003e] ? kmem_cache_alloc+0xef/0x191\n [\u003cffffffff8117a330\u003e] ext3_lookup+0x39/0xe1\n [\u003cffffffff81119461\u003e] d_alloc_and_lookup+0x45/0x6c\n [\u003cffffffff8111ac41\u003e] do_lookup+0x1e4/0x2f5\n [\u003cffffffff8111aef6\u003e] link_path_walk+0x1a4/0x6ef\n [\u003cffffffff8111b557\u003e] path_lookupat+0x59/0x5ea\n [\u003cffffffff8127406c\u003e] ? __strncpy_from_user+0x30/0x5a\n [\u003cffffffff8111bce0\u003e] do_path_lookup+0x23/0x59\n [\u003cffffffff8111cfd6\u003e] user_path_at_empty+0x53/0x99\n [\u003cffffffff8107b37b\u003e] ? remove_wait_queue+0x51/0x56\n [\u003cffffffff8111d02d\u003e] user_path_at+0x11/0x13\n [\u003cffffffff811141f5\u003e] vfs_fstatat+0x3a/0x64\n [\u003cffffffff8111425a\u003e] vfs_stat+0x1b/0x1d\n [\u003cffffffff81114359\u003e] sys_newstat+0x1a/0x33\n [\u003cffffffff81060e12\u003e] ? task_stopped_code+0x42/0x42\n [\u003cffffffff815d6712\u003e] system_call_fastpath+0x16/0x1b\nCode: 89 e6 48 89 c7 e8 fa ca fe ff 85 c0 74 06 4c 89 2b 41 b6 01 5b 44 89 f0 41 5c 41 5d 41 5e 5d c3 55 48 89 e5 66 66 66 66 90 31 c0 \u003c8b\u003e 57 04 f6 c6 01 74 0b 83 e2 20 83 fa 01 19 c0 83 c0 02 5d c3\nRIP  [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\n RSP \u003cffff880079c11778\u003e\nCR2: ffff8800746c4f0c\n\nGet rid of the caching of cfqd-\u003eactive_queue, and reorder the\ncheck so that it happens before we expire the active queue.\n\nThanks to Tejun for pin pointing the error location.\n\nReported-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nTested-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b3c9dd182ed3bdcdaf0e42625a35924b0497afdc",
      "tree": "ad48ad4d923fee147c736318d0fad35b3755f4f5",
      "parents": [
        "83c2f912b43c3a7babbb6cb7ae2a5276c1ed2a3e",
        "5d381efb3d1f1ef10535a31ca0dd9b22fe1e1922"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 15 12:24:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 15 12:24:45 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.3/core\u0027 of git://git.kernel.dk/linux-block: (37 commits)\n  Revert \"block: recursive merge requests\"\n  block: Stop using macro stubs for the bio data integrity calls\n  blockdev: convert some macros to static inlines\n  fs: remove unneeded plug in mpage_readpages()\n  block: Add BLKROTATIONAL ioctl\n  block: Introduce blk_set_stacking_limits function\n  block: remove WARN_ON_ONCE() in exit_io_context()\n  block: an exiting task should be allowed to create io_context\n  block: ioc_cgroup_changed() needs to be exported\n  block: recursive merge requests\n  block, cfq: fix empty queue crash caused by request merge\n  block, cfq: move icq creation and rq-\u003eelv.icq association to block core\n  block, cfq: restructure io_cq creation path for io_context interface cleanup\n  block, cfq: move io_cq exit/release to blk-ioc.c\n  block, cfq: move icq cache management to block core\n  block, cfq: move io_cq lookup to blk-ioc.c\n  block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n  block, cfq: reorganize cfq_io_context into generic and cfq specific parts\n  block: remove elevator_queue-\u003eops\n  block: reorder elevator switch sequence\n  ...\n\nFix up conflicts in:\n - block/blk-cgroup.c\n\tSwitch from can_attach_task to can_attach\n - block/cfq-iosched.c\n\tconflict with now removed cic index changes (we now use q-\u003eid instead)\n"
    },
    {
      "commit": "5d381efb3d1f1ef10535a31ca0dd9b22fe1e1922",
      "tree": "fba354212902ad0c7228bff43a38aca6df47c899",
      "parents": [
        "6898e3bd11cc9a931ef115eee9000ac9d8f8c3cf"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sun Jan 15 10:29:48 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sun Jan 15 10:29:48 2012 +0100"
      },
      "message": "Revert \"block: recursive merge requests\"\n\nThis reverts commit 274193224cdabd687d804a26e0150bb20f2dd52c.\n\nWe have some problems related to selection of empty queues\nthat need to be resolved, evidence so far points to the\nrecursive merge logic making either being the cause or at\nleast the accelerator for this. So revert it for now, until\nwe figure this out.\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "0bfc96cb77224736dfa35c3c555d37b3646ef35e",
      "tree": "af5135c929ee8e1bdb38c306b2634dbc547d5189",
      "parents": [
        "577ebb374c78314ac4617242f509e2f5e7156649"
      ],
      "author": {
        "name": "Paolo Bonzini",
        "email": "pbonzini@redhat.com",
        "time": "Thu Jan 12 16:01:28 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 14 15:07:24 2012 -0800"
      },
      "message": "block: fail SCSI passthrough ioctls on partition devices\n\nLinux allows executing the SG_IO ioctl on a partition or LVM volume, and\nwill pass the command to the underlying block device.  This is\nwell-known, but it is also a large security problem when (via Unix\npermissions, ACLs, SELinux or a combination thereof) a program or user\nneeds to be granted access only to part of the disk.\n\nThis patch lets partitions forward a small set of harmless ioctls;\nothers are logged with printk so that we can see which ioctls are\nactually sent.  In my tests only CDROM_GET_CAPABILITY actually occurred.\nOf course it was being sent to a (partition on a) hard disk, so it would\nhave failed with ENOTTY and the patch isn\u0027t changing anything in\npractice.  Still, I\u0027m treating it specially to avoid spamming the logs.\n\nIn principle, this restriction should include programs running with\nCAP_SYS_RAWIO.  If for example I let a program access /dev/sda2 and\n/dev/sdb, it still should not be able to read/write outside the\nboundaries of /dev/sda2 independent of the capabilities.  However, for\nnow programs with CAP_SYS_RAWIO will still be allowed to send the\nioctls.  Their actions will still be logged.\n\nThis patch does not affect the non-libata IDE driver.  That driver\nhowever already tests for bd !\u003d bd-\u003ebd_contains before issuing some\nioctl; it could be restricted further to forbid these ioctls even for\nprograms running with CAP_SYS_ADMIN/CAP_SYS_RAWIO.\n\nCc: linux-scsi@vger.kernel.org\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: James Bottomley \u003cJBottomley@parallels.com\u003e\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\n[ Make it also print the command name when warning - Linus ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "577ebb374c78314ac4617242f509e2f5e7156649",
      "tree": "690ae95d67bb8f9fd66bc0daebc90a46904420ac",
      "parents": [
        "81d48f0aee544885c39ef6e1ffb1175f276e6adf"
      ],
      "author": {
        "name": "Paolo Bonzini",
        "email": "pbonzini@redhat.com",
        "time": "Thu Jan 12 16:01:27 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 14 15:07:24 2012 -0800"
      },
      "message": "block: add and use scsi_blk_cmd_ioctl\n\nIntroduce a wrapper around scsi_cmd_ioctl that takes a block device.\n\nThe function will then be enhanced to detect partition block devices\nand, in that case, subject the ioctls to whitelisting.\n\nCc: linux-scsi@vger.kernel.org\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: James Bottomley \u003cJBottomley@parallels.com\u003e\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ef00f59c95fe6e002e7c6e3663cdea65e253f4cc",
      "tree": "8e84273162b7a743767098cc08b6c6eb2b041281",
      "parents": [
        "b1bd055d397e09f99dcef9b138ed104ff1812fcb"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Jan 11 16:29:31 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Jan 11 16:29:31 2012 +0100"
      },
      "message": "block: Add BLKROTATIONAL ioctl\n\nIntroduce an ioctl which permits applications to query whether a block\ndevice is rotational.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b1bd055d397e09f99dcef9b138ed104ff1812fcb",
      "tree": "e8e1d3d0b6a33859392bcba516933aff256dc4b4",
      "parents": [
        "c98b2cc29af8e84e7364b53e9bb4cc7cfaf62555"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Jan 11 16:27:11 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Jan 11 16:27:11 2012 +0100"
      },
      "message": "block: Introduce blk_set_stacking_limits function\n\nStacking driver queue limits are typically bounded exclusively by the\ncapabilities of the low level devices, not by the stacking driver\nitself.\n\nThis patch introduces blk_set_stacking_limits() which has more liberal\nmetrics than the default queue limits function. This allows us to\ninherit topology parameters from bottom devices without manually\ntweaking the default limits in each driver prior to calling the stacking\nfunction.\n\nSince there is now a clear distinction between stacking and low-level\ndevices, blk_set_default_limits() has been modified to carry the more\nconservative values that we used to manually set in\nblk_queue_make_request().\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "db0c2bf69aa095d4a6de7b1145f29fe9a7c0f6a3",
      "tree": "8f38957c01b18edddd44d49ecc3beeac08a20b4e",
      "parents": [
        "ac69e0928054ff29a5049902fb477f9c7605c773",
        "0d19ea866562e46989412a0676412fa0983c9ce7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\n* \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits)\n  cgroup: fix to allow mounting a hierarchy by name\n  cgroup: move assignement out of condition in cgroup_attach_proc()\n  cgroup: Remove task_lock() from cgroup_post_fork()\n  cgroup: add sparse annotation to cgroup_iter_start() and cgroup_iter_end()\n  cgroup: mark cgroup_rmdir_waitq and cgroup_attach_proc() as static\n  cgroup: only need to check oldcgrp\u003d\u003dnewgrp once\n  cgroup: remove redundant get/put of task struct\n  cgroup: remove redundant get/put of old css_set from migrate\n  cgroup: Remove unnecessary task_lock before fetching css_set on migration\n  cgroup: Drop task_lock(parent) on cgroup_fork()\n  cgroups: remove redundant get/put of css_set from css_set_check_fetched()\n  resource cgroups: remove bogus cast\n  cgroup: kill subsys-\u003ecan_attach_task(), pre_attach() and attach_task()\n  cgroup, cpuset: don\u0027t use ss-\u003epre_attach()\n  cgroup: don\u0027t use subsys-\u003ecan_attach_task() or -\u003eattach_task()\n  cgroup: introduce cgroup_taskset and use it in subsys-\u003ecan_attach(), cancel_attach() and attach()\n  cgroup: improve old cgroup handling in cgroup_attach_proc()\n  cgroup: always lock threadgroup during migration\n  threadgroup: extend threadgroup_lock() to cover exit and exec\n  threadgroup: rename signal-\u003ethreadgroup_fork_lock to -\u003egroup_rwsem\n  ...\n\nFix up conflict in kernel/cgroup.c due to commit e0197aae59e5: \"cgroups:\nfix a css_set not found bug in cgroup_attach_proc\" that already\nmentioned that the bug is fixed (differently) in Tejun\u0027s cgroup\npatchset. This one, in other words.\n"
    },
    {
      "commit": "972b2c719990f91eb3b2310d44ef8a2d38955a14",
      "tree": "b25a250ec5bec4b7b6355d214642d8b57c5cab32",
      "parents": [
        "02550d61f49266930e674286379d3601006b2893",
        "c3aa077648e147783a7a53b409578234647db853"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 08 12:19:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 08 12:19:57 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\n* \u0027for-linus2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (165 commits)\n  reiserfs: Properly display mount options in /proc/mounts\n  vfs: prevent remount read-only if pending removes\n  vfs: count unlinked inodes\n  vfs: protect remounting superblock read-only\n  vfs: keep list of mounts for each superblock\n  vfs: switch -\u003eshow_options() to struct dentry *\n  vfs: switch -\u003eshow_path() to struct dentry *\n  vfs: switch -\u003eshow_devname() to struct dentry *\n  vfs: switch -\u003eshow_stats to struct dentry *\n  switch security_path_chmod() to struct path *\n  vfs: prefer -\u003edentry-\u003ed_sb to -\u003emnt-\u003emnt_sb\n  vfs: trim includes a bit\n  switch mnt_namespace -\u003eroot to struct mount\n  vfs: take /proc/*/mounts and friends to fs/proc_namespace.c\n  vfs: opencode mntget() mnt_set_mountpoint()\n  vfs: spread struct mount - remaining argument of next_mnt()\n  vfs: move fsnotify junk to struct mount\n  vfs: move mnt_devname\n  vfs: move mnt_list to struct mount\n  vfs: switch pnode.h macros to struct mount *\n  ...\n"
    },
    {
      "commit": "ece2ccb668046610189d88d6aaf05aeb09c988a1",
      "tree": "a0349945f7537de2aca420b47ced23b6294f8b65",
      "parents": [
        "d10577a8d86a0c735488d66d32289a6d66bcfa20",
        "a218d0fdc5f9004164ff151d274487f6799907d0",
        "ff01bb4832651c6d25ac509a06a10fcbd75c461c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:15:54 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:15:54 2012 -0500"
      },
      "message": "Merge branches \u0027vfsmount-guts\u0027, \u0027umode_t\u0027 and \u0027partitions\u0027 into Z\n"
    },
    {
      "commit": "07d106d0a33d6063d2061305903deb02489eba20",
      "tree": "6f257f877a9c2e653ca0515253e930fa6606239a",
      "parents": [
        "805a6af8dba5dfdd35ec35dc52ec0122400b2610"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 05 15:40:12 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 05 15:40:12 2012 -0800"
      },
      "message": "vfs: fix up ENOIOCTLCMD error handling\n\nWe\u0027re doing some odd things there, which already messes up various users\n(see the net/socket.c code that this removes), and it was going to add\nyet more crud to the block layer because of the incorrect error code\ntranslation.\n\nENOIOCTLCMD is not an error return that should be returned to user mode\nfrom the \"ioctl()\" system call, but it should *not* be translated as\nEINVAL (\"Invalid argument\").  It should be translated as ENOTTY\n(\"Inappropriate ioctl for device\").\n\nThat EINVAL confusion has apparently so permeated some code that the\nblock layer actually checks for it, which is sad.  We continue to do so\nfor now, but add a big comment about how wrong that is, and we should\nremove it entirely eventually.  In the meantime, this tries to keep the\nchanges localized to just the EINVAL -\u003e ENOTTY fix, and removing code\nthat makes it harder to do the right thing.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2c9ede55ecec58099b72e4bb8eab719f32f72c31",
      "tree": "8498a8c940fea97931b469fc73eb1a5022a2b28c",
      "parents": [
        "7d54fa6472609f2b0f2ea27e51ec2cf1fb27bd57"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 23 20:24:48 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:55 2012 -0500"
      },
      "message": "switch device_get_devnode() and -\u003edevnode() to umode_t *\n\nboth callers of device_get_devnode() are only interested in lower 16bits\nand nobody tries to return anything wider than 16bit anyway.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ff01bb4832651c6d25ac509a06a10fcbd75c461c",
      "tree": "bbfdebd317db97d346df78293566f36e883b1be9",
      "parents": [
        "94ea4158f1733e3b10cef067d535f504866e0c41"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Sep 16 02:31:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:07 2012 -0500"
      },
      "message": "fs: move code out of buffer.c\n\nMove invalidate_bdev, block_sync_page into fs/block_dev.c.  Export\nkill_bdev as well, so brd doesn\u0027t have to open code it.  Reduce\nbuffer_head.h requirement accordingly.\n\nRemoved a rather large comment from invalidate_bdev, as it looked a bit\nobsolete to bother moving.  The small comment replacing it says enough.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "94ea4158f1733e3b10cef067d535f504866e0c41",
      "tree": "75a4d0c646b29dd529baeb3250afc1deaf570a8e",
      "parents": [
        "9be96f3fd10187f185d84cf878cf032465bcced3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Sep 16 00:45:36 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:06 2012 -0500"
      },
      "message": "separate partition format handling from generic code\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9be96f3fd10187f185d84cf878cf032465bcced3",
      "tree": "432a430ed9e0cbe0c18916cd3c3992f09b3feb37",
      "parents": [
        "4752bc309b7604d507c973c7b7678ac2ce10a058"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Sep 16 00:25:05 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:06 2012 -0500"
      },
      "message": "move fs/partitions to block/\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4752bc309b7604d507c973c7b7678ac2ce10a058",
      "tree": "09e2a259b12ed2f305754af8d766e0f62ecb8947",
      "parents": [
        "dabe0dc194d5d56d379a8994fff47392744b6491"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Sep 16 00:21:54 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:05 2012 -0500"
      },
      "message": "make register_disk() static\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f2b20d436534f22ccc3f5ad172499fcb013bb315",
      "tree": "5c5df70a252ea14da6063d2c6c3de4a4e769ecae",
      "parents": [
        "609f6ea1c9cdfe0c43a927e13205a57d0c266d5a"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Dec 29 09:16:28 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Dec 29 09:16:28 2011 +0100"
      },
      "message": "block: fix blk_queue_end_tag()\n\nCommit 5e081591 \"block: warn if tag is greater than real_max_depth\"\ncleaned up blk_queue_end_tag() to warn when the tag is truly invalid\n(greater than real_max_depth).  However, it changed behavior in the tag \u003c\nmax_depth case to not end the request.  Leading to triggering of\nBUG_ON(blk_queued_rq(rq)) in the request completion path:\n\n  http://marc.info/?l\u003dlinux-kernel\u0026m\u003d132204370518629\u0026w\u003d2\n\nIn order to allow blk_queue_resize_tags() to shrink the tag space\nblk_queue_end_tag() must always complete tags with a value less than\nreal_max_depth regardless of the current max_depth.  The comment about\n\"handling the shrink case\" seems to be what prompted changes in this\nspace, so remove it and BUG on all invalid tags (made even simpler by\nMatthew\u0027s suggestion to use an unsigned compare).\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nCc: Tao Ma \u003cboyu.mt@taobao.com\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nReported-by: Meelis Roos \u003cmroos@ut.ee\u003e\nReported-by: Ed Nadolski \u003cedmund.nadolski@intel.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\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": "609f6ea1c9cdfe0c43a927e13205a57d0c266d5a",
      "tree": "4bb34c0004e1650ee44f23105dc9362908470282",
      "parents": [
        "6ae0516b8a50ece5d766be608a305707e0450060"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Wed Dec 21 15:27:24 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 21 15:27:24 2011 +0100"
      },
      "message": "block: re-use existing \u0027reading\u0027 variable instead of checking direction again\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.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": "6ae0516b8a50ece5d766be608a305707e0450060",
      "tree": "90e4768d9d984d94cb45464b49b9c62b93ffba9f",
      "parents": [
        "4eabc941259f9d8c8fb71746d3f30c87e1d9e49b"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Dec 16 14:04:23 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 16 14:04:23 2011 +0100"
      },
      "message": "block, cfq: fix empty queue crash caused by request merge\n\nAll requests of a queue could be merged to other requests of other queue.\nSuch queue will not have request in it, but it\u0027s in service tree. This\nwill cause kernel oops.\nI encounter a BUG_ON() in cfq_dispatch_request() with next patch, but the\nissue should exist without the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "274193224cdabd687d804a26e0150bb20f2dd52c",
      "tree": "f07a788183f2ac91b9b16295f8f146bd5b88fb96",
      "parents": [
        "4a0b75c7d02c2bd46ed227d4ba5941ba8a0aba5d"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Dec 16 14:00:31 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 16 14:00:31 2011 +0100"
      },
      "message": "block: recursive merge requests\n\nIn my workload, thread 1 accesses a, a+2, ..., thread 2 accesses a+1,\na+3,.... When the requests are flushed to queue, a and a+1 are merged\nto (a, a+1), a+2 and a+3 too to (a+2, a+3), but (a, a+1) and (a+2, a+3)\naren\u0027t merged.\nWith recursive merge below, the workload throughput gets improved 20%\nand context switch drops 60%.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "4a0b75c7d02c2bd46ed227d4ba5941ba8a0aba5d",
      "tree": "a5a0c37a44c87227539ebc356178cc80435144d9",
      "parents": [
        "f1f8cc94651738b418ba54c039df536303b91704"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Dec 16 14:00:22 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 16 14:00:22 2011 +0100"
      },
      "message": "block, cfq: fix empty queue crash caused by request merge\n\nAll requests of a queue could be merged to other requests of other queue.\nSuch queue will not have request in it, but it\u0027s in service tree. This\nwill cause kernel oops.\nI encounter a BUG_ON() in cfq_dispatch_request() with next patch, but the\nissue should exist without the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "4eabc941259f9d8c8fb71746d3f30c87e1d9e49b",
      "tree": "f8ac1b8c1c1dc4d08830d2c430bef090b45dc277",
      "parents": [
        "b302545744c031eae04a43fb1c56cc17e00a193a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Dec 15 20:03:04 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Dec 15 20:03:04 2011 +0100"
      },
      "message": "block: don\u0027t kick empty queue in blk_drain_queue()\n\nWhile probing, fd sets up queue, probes hardware and tears down the\nqueue if probing fails.  In the process, blk_drain_queue() kicks the\nqueue which failed to finish initialization and fd is unhappy about\nthat.\n\n  floppy0: no floppy controllers found\n  ------------[ cut here ]------------\n  WARNING: at drivers/block/floppy.c:2929 do_fd_request+0xbf/0xd0()\n  Hardware name: To Be Filled By O.E.M.\n  VFS: do_fd_request called on non-open device\n  Modules linked in:\n  Pid: 1, comm: swapper Not tainted 3.2.0-rc4-00077-g5983fe2 #2\n  Call Trace:\n   [\u003cffffffff81039a6a\u003e] warn_slowpath_common+0x7a/0xb0\n   [\u003cffffffff81039b41\u003e] warn_slowpath_fmt+0x41/0x50\n   [\u003cffffffff813d657f\u003e] do_fd_request+0xbf/0xd0\n   [\u003cffffffff81322b95\u003e] blk_drain_queue+0x65/0x80\n   [\u003cffffffff81322c93\u003e] blk_cleanup_queue+0xe3/0x1a0\n   [\u003cffffffff818a809d\u003e] floppy_init+0xdeb/0xe28\n   [\u003cffffffff818a72b2\u003e] ? daring+0x6b/0x6b\n   [\u003cffffffff810002af\u003e] do_one_initcall+0x3f/0x170\n   [\u003cffffffff81884b34\u003e] kernel_init+0x9d/0x11e\n   [\u003cffffffff810317c2\u003e] ? schedule_tail+0x22/0xa0\n   [\u003cffffffff815dbb14\u003e] kernel_thread_helper+0x4/0x10\n   [\u003cffffffff81884a97\u003e] ? start_kernel+0x2be/0x2be\n   [\u003cffffffff815dbb10\u003e] ? gs_change+0xb/0xb\n\nAvoid it by making blk_drain_queue() kick queue iff dispatch queue has\nsomething on it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Ralf Hildebrandt \u003cRalf.Hildebrandt@charite.de\u003e\nReported-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nTested-by: Sergei Trofimovich \u003cslyich@gmail.com\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": "9b84cacd013996f244d85b3d873287c2a8f88658",
      "tree": "a11b850f9c8b182a7a8141276244a831aaae5291",
      "parents": [
        "7e5a8794492e43e9eebb68a98a23be055888ccd0"
      ],
      "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: restructure io_cq creation path for io_context interface cleanup\n\nAdd elevator_ops-\u003eelevator_init_icq_fn() and restructure\ncfq_create_cic() and rename it to ioc_create_icq().\n\nThe new function expects its caller to pass in io_context, uses\nelevator_type-\u003eicq_cache, handles generic init, calls the new elevator\noperation for elevator specific initialization, and returns pointer to\ncreated or looked up icq.  This leaves cfq_icq_pool variable without\nany user.  Removed.\n\nThis prepares for io_context interface cleanup and doesn\u0027t introduce\nany functional difference.\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": "3d3c2379feb177a5fd55bb0ed76776dc9d4f3243",
      "tree": "fafebbef8f0fb5b73ac4db24bff20dcd40b8bf12",
      "parents": [
        "47fdd4ca96bf4b28ac4d05d7a6e382df31d3d758"
      ],
      "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 cache management to block core\n\nLet elevators set -\u003eicq_size and -\u003eicq_align in elevator_type and\nelv_register() and elv_unregister() respectively create and destroy\nkmem_cache for icq.\n\n* elv_register() now can return failure.  All callers updated.\n\n* icq caches are automatically named \"ELVNAME_io_cq\".\n\n* cfq_slab_setup/kill() are collapsed into cfq_init/exit().\n\n* While at it, minor indentation change for iosched_cfq.elevator_name\n  for consistency.\n\nThis will help moving icq management to block core.  This doesn\u0027t\nintroduce any functional change.\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": "a612fddf0d8090f2877305c9168b6c1a34fb5d90",
      "tree": "b59047a1670469362e1ea44093522224bdcf5aae",
      "parents": [
        "c58698073218f2c8f2fc5982fa3938c2d3803b9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n\nMost of icq management is about to be moved out of cfq into blk-ioc.\nThis patch prepares for it.\n\n* Move cfqd-\u003eicq_list to request_queue-\u003eicq_list\n\n* Make request explicitly point to icq instead of through elevator\n  private data.  -\u003eelevator_private[3] is replaced with sub struct elv\n  which contains icq pointer and priv[2].  cfq is updated accordingly.\n\n* Meaningless clearing of -\u003eelevator_private[0] removed from\n  elv_set_request().  At that point in code, the field was guaranteed\n  to be %NULL anyway.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "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": "22f746e235a5cbee2a6ca9887b1be2aa7d31fe71",
      "tree": "a9786fe9fdb994b5ff69794023e6e3e48e39e0b0",
      "parents": [
        "f8fc877d3c1f10457d0d73d8540a0c51a1fa718a"
      ],
      "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: remove elevator_queue-\u003eops\n\nelevator_queue-\u003eops points to the same ops struct -\u003eelevator_type.ops\nis pointing to.  The only effect of caching it in elevator_queue is\nshorter notation - it doesn\u0027t save any indirect derefence.\n\nRelocate elevator_type-\u003elist which used only during module init/exit\nto the end of the structure, rename elevator_queue-\u003eelevator_type to\n-\u003etype, and replace elevator_queue-\u003eops with elevator_queue-\u003etype.ops.\n\nThis doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f8fc877d3c1f10457d0d73d8540a0c51a1fa718a",
      "tree": "036d5d57996a6b3f1dfd68fb569eea0e699f2263",
      "parents": [
        "f2dbd76a0a994bc1d5a3d0e7c844cc373832e86c"
      ],
      "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: reorder elevator switch sequence\n\nElevator switch sequence first attached the new elevator, then tried\nregistering it (sysfs) and if that failed attached back the old\nelevator.  However, sysfs registration doesn\u0027t require the elevator to\nbe attached, so there is no reason to do the \"detach, attach new,\nregister, maybe re-attach old\" sequence.  It can just do \"register,\ndetach, attach\".\n\n* elevator_init_queue() is updated to set -\u003eelevator_data directly and\n  return 0 / -errno.  This allows elevator_exit() on an unattached\n  elevator.\n\n* __elv_unregister_queue() which was necessary to unregister\n  unattached q is removed in favor of __elv_register_queue() which can\n  register unattached q.\n\n* elevator_attach() becomes a single assignment and obscures more then\n  it helps.  Dropped.\n\nThis will help cleaning up io_context handling across elevator switch.\n\nThis patch doesn\u0027t introduce visible behavior change.\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": "1238033c79e92e5c315af12e45396f1a78c73dec",
      "tree": "0f205155f811930f0cf43716e56fa57ea1f792b9",
      "parents": [
        "b50b636bce6293fa858cc7ff6c3ffe4920d90006"
      ],
      "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: kill cic-\u003ekey\n\nNow that lazy paths are removed, cfqd_dead_key() is meaningless and\ncic-\u003eq can be used whereever cic-\u003ekey is used.  Kill cic-\u003ekey.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b50b636bce6293fa858cc7ff6c3ffe4920d90006",
      "tree": "65a4c509ff491aa89bf4d1a5f3e26d600eeea49f",
      "parents": [
        "b9a1920837bc53430d339380e393a6e4c372939f"
      ],
      "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: kill ioc_gone\n\nNow that cic\u0027s are immediately unlinked under both locks, there\u0027s no\nneed to count and drain cic\u0027s before module unload.  RCU callback\ncompletion is waited with rcu_barrier().\n\nWhile at it, remove residual RCU operations on cic_list.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b9a1920837bc53430d339380e393a6e4c372939f",
      "tree": "e3f7b8389fe58ebf88381ad404ad408cef9792c2",
      "parents": [
        "b2efa05265d62bc29f3a64400fad4b44340eedb8"
      ],
      "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: remove delayed unlink\n\nNow that all cic\u0027s are immediately unlinked from both ioc and queue,\nlazy dropping from lookup path and trimming on elevator unregister are\nunnecessary.  Kill them and remove now unused elevator_ops-\u003etrim().\n\nThis also leaves call_for_each_cic() without any user.  Removed.\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": "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2",
      "tree": "c0ad51e3136286a9c1e1728fb1cfd7a322e8cf83",
      "parents": [
        "216284c352a0061f5b20acff2c4e50fb43fea183"
      ],
      "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: fix cic lookup locking\n\n* cfq_cic_lookup() may be called without queue_lock and multiple tasks\n  can execute it simultaneously for the same shared ioc.  Nothing\n  prevents them racing each other and trying to drop the same dead cic\n  entry multiple times.\n\n* smp_wmb() in cfq_exit_cic() doesn\u0027t really do anything and nothing\n  prevents cfq_cic_lookup() seeing stale cic-\u003ekey.  This usually\n  doesn\u0027t blow up because by the time cic is exited, all requests have\n  been drained and new requests are terminated before going through\n  elevator.  However, it can still be triggered by plug merge path\n  which doesn\u0027t grab queue_lock and thus can\u0027t check DEAD state\n  reliably.\n\nThis patch updates lookup locking such that,\n\n* Lookup is always performed under queue_lock.  This doesn\u0027t add any\n  more locking.  The only issue is cfq_allow_merge() which can be\n  called from plug merge path without holding any lock.  For now, this\n  is worked around by using cic of the request to merge into, which is\n  guaranteed to have the same ioc.  For longer term, I think it would\n  be best to separate out plug merge method from regular one.\n\n* Spurious ioc-\u003elock locking around cic lookup hint assignment\n  dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "216284c352a0061f5b20acff2c4e50fb43fea183",
      "tree": "01611f6d35c041a941269cb3dd3926c0711722ae",
      "parents": [
        "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d"
      ],
      "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: fix race condition in cic creation path and tighten locking\n\ncfq_get_io_context() would fail if multiple tasks race to insert cic\u0027s\nfor the same association.  This patch restructures\ncfq_get_io_context() such that slow path insertion race is handled\nproperly.\n\nNote that the restructuring also makes cfq_get_io_context() called\nunder queue_lock and performs both ioc and cfqd insertions while\nholding both ioc and queue locks.  This is part of on-going locking\ntightening and will be used to simplify synchronization rules.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\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": "283287a52e3c3f7f8f9da747f4b8c5202740d776",
      "tree": "b5b145bcdcefc24deb68cd91bb16582286dce171",
      "parents": [
        "09ac46c429464c919d04bb737b27edd84d944f02"
      ],
      "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: misc updates to cfq_io_context\n\nMake the following changes to prepare for ioc/cic management cleanup.\n\n* Add cic-\u003eq so that ioc can determine the associated queue without\n  querying cfq.  This will eventually replace -\u003ekey.\n\n* Factor out cfq_release_cic() from cic_free_func().  This function\n  assumes that the caller handled locking.\n\n* Rename __cfq_exit_single_io_context() to cfq_exit_cic() and make it\n  take only @cic.\n\n* Restructure cfq_cic_link() for future updates.\n\nThis patch doesn\u0027t introduce any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "09ac46c429464c919d04bb737b27edd84d944f02",
      "tree": "0fb3b7344ead06d08dbd77470445821817c439b7",
      "parents": [
        "6e736be7f282fff705db7c34a15313281b372a76"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block: misc updates to blk_get_queue()\n\n* blk_get_queue() is peculiar in that it returns 0 on success and 1 on\n  failure instead of 0 / -errno or boolean.  Update it such that it\n  returns %true on success and %false on failure.\n\n* Make sure the caller checks for the return value.\n\n* Separate out __blk_get_queue() which doesn\u0027t check whether @q is\n  dead and put it in blk.h.  This will be used later.\n\nThis patch doesn\u0027t introduce any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "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": "a73f730d013ff2788389fd0c46ad3e5510f124e6",
      "tree": "773987c8cbec56745d46f46382ad268ed91adf98",
      "parents": [
        "8ba61435d73f2274e12d4d823fde06735e8f6a54"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003ecic_index to q-\u003eid\n\ncfq allocates per-queue id using ida and uses it to index cic radix\ntree from io_context.  Move it to q-\u003eid and allocate on queue init and\nfree on queue release.  This simplifies cfq a bit and will allow for\nfurther improvements of io context life-cycle management.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "8ba61435d73f2274e12d4d823fde06735e8f6a54",
      "tree": "4b63993dc0fdc26918bd990fb47a142b8d24ef80",
      "parents": [
        "481a7d64790cd7ca61a8bbcbd9d017ce58e6fe39"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block: add missing blk_queue_dead() checks\n\nblk_insert_cloned_request(), blk_execute_rq_nowait() and\nblk_flush_plug_list() either didn\u0027t check whether the queue was dead\nor did it without holding queue_lock.  Update them so that dead state\nis checked while holding queue_lock.\n\nAFAICS, this plugs all holes (requeue doesn\u0027t matter as the request is\ntransitioning atomically from in_flight to queued).\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "481a7d64790cd7ca61a8bbcbd9d017ce58e6fe39",
      "tree": "2e8fe86240a5e95600cdad5de223050df37ab116",
      "parents": [
        "34f6055c80285e4efb3f602a9119db75239744dc"
      ],
      "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: fix drain_all condition in blk_drain_queue()\n\nWhen trying to drain all requests, blk_drain_queue() checked only\nq-\u003erq.count[]; however, this only tracks REQ_ALLOCED requests.  This\npatch updates blk_drain_queue() such that it looks at all the counters\nand queues so that request_queue is actually empty on completion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "34f6055c80285e4efb3f602a9119db75239744dc",
      "tree": "eb05185976c1941d196d259c3dfc2a4cfa7469d1",
      "parents": [
        "1ba64edef6051d2ec79bb2fbd3a0c8f0df00ab55"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block: add blk_queue_dead()\n\nThere are a number of QUEUE_FLAG_DEAD tests.  Add blk_queue_dead()\nmacro and use it.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "1ba64edef6051d2ec79bb2fbd3a0c8f0df00ab55",
      "tree": "1e8a8d5cfdfeff0f92490985bd125ab6666673b0",
      "parents": [
        "dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block, sx8: kill blk_insert_request()\n\nThe only user left for blk_insert_request() is sx8 and it can be\ntrivially switched to use blk_execute_rq_nowait() - special requests\naren\u0027t included in io stat and sx8 doesn\u0027t use block layer tagging.\nSwitch sx8 and kill blk_insert_requeset().\n\nThis patch doesn\u0027t introduce any functional difference.\n\nOnly compile tested.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "bb9d97b6dffa10cec5e1ce9adbce60f3c2b5eabc",
      "tree": "fb8351518fcfb91927e9e138f48284c44553f011",
      "parents": [
        "2f7ee5691eecb67c8108b92001a85563ea336ac5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "message": "cgroup: don\u0027t use subsys-\u003ecan_attach_task() or -\u003eattach_task()\n\nNow that subsys-\u003ecan_attach() and attach() take @tset instead of\n@task, they can handle per-task operations.  Convert\n-\u003ecan_attach_task() and -\u003eattach_task() users to use -\u003ecan_attach()\nand attach() instead.  Most converions are straight-forward.\nNoteworthy changes are,\n\n* In cgroup_freezer, remove unnecessary NULL assignments to unused\n  methods.  It\u0027s useless and very prone to get out of sync, which\n  already happened.\n\n* In cpuset, PF_THREAD_BOUND test is checked for each task.  This\n  doesn\u0027t make any practical difference but is conceptually cleaner.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\n"
    },
    {
      "commit": "5eb46851de3904cd1be9192fdacb8d34deadc1fc",
      "tree": "f0f0e6e6142cb50d8581477fb79a32f8f3a724ca",
      "parents": [
        "2984ff38ccf6cbc02a7a996a36c7d6f69f3c6146"
      ],
      "author": {
        "name": "Yasuaki Ishimatsu",
        "email": "isimatu.yasuaki@jp.fujitsu.com",
        "time": "Fri Dec 02 10:07:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 02 10:07:07 2011 +0100"
      },
      "message": "cfq-iosched: fix cfq_cic_link() race confition\n\ncfq_cic_link() has race condition. When some processes which shared ioc\nissue I/O to same block device simultaneously, cfq_cic_link() returns -EEXIST\nsometimes. The race condition might stop I/O by following steps:\n\nstep  1: Process A: Issue an I/O to /dev/sda\nstep  2: Process A: Get an ioc (iocA here) in get_io_context() which does not\n\t\t    linked with a cic for the device\nstep  3: Process A: Get a new cic for the device (cicA here) in\n\t\t    cfq_alloc_io_context()\n\nstep  4: Process B: Issue an I/O to /dev/sda\nstep  5: Process B: Get iocA in get_io_context() since process A and B share the\n\t\t    same ioc\nstep  6: Process B: Get a new cic for the device (cicB here) in\n\t\t    cfq_alloc_io_context() since iocA has not been linked with a\n\t\t    cic for the device yet\n\nstep  7: Process A: Link cicA to iocA in cfq_cic_link()\nstep  8: Process A: Dispatch I/O to driver and finish it\n\nstep  9: Process B: Try to link cicB to iocA in cfq_cic_link()\n\t\t    But it fails with showing \"cfq: cic link failed!\" kernel\n\t\t    message, since iocA has already linked with cicA at step 7.\nstep 10: Process B: Wait for finishig I/O in get_request_wait()\n\t\t    The function does not wake up, when there is no I/O to the\n\t\t    device.\n\nWhen cfq_cic_link() returns -EEXIST, it means ioc has already linked with cic.\nSo when cfq_cic_link() return -EEXIST, retry cfq_cic_lookup().\n\nSigned-off-by: Yasuaki Ishimatsu \u003cisimatu.yasuaki@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "2984ff38ccf6cbc02a7a996a36c7d6f69f3c6146",
      "tree": "95f4803da220a899cfb840fbbc1eb74e1b8ba003",
      "parents": [
        "59bd71a81b66990564eac69aedd28ad87a2c81f4"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Wed Nov 30 15:47:48 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Nov 30 15:47:48 2011 +0100"
      },
      "message": "cfq-iosched: free cic_index if blkio_alloc_blkg_stats fails\n\nIf we fail allocating the blkpg stats, we free cfqd and cfgq.\nBut we need to free the IDA cfqd-\u003ecic_index as well.\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5151412dd4338b273afdb107c3772528e9e67d92",
      "tree": "ce88b8d64d903cf99b2ee3f5c66af143d23b0bc6",
      "parents": [
        "b4bbb02934e4511d9083f15c23e90703482e84ad"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Wed Nov 23 10:59:13 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Nov 23 10:59:13 2011 +0100"
      },
      "message": "block: initialize request_queue\u0027s numa node during\n\nstruct request_queue is allocated with __GFP_ZERO so its \"node\" field is\nzero before initialization.  This causes an oops if node 0 is offline in\nthe page allocator because its zonelists are not initialized.  From Dave\nYoung\u0027s dmesg:\n\n\tSRAT: Node 1 PXM 2 0-d0000000\n\tSRAT: Node 1 PXM 2 100000000-330000000\n\tSRAT: Node 0 PXM 1 330000000-630000000\n\tInitmem setup node 1 0000000000000000-000000000affb000\n\t...\n\tBuilt 1 zonelists in Node order, mobility grouping on.\n\t...\n\tBUG: unable to handle kernel paging request at 0000000000001c08\n\tIP: [\u003cffffffff8111c355\u003e] __alloc_pages_nodemask+0xb5/0x870\n\nand __alloc_pages_nodemask+0xb5 translates to a NULL pointer on\nzonelist-\u003e_zonerefs.\n\nThe fix is to initialize q-\u003enode at the time of allocation so the correct\nnode is passed to the slab allocator later.\n\nSince blk_init_allocated_queue_node() is no longer needed, merge it with\nblk_init_allocated_queue().\n\n[rientjes@google.com: changelog, initializing q-\u003enode]\nCc: stable@vger.kernel.org [2.6.37+]\nReported-by: Dave Young \u003cdyoung@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nTested-by: Dave Young \u003cdyoung@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "019ceb7d5d252ce71001a157cf29f4ac28501b72",
      "tree": "53faeec57ba2149658b7eb7b85830f9bcdbe1540",
      "parents": [
        "a2c2a0e668e26e020731ce2a40e6474d1d37210a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Wed Nov 16 09:21:50 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Nov 16 09:21:50 2011 +0100"
      },
      "message": "block: add missed trace_block_plug\n\nAfter flush plug list, the list has no request, so we need to add a\ntrace_block_plug().\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "3540d5e89b2ac268fcfc9b07a50a9ba4acc2e5e5",
      "tree": "10bb06165130e4ffe90bd990fbba497be8fb4e8a",
      "parents": [
        "0007a4c90a11a5371c8b3f80b220fa402a399189"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Wed Nov 16 09:21:50 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Nov 16 09:21:50 2011 +0100"
      },
      "message": "block: avoid unnecessary plug list flush\n\nget_request_wait() could sleep and flush the plug list.  If the list is\nalready flushed, don\u0027t flush again.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6b76106d8ef31111d6fc469564b83b5f5542794f",
      "tree": "3df7d414b200aa07f083f70a1c4f5c8da7a11043",
      "parents": [
        "193733585692301f38d489b8ad8724c2f88349c0"
      ],
      "author": {
        "name": "Ben Hutchings",
        "email": "ben@decadent.org.uk",
        "time": "Sun Nov 13 19:58:09 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sun Nov 13 19:58:09 2011 +0100"
      },
      "message": "block: Always check length of all iov entries in blk_rq_map_user_iov()\n\nEven after commit 5478755616ae2ef1ce144dded589b62b2a50d575\n(\"block: check for proper length of iov entries earlier ...\")\nwe still won\u0027t check for zero-length entries after an unaligned\nentry.  Remove the break-statement, so all entries are checked.\n\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nCc: stable@vger.kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "d0985394e7fee6b25a7cc8335d45bc1c1a8ab2d3",
      "tree": "44f19c0500580fd0c3ea39f355c9636bec59d677",
      "parents": [
        "1ea6b8f48918282bdca0b32a34095504ee65bab5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Nov 10 09:03:55 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Nov 10 09:03:55 2011 +0100"
      },
      "message": "block: Revert \"[SCSI] genhd: add a new attribute \"alias\" in gendisk\"\n\nThis reverts commit a72c5e5eb738033938ab30d6a634b74d1d060f10.\n\nThe commit introduced alias for block devices which is intended to be\nused during logging although actual usage hasn\u0027t been committed yet.\nThis approach adds very limited benefit (raw log might be easier to\nfollow) which can be trivially implemented in userland but has a lot\nof problems.\n\nIt is much worse than netif renames because it doesn\u0027t rename the\nactual device but just adds conveninence name which isn\u0027t used\nuniversally or enforced.  Everything internal including device lookup\nand sysfs still uses the internal name and nothing prevents two\ndevices from using conflicting alias - ie. sda can have sdb as its\nalias.\n\nThis has been nacked by people working on device driver core, block\nlayer and kernel-userland interface and shouldn\u0027t have been\nupstreamed.  Revert it.\n\n http://thread.gmane.org/gmane.linux.kernel/1155104\n http://thread.gmane.org/gmane.linux.scsi/68632\n http://thread.gmane.org/gmane.linux.scsi/69776\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n Acked-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: \"James E.J. Bottomley\" \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Nao Nishijima \u003cnao.nishijima.xt@hitachi.com\u003e\nCc: Alan Cox \u003calan@linux.intel.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "3d0a8d10cfb4cc3d1877c29a866ee7d8a46aa2fa",
      "tree": "11a85044d1472f5972ae47ce10a2f446ad981e9f",
      "parents": [
        "b4fdcb02f1e39c27058a885905bd0277370ba441",
        "a0eda62552eba4e1f92d5354bb65c68fb6b45f87"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:22:14 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:22:14 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.2/drivers\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.2/drivers\u0027 of git://git.kernel.dk/linux-block: (30 commits)\n  virtio-blk: use ida to allocate disk index\n  hpsa: add small delay when using PCI Power Management to reset for kump\n  cciss: add small delay when using PCI Power Management to reset for kump\n  xen/blkback: Fix two races in the handling of barrier requests.\n  xen/blkback: Check for proper operation.\n  xen/blkback: Fix the inhibition to map pages when discarding sector ranges.\n  xen/blkback: Report VBD_WSECT (wr_sect) properly.\n  xen/blkback: Support \u0027feature-barrier\u0027 aka old-style BARRIER requests.\n  xen-blkfront: plug device number leak in xlblk_init() error path\n  xen-blkfront: If no barrier or flush is supported, use invalid operation.\n  xen-blkback: use kzalloc() in favor of kmalloc()+memset()\n  xen-blkback: fixed indentation and comments\n  xen-blkfront: fix a deadlock while handling discard response\n  xen-blkfront: Handle discard requests.\n  xen-blkback: Implement discard requests (\u0027feature-discard\u0027)\n  xen-blkfront: add BLKIF_OP_DISCARD and discard request struct\n  drivers/block/loop.c: remove unnecessary bdev argument from loop_clr_fd()\n  drivers/block/loop.c: emit uevent on auto release\n  drivers/block/cpqarray.c: use pci_dev-\u003erevision\n  loop: always allow userspace partitions and optionally support automatic scanning\n  ...\n\nFic up trivial header file includsion conflict in drivers/block/loop.c\n"
    },
    {
      "commit": "b4fdcb02f1e39c27058a885905bd0277370ba441",
      "tree": "fd4cfd1994f21f44afe5e7904681fb5ac09f81b8",
      "parents": [
        "044595d4e448305fbaec472eb7d22636d24e7d8c",
        "6dd9ad7df2019b1e33a372a501907db293ebcd0d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:06:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:06:58 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.2/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.2/core\u0027 of git://git.kernel.dk/linux-block: (29 commits)\n  block: don\u0027t call blk_drain_queue() if elevator is not up\n  blk-throttle: use queue_is_locked() instead of lockdep_is_held()\n  blk-throttle: Take blkcg-\u003elock while traversing blkcg-\u003epolicy_list\n  blk-throttle: Free up policy node associated with deleted rule\n  block: warn if tag is greater than real_max_depth.\n  block: make gendisk hold a reference to its queue\n  blk-flush: move the queue kick into\n  blk-flush: fix invalid BUG_ON in blk_insert_flush\n  block: Remove the control of complete cpu from bio.\n  block: fix a typo in the blk-cgroup.h file\n  block: initialize the bounce pool if high memory may be added later\n  block: fix request_queue lifetime handling by making blk_queue_cleanup() properly shutdown\n  block: drop @tsk from attempt_plug_merge() and explain sync rules\n  block: make get_request[_wait]() fail if queue is dead\n  block: reorganize throtl_get_tg() and blk_throtl_bio()\n  block: reorganize queue draining\n  block: drop unnecessary blk_get/put_queue() in scsi_cmd_ioctl() and blk_get_tg()\n  block: pass around REQ_* flags instead of broken down booleans during request alloc/free\n  block: move blk_throtl prototypes to block/blk.h\n  block: fix genhd refcounting in blkio_policy_parse_and_set()\n  ...\n\nFix up trivial conflicts due to \"mddev_t\" -\u003e \"struct mddev\" conversion\nand making the request functions be of type \"void\" instead of \"int\" in\n - drivers/md/{faulty.c,linear.c,md.c,md.h,multipath.c,raid0.c,raid1.c,raid10.c,raid5.c}\n - drivers/staging/zram/zram_drv.c\n"
    },
    {
      "commit": "6dd9ad7df2019b1e33a372a501907db293ebcd0d",
      "tree": "1a07cfde1f3ea94b3f5f62e688d21668ff7831e4",
      "parents": [
        "334c2b0b8b2ab186fa198413386cba41fffcb4f2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Nov 03 18:52:11 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Nov 03 18:52:11 2011 +0100"
      },
      "message": "block: don\u0027t call blk_drain_queue() if elevator is not up\n\nblk_cleanup_queue() may be called before elevator is set up on a\nqueue which triggers the following oops.\n\n BUG: unable to handle kernel NULL pointer dereference at           (null)\n IP: [\u003cffffffff8125a69c\u003e] elv_drain_elevator+0x1c/0x70\n ...\n Pid: 830, comm: kworker/0:2 Not tainted 3.1.0-next-20111025_64+ #1590\n Bochs Bochs\n RIP: 0010:[\u003cffffffff8125a69c\u003e]  [\u003cffffffff8125a69c\u003e] elv_drain_elevator+0x1c/0x70\n ...\n Call Trace:\n  [\u003cffffffff8125da92\u003e] blk_drain_queue+0x42/0x70\n  [\u003cffffffff8125db90\u003e] blk_cleanup_queue+0xd0/0x1c0\n  [\u003cffffffff81469640\u003e] md_free+0x50/0x70\n  [\u003cffffffff8126f43b\u003e] kobject_release+0x8b/0x1d0\n  [\u003cffffffff81270d56\u003e] kref_put+0x36/0xa0\n  [\u003cffffffff8126f2b7\u003e] kobject_put+0x27/0x60\n  [\u003cffffffff814693af\u003e] mddev_delayed_delete+0x2f/0x40\n  [\u003cffffffff81083450\u003e] process_one_work+0x100/0x3b0\n  [\u003cffffffff8108527f\u003e] worker_thread+0x15f/0x3a0\n  [\u003cffffffff81089937\u003e] kthread+0x87/0x90\n  [\u003cffffffff81621834\u003e] kernel_thread_helper+0x4/0x10\n\nFix it by making blk_cleanup_queue() check whether q-\u003eelevator is set\nup before invoking blk_drain_queue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-and-tested-by: Jiri Slaby \u003cjslaby@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6adb1236b5c1220987209aa68192e0cbad73e9fc",
      "tree": "7ad3f412de234888be103c807bffbe67457a865a",
      "parents": [
        "0c8d44f239b453517d25d0fcfd2737bb5cb34ef8"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Sep 28 18:26:05 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:31:13 2011 -0400"
      },
      "message": "block: Change module.h -\u003e export.h in bsg-lib.c\n\nThis file isn\u0027t using full modular functionality, and hence\ncan be \"downgraded\" to just using the export.h header.\n\nReported-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "d5decd3b9512e35c87492312a72443192eebdda9",
      "tree": "96aec1c137a09e3b8c4129862d117ce9775909fb",
      "parents": [
        "a0e5cc581b3fc0e0a909e3cab48d9ec286c2a276"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu May 26 16:00:52 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:31:12 2011 -0400"
      },
      "message": "block: add export.h to files using EXPORT_SYMBOL/THIS_MODULE macros\n\nThese files were getting \u003clinux/module.h\u003e via an implicit include\npath, but we want to crush those out of existence since they cost\ntime during compiles of processing thousands of lines of headers\nfor no reason.  Give them the lightweight header that just contains\nthe EXPORT_SYMBOL infrastructure.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "ec7ae517537ae5c7b0b2cd7f562dfa3e7a05b954",
      "tree": "e6b0c64a51a7c0aa0efd09d4f7a80872e3b1657a",
      "parents": [
        "97d2eb13a019ec09cc1a7ea2d3705c0b117b3c0d",
        "590134fa78fbdbe5fea78c7ae0b2c3364bc9572f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 28 16:44:18 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 28 16:44:18 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: (204 commits)\n  [SCSI] qla4xxx: export address/port of connection (fix udev disk names)\n  [SCSI] ipr: Fix BUG on adapter dump timeout\n  [SCSI] megaraid_sas: Fix instance access in megasas_reset_timer\n  [SCSI] hpsa: change confusing message to be more clear\n  [SCSI] iscsi class: fix vlan configuration\n  [SCSI] qla4xxx: fix data alignment and use nl helpers\n  [SCSI] iscsi class: fix link local mispelling\n  [SCSI] iscsi class: Replace iscsi_get_next_target_id with IDA\n  [SCSI] aacraid: use lower snprintf() limit\n  [SCSI] lpfc 8.3.27: Change driver version to 8.3.27\n  [SCSI] lpfc 8.3.27: T10 additions for SLI4\n  [SCSI] lpfc 8.3.27: Fix queue allocation failure recovery\n  [SCSI] lpfc 8.3.27: Change algorithm for getting physical port name\n  [SCSI] lpfc 8.3.27: Changed worst case mailbox timeout\n  [SCSI] lpfc 8.3.27: Miscellanous logic and interface fixes\n  [SCSI] megaraid_sas: Changelog and version update\n  [SCSI] megaraid_sas: Add driver workaround for PERC5/1068 kdump kernel panic\n  [SCSI] megaraid_sas: Add multiple MSI-X vector/multiple reply queue support\n  [SCSI] megaraid_sas: Add support for MegaRAID 9360/9380 12GB/s controllers\n  [SCSI] megaraid_sas: Clear FUSION_IN_RESET before enabling interrupts\n  ...\n"
    },
    {
      "commit": "334c2b0b8b2ab186fa198413386cba41fffcb4f2",
      "tree": "56c4648cd19c6a613ff653933697ee5cc3e18c87",
      "parents": [
        "a38eb630fa224d6fba8c14a4063174bc5e0f63bb"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Oct 25 15:51:48 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Oct 25 15:51:48 2011 +0200"
      },
      "message": "blk-throttle: use queue_is_locked() instead of lockdep_is_held()\n\nWe can\u0027t use the latter if !CONFIG_LOCKDEP.\n\nReported-by: Sedat Dilek \u003csedat.dilek@googlemail.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a38eb630fa224d6fba8c14a4063174bc5e0f63bb",
      "tree": "b86cb5b0aaa4b6d45d798b5155ed2089177f8206",
      "parents": [
        "e060f00beee23568fe2c4faf1e88ff22edefd7b2"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Oct 25 15:48:12 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Oct 25 15:48:12 2011 +0200"
      },
      "message": "blk-throttle: Take blkcg-\u003elock while traversing blkcg-\u003epolicy_list\n\nblkcg-\u003epolicy_list is protected by blkcg-\u003elock. Its not rcu protected\nlist. So even for readers, they need to take blkcg-\u003elock. There are\nfew functions which were reading the list without taking lock. Fix it.\n\nSigned-off-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": "e060f00beee23568fe2c4faf1e88ff22edefd7b2",
      "tree": "a953ca37996c2010c4e8dda7fbdd76b270a9b4df",
      "parents": [
        "5e08159197b5b98a6648a172008de23f420e6c11"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Oct 25 15:48:12 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Oct 25 15:48:12 2011 +0200"
      },
      "message": "blk-throttle: Free up policy node associated with deleted rule\n\nIf a rule is being deleted, free up associated policy node. Otherwise\nthat memory is leaked.\n\nSigned-off-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": "5e08159197b5b98a6648a172008de23f420e6c11",
      "tree": "7d9d9b275f8b62fa5069012df293e0af364bce86",
      "parents": [
        "83157223defe3be490cfea048e83451b6f254216"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Tue Oct 25 10:20:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Oct 25 10:20:05 2011 +0200"
      },
      "message": "block: warn if tag is greater than real_max_depth.\n\nIn case tag depth is reduced, it is max_depth not real_max_depth.\nSo we should allow a request with tag \u003e\u003d max_depth, but for a\ntag \u003e\u003d real_max_depth, there really should be some problem.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "83157223defe3be490cfea048e83451b6f254216",
      "tree": "fa484185d27765a13036bb43ae68d8cdb63f585b",
      "parents": [
        "9562ad9ab36df7ccef920d119f3b5100025db95f",
        "f992ae801a7dec34a4ed99a6598bbbbfb82af4fb"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:38 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:38 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-3.2/core\n"
    },
    {
      "commit": "f992ae801a7dec34a4ed99a6598bbbbfb82af4fb",
      "tree": "5c8892f67867cb09e9c3c046f881e56200926ff8",
      "parents": [
        "e67b77c791ca2778198c9e7088f3266ed2da7a55"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Oct 17 13:42:43 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:31 2011 +0200"
      },
      "message": "block: make gendisk hold a reference to its queue\n\nThe following command sequence triggers an oops.\n\n# mount /dev/sdb1 /mnt\n# echo 1 \u003e /sys/class/scsi_device/0\\:0\\:1\\:0/device/delete\n# umount /mnt\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n\n Pid: 791, comm: umount Not tainted 3.1.0-rc3-work+ #8 Bochs Bochs\n RIP: 0010:[\u003cffffffff810d0879\u003e]  [\u003cffffffff810d0879\u003e] __lock_acquire+0x389/0x1d60\n...\n Call Trace:\n  [\u003cffffffff810d2845\u003e] lock_acquire+0x95/0x140\n  [\u003cffffffff81aed87b\u003e] _raw_spin_lock+0x3b/0x50\n  [\u003cffffffff811573bc\u003e] bdi_lock_two+0x5c/0x70\n  [\u003cffffffff811c2f6c\u003e] bdev_inode_switch_bdi+0x4c/0xf0\n  [\u003cffffffff811c3fcb\u003e] __blkdev_put+0x11b/0x1d0\n  [\u003cffffffff811c4010\u003e] __blkdev_put+0x160/0x1d0\n  [\u003cffffffff811c40df\u003e] blkdev_put+0x5f/0x190\n  [\u003cffffffff8118f18d\u003e] kill_block_super+0x4d/0x80\n  [\u003cffffffff8118f4a5\u003e] deactivate_locked_super+0x45/0x70\n  [\u003cffffffff8119003a\u003e] deactivate_super+0x4a/0x70\n  [\u003cffffffff811ac4ad\u003e] mntput_no_expire+0xed/0x130\n  [\u003cffffffff811acf2e\u003e] sys_umount+0x7e/0x3a0\n  [\u003cffffffff81aeeeab\u003e] system_call_fastpath+0x16/0x1b\n\nThis is because bdev holds on to disk but disk doesn\u0027t pin the\nassociated queue.  If a SCSI device is removed while the device is\nstill open, the sdev puts the base reference to the queue on release.\nWhen the bdev is finally released, the associated queue is already\ngone along with the bdi and bdev_inode_switch_bdi() ends up\ndereferencing already freed bdi.\n\nEven if it were not for this bug, disk not holding onto the associated\nqueue is very unusual and error-prone.\n\nFix it by making add_disk() take an extra reference to its queue and\nput it on disk_release() and ensuring that disk and its fops owner are\nput in that order after all accesses to the disk and queue are\ncomplete.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "e67b77c791ca2778198c9e7088f3266ed2da7a55",
      "tree": "9c65ce6b5679d1f45fa1e4720430ea17b11fa2aa",
      "parents": [
        "834f9f61a525d2f6d3d0c93894e26326c8d3ceed"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Mon Oct 17 12:57:23 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:31 2011 +0200"
      },
      "message": "blk-flush: move the queue kick into\n\nA dm-multipath user reported[1] a problem when trying to boot\na kernel with commit 4853abaae7e4a2af938115ce9071ef8684fb7af4\n(block: fix flush machinery for stacking drivers with differring\nflush flags) applied.  It turns out that an empty flush request\ncan be sent into blk_insert_flush.  When the BUG_ON was fixed\nto allow for this, I/O on the underlying device would stall.  The\nreason is that blk_insert_cloned_request does not kick the queue.\nIn the aforementioned commit, I had added a special case to\nkick the queue if data was sent down but the queue flags did\nnot require a flush.  A better solution is to push the queue\nkick up into blk_insert_cloned_request.\n\nThis patch, along with a follow-on which fixes the BUG_ON, fixes\nthe issue reported.\n\n[1] http://www.redhat.com/archives/dm-devel/2011-September/msg00154.html\n\nReported-by: Christophe Saout \u003cchristophe@saout.de\u003e\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n\nStable note: 3.1\nCc: stable@vger.kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "834f9f61a525d2f6d3d0c93894e26326c8d3ceed",
      "tree": "73e973ad0c01ce4ac0317f089c9cbb3707186834",
      "parents": [
        "456be1484ffc72a24bdb4200b5847c4fa90139d9"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Mon Oct 17 12:57:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:24:30 2011 +0200"
      },
      "message": "blk-flush: fix invalid BUG_ON in blk_insert_flush\n\nA user reported a regression due to commit\n4853abaae7e4a2af938115ce9071ef8684fb7af4 (block: fix flush\nmachinery for stacking drivers with differring flush flags).\nPart of the problem is that blk_insert_flush required a\nsingle bio be attached to the request.  In reality, having\nno attached bio is also a valid case, as can be observed with\nan empty flush.\n\n[1] http://www.redhat.com/archives/dm-devel/2011-September/msg00154.html\n\nReported-by: Christophe Saout \u003cchristophe@saout.de\u003e\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n\nStable note: 3.1\nCc: stable@vger.kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9562ad9ab36df7ccef920d119f3b5100025db95f",
      "tree": "b5e32ca469cbefca4122c1a08db80cdb12e655fb",
      "parents": [
        "e890413af4c2dfebf5432ef30cc70cb11dad3213"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Oct 24 16:11:30 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:11:30 2011 +0200"
      },
      "message": "block: Remove the control of complete cpu from bio.\n\nbio originally has the functionality to set the complete cpu, but\nit is broken.\n\nChirstoph said that \"This code is unused, and from the all the\ndiscussions lately pretty obviously broken.  The only thing keeping\nit serves is creating more confusion and possibly more bugs.\"\n\nAnd Jens replied with \"We can kill bio_set_completion_cpu(). I\u0027m fine\nwith leaving cpu control to the request based drivers, they are the\nonly ones that can toggle the setting anyway\".\n\nSo this patch tries to remove all the work of controling complete cpu\nfrom a bio.\n\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "e890413af4c2dfebf5432ef30cc70cb11dad3213",
      "tree": "26649bfe90854128ce87b57ef8aa3ca985454e78",
      "parents": [
        "3bcfeaf93f44112053e1c36aa681d9efc1185ddc"
      ],
      "author": {
        "name": "Jie Liu",
        "email": "jeff.liu@oracle.com",
        "time": "Mon Oct 24 16:08:38 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:08:38 2011 +0200"
      },
      "message": "block: fix a typo in the blk-cgroup.h file\n\nbyptes -\u003e bytes.\n\nSigned-off-by: Jie Liu \u003cjeff.liu@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c9a929dde3913780b5c416f4bb9d9ed804f509ce",
      "tree": "1acadc374d8f1faebdf07f08fae0993a38a8fd0d",
      "parents": [
        "bd87b5898a72b1aef6acf3705c61c9f6372adf0c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:42:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:42:16 2011 +0200"
      },
      "message": "block: fix request_queue lifetime handling by making blk_queue_cleanup() properly shutdown\n\nrequest_queue is refcounted but actually depdends on lifetime\nmanagement from the queue owner - on blk_cleanup_queue(), block layer\nexpects that there\u0027s no request passing through request_queue and no\nnew one will.\n\nThis is fundamentally broken.  The queue owner (e.g. SCSI layer)\ndoesn\u0027t have a way to know whether there are other active users before\ncalling blk_cleanup_queue() and other users (e.g. bsg) don\u0027t have any\nguarantee that the queue is and would stay valid while it\u0027s holding a\nreference.\n\nWith delay added in blk_queue_bio() before queue_lock is grabbed, the\nfollowing oops can be easily triggered when a device is removed with\nin-flight IOs.\n\n sd 0:0:1:0: [sdb] Stopping disk\n ata1.01: disabled\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n\n Pid: 648, comm: test_rawio Not tainted 3.1.0-rc3-work+ #56 Bochs Bochs\n RIP: 0010:[\u003cffffffff8137d651\u003e]  [\u003cffffffff8137d651\u003e] elv_rqhash_find+0x61/0x100\n ...\n Process test_rawio (pid: 648, threadinfo ffff880019efa000, task ffff880019ef8a80)\n ...\n Call Trace:\n  [\u003cffffffff8137d774\u003e] elv_merge+0x84/0xe0\n  [\u003cffffffff81385b54\u003e] blk_queue_bio+0xf4/0x400\n  [\u003cffffffff813838ea\u003e] generic_make_request+0xca/0x100\n  [\u003cffffffff81383994\u003e] submit_bio+0x74/0x100\n  [\u003cffffffff811c53ec\u003e] dio_bio_submit+0xbc/0xc0\n  [\u003cffffffff811c610e\u003e] __blockdev_direct_IO+0x92e/0xb40\n  [\u003cffffffff811c39f7\u003e] blkdev_direct_IO+0x57/0x60\n  [\u003cffffffff8113b1c5\u003e] generic_file_aio_read+0x6d5/0x760\n  [\u003cffffffff8118c1ca\u003e] do_sync_read+0xda/0x120\n  [\u003cffffffff8118ce55\u003e] vfs_read+0xc5/0x180\n  [\u003cffffffff8118cfaa\u003e] sys_pread64+0x9a/0xb0\n  [\u003cffffffff81afaf6b\u003e] system_call_fastpath+0x16/0x1b\n\nThis happens because blk_queue_cleanup() destroys the queue and\nelevator whether IOs are in progress or not and DEAD tests are\nsprinkled in the request processing path without proper\nsynchronization.\n\nSimilar problem exists for blk-throtl.  On queue cleanup, blk-throtl\nis shutdown whether it has requests in it or not.  Depending on\ntiming, it either oopses or throttled bios are lost putting tasks\nwhich are waiting for bio completion into eternal D state.\n\nThe way it should work is having the usual clear distinction between\nshutdown and release.  Shutdown drains all currently pending requests,\nmarks the queue dead, and performs partial teardown of the now\nunnecessary part of the queue.  Even after shutdown is complete,\nreference holders are still allowed to issue requests to the queue\nalthough they will be immmediately failed.  The rest of teardown\nhappens on release.\n\nThis patch makes the following changes to make blk_queue_cleanup()\nbehave as proper shutdown.\n\n* QUEUE_FLAG_DEAD is now set while holding both q-\u003eexit_mutex and\n  queue_lock.\n\n* Unsynchronized DEAD check in generic_make_request_checks() removed.\n  This couldn\u0027t make any meaningful difference as the queue could die\n  after the check.\n\n* blk_drain_queue() updated such that it can drain all requests and is\n  now called during cleanup.\n\n* blk_throtl updated such that it checks DEAD on grabbing queue_lock,\n  drains all throttled bios during cleanup and free td when queue is\n  released.\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": "bd87b5898a72b1aef6acf3705c61c9f6372adf0c",
      "tree": "a1954f352d16307d0846e42b2246be6b1594fb9b",
      "parents": [
        "da8303c63b8de73619884382d6e573d44aae0810"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:33:08 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:33:08 2011 +0200"
      },
      "message": "block: drop @tsk from attempt_plug_merge() and explain sync rules\n\nattempt_plug_merge() accesses elevator without holding queue_lock and\nmay call into -\u003eelevator_bio_merge_fn().  The elvator is guaranteed to\nbe valid because it\u0027s accessed iff the plugged list has requests and\nelevator is never exited with live requests, so as long as the\nelevator method can deal with unlocked access, this is safe.\n\nExplain the sync rules around attempt_plug_merge() and drop the\nunnecessary @tsk parameter.\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": "da8303c63b8de73619884382d6e573d44aae0810",
      "tree": "d8560fa6452c5a7583aa21a2e5505d68899e2df5",
      "parents": [
        "bc16a4f933bc5ed50826b20561e4c3515061998b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:33:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:33:05 2011 +0200"
      },
      "message": "block: make get_request[_wait]() fail if queue is dead\n\nCurrently get_request[_wait]() allocates request whether queue is dead\nor not.  This patch makes get_request[_wait]() return NULL if @q is\ndead.  blk_queue_bio() is updated to fail the submitted bio if request\nallocation fails.  While at it, add docbook comments for\nget_request[_wait]().\n\nNote that the current code has rather unclear (there are spurious DEAD\ntests scattered around) assumption that the owner of a queue\nguarantees that no request travels block layer if the queue is dead\nand this patch in itself doesn\u0027t change much; however, this will allow\nfixing the broken assumption in the next patch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "bc16a4f933bc5ed50826b20561e4c3515061998b",
      "tree": "07c0dc65408932176c32df08e7a8adbbc2ca1d07",
      "parents": [
        "e3c78ca524d230bc145e902625e88c392a58ddf3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:33:01 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:33:01 2011 +0200"
      },
      "message": "block: reorganize throtl_get_tg() and blk_throtl_bio()\n\nblk_throtl_bio() and throtl_get_tg() have rather unusual interface.\n\n* throtl_get_tg() returns pointer to a valid tg or ERR_PTR(-ENODEV),\n  and drops queue_lock in the latter case.  Different locking context\n  depending on return value is error-prone and DEAD state is scheduled\n  to be protected by queue_lock anyway.  Move DEAD check inside\n  queue_lock and return valid tg or NULL.\n\n* blk_throtl_bio() indicates return status both with its return value\n  and in/out param **@bio.  The former is used to indicate whether\n  queue is found to be dead during throtl processing.  The latter\n  whether the bio is throttled.\n\n  There\u0027s no point in returning DEAD check result from\n  blk_throtl_bio().  The queue can die after blk_throtl_bio() is\n  finished but before make_request_fn() grabs queue lock.\n\n  Make it take *@bio instead and return boolean result indicating\n  whether the request is throttled or not.\n\nThis patch doesn\u0027t cause any visible functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "e3c78ca524d230bc145e902625e88c392a58ddf3",
      "tree": "833eb544dd4180fd626f60da17788aae7830f4dc",
      "parents": [
        "315fceee81155ef2aeed9316ca72aeea9347db5c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:32:38 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:32:38 2011 +0200"
      },
      "message": "block: reorganize queue draining\n\nReorganize queue draining related code in preparation of queue exit\nchanges.\n\n* Factor out actual draining from elv_quiesce_start() to\n  blk_drain_queue().\n\n* Make elv_quiesce_start/end() responsible for their own locking.\n\n* Replace open-coded ELVSWITCH clearing in elevator_switch() with\n  elv_quiesce_end().\n\nThis patch doesn\u0027t cause any visible functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "315fceee81155ef2aeed9316ca72aeea9347db5c",
      "tree": "91ac02284b6737e6b65e855da771f52dbb3ad32d",
      "parents": [
        "75eb6c372d41d6d140b893873f6687d78c987a44"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:25 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:25 2011 +0200"
      },
      "message": "block: drop unnecessary blk_get/put_queue() in scsi_cmd_ioctl() and blk_get_tg()\n\nblk_get/put_queue() in scsi_cmd_ioctl() and throtl_get_tg() are\ncompletely bogus.  The caller must have a reference to the queue on\nentry and taking an extra reference doesn\u0027t change anything.\n\nFor scsi_cmd_ioctl(), the only effect is that it ends up checking\nQUEUE_FLAG_DEAD on entry; however, this is bogus as queue can die\nright after blk_get_queue().  Dead queue should be and is handled in\nrequest issue path (it\u0027s somewhat broken now but that\u0027s a separate\nproblem and doesn\u0027t affect this one much).\n\nthrotl_get_tg() incorrectly assumes that q is rcu freed.  Also, it\ndoesn\u0027t check return value of blk_get_queue().  If the queue is\nalready dead, it ends up doing an extra put.\n\nDrop them.\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": "75eb6c372d41d6d140b893873f6687d78c987a44",
      "tree": "51864b2efe0415ad30226f218bc56c1a505bfb75",
      "parents": [
        "bc9fcbf9cb8ec76d340da16fbf48a9a316e14c52"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:22 2011 +0200"
      },
      "message": "block: pass around REQ_* flags instead of broken down booleans during request alloc/free\n\nblk_alloc_request() and freed_request() take different combinations of\nREQ_* @flags, @priv and @is_sync when @flags is superset of the latter\ntwo.  Make them take @flags only.  This cleans up the code a bit and\nwill ease updating allocation related REQ_* flags.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "bc9fcbf9cb8ec76d340da16fbf48a9a316e14c52",
      "tree": "89376b8811a0d440328dc4f31ef062c811db1cc1",
      "parents": [
        "ece84241b93c4693bfe0a8ec9a043a16d216d0cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:18 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:18 2011 +0200"
      },
      "message": "block: move blk_throtl prototypes to block/blk.h\n\nblk_throtl interface is block internal and there\u0027s no reason to have\nthem in linux/blkdev.h.  Move them to block/blk.h.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "ece84241b93c4693bfe0a8ec9a043a16d216d0cd",
      "tree": "4bddd724aaecaf391488d3194d59cef80ef0c9eb",
      "parents": [
        "523e1d399ce0e23bec562abe2b2f8d297af81161"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:15 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:15 2011 +0200"
      },
      "message": "block: fix genhd refcounting in blkio_policy_parse_and_set()\n\nblkio_policy_parse_and_set() calls blkio_check_dev_num() to check\nwhether the given dev_t is valid.  blkio_check_dev_num() uses\nget_gendisk() for verification but never puts the returned genhd\nleaking the reference.\n\nThis patch collapses blkio_check_dev_num() into its caller and updates\nit such that the genhd is put before returning.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "523e1d399ce0e23bec562abe2b2f8d297af81161",
      "tree": "7d7c89d0a51fa4db19cc0b3436875c80406e37df",
      "parents": [
        "5c04b426f2e8b46cfc7969a35b2631063a3c646c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Oct 19 14:31:07 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:31:07 2011 +0200"
      },
      "message": "block: make gendisk hold a reference to its queue\n\nThe following command sequence triggers an oops.\n\n# mount /dev/sdb1 /mnt\n# echo 1 \u003e /sys/class/scsi_device/0\\:0\\:1\\:0/device/delete\n# umount /mnt\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n\n Pid: 791, comm: umount Not tainted 3.1.0-rc3-work+ #8 Bochs Bochs\n RIP: 0010:[\u003cffffffff810d0879\u003e]  [\u003cffffffff810d0879\u003e] __lock_acquire+0x389/0x1d60\n...\n Call Trace:\n  [\u003cffffffff810d2845\u003e] lock_acquire+0x95/0x140\n  [\u003cffffffff81aed87b\u003e] _raw_spin_lock+0x3b/0x50\n  [\u003cffffffff811573bc\u003e] bdi_lock_two+0x5c/0x70\n  [\u003cffffffff811c2f6c\u003e] bdev_inode_switch_bdi+0x4c/0xf0\n  [\u003cffffffff811c3fcb\u003e] __blkdev_put+0x11b/0x1d0\n  [\u003cffffffff811c4010\u003e] __blkdev_put+0x160/0x1d0\n  [\u003cffffffff811c40df\u003e] blkdev_put+0x5f/0x190\n  [\u003cffffffff8118f18d\u003e] kill_block_super+0x4d/0x80\n  [\u003cffffffff8118f4a5\u003e] deactivate_locked_super+0x45/0x70\n  [\u003cffffffff8119003a\u003e] deactivate_super+0x4a/0x70\n  [\u003cffffffff811ac4ad\u003e] mntput_no_expire+0xed/0x130\n  [\u003cffffffff811acf2e\u003e] sys_umount+0x7e/0x3a0\n  [\u003cffffffff81aeeeab\u003e] system_call_fastpath+0x16/0x1b\n\nThis is because bdev holds on to disk but disk doesn\u0027t pin the\nassociated queue.  If a SCSI device is removed while the device is\nstill open, the sdev puts the base reference to the queue on release.\nWhen the bdev is finally released, the associated queue is already\ngone along with the bdi and bdev_inode_switch_bdi() ends up\ndereferencing already freed bdi.\n\nEven if it were not for this bug, disk not holding onto the associated\nqueue is very unusual and error-prone.\n\nFix it by making add_disk() take an extra reference to its queue and\nput it on disk_release() and ensuring that disk and its fops owner are\nput in that order after all accesses to the disk and queue are\ncomplete.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5c04b426f2e8b46cfc7969a35b2631063a3c646c",
      "tree": "2d27d9f5d2fe5d5e8fbc01a467ec58bcb50235c1",
      "parents": [
        "499337bb6511e665a236a6a947f819d98ea340c6",
        "899e3ee404961a90b828ad527573aaaac39f0ab1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "message": "Merge branch \u0027v3.1-rc10\u0027 into for-3.2/core\n\nConflicts:\n\tblock/blk-core.c\n\tinclude/linux/blkdev.h\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "777eb1bf15b8532c396821774bf6451e563438f5",
      "tree": "8363e63bae76eb049f4c8d0460ef8e1f74f0ca91",
      "parents": [
        "a102a9ece5489e1718cd7543aa079082450ac3a2"
      ],
      "author": {
        "name": "Hannes Reinecke",
        "email": "hare@suse.de",
        "time": "Wed Sep 28 08:07:01 2011 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Sep 28 08:07:01 2011 -0600"
      },
      "message": "block: Free queue resources at blk_release_queue()\n\nA kernel crash is observed when a mounted ext3/ext4 filesystem is\nphysically removed. The problem is that blk_cleanup_queue() frees up\nsome resources eg by calling elevator_exit(), which are not checked for\nin normal operation. So we should rather move these calls to the\ndestructor function blk_release_queue() as at that point all remaining\nreferences are gone. However, in doing so we have to ensure that any\nexternally supplied queue_lock is disconnected as the driver might free\nup the lock after the call of blk_cleanup_queue(),\n\nSigned-off-by: Hannes Reinecke \u003chare@suse.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "d11bb4462c4cc6ddd45c6927c617ad79fa6fb8fc",
      "tree": "248949fdd3c8894db0e161e9338a3a984c1ce0f7",
      "parents": [
        "8ad6a56f5679a987bfeacad1bd818a2a381aa98e"
      ],
      "author": {
        "name": "Wanlong Gao",
        "email": "gaowanlong@cn.fujitsu.com",
        "time": "Wed Sep 21 10:22:10 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Sep 21 10:22:10 2011 +0200"
      },
      "message": "blk-cgroup: be able to remove the record of unplugged device\n\nThe bug is we\u0027re not able to remove the device from blkio cgroup\u0027s\nper-device control files if it gets unplugged.\n\nTo reproduce the bug:\n\n  # mount -t cgroup -o blkio xxx /cgroup\n  # cd /cgroup\n  # echo \"8:0 1000\" \u003e blkio.throttle.read_bps_device\n  # unplug the device\n  # cat blkio.throttle.read_bps_device\n  8:0\t1000\n  # echo \"8:0 0\" \u003e blkio.throttle.read_bps_device\n  -bash: echo: write error: No such device\n\nAfter patching, the device removal will succeed.\n\nThanks for the comments of Paul, Zefan, and Vivek.\n\nSigned-off-by: Wanlong Gao \u003cgaowanlong@cn.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "499337bb6511e665a236a6a947f819d98ea340c6",
      "tree": "40ec21dd59a8108a731c991d9d590540d42d23ff",
      "parents": [
        "75df713627f28f88b901b329c8857747545fd4ab"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Sep 21 10:01:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Sep 21 10:01:22 2011 +0200"
      },
      "message": "block/blk-sysfs.c: fix kerneldoc references\n\nThe kerneldoc for blk_release_queue() is referring to blk_cleanup_queue().\n\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@google.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "75df713627f28f88b901b329c8857747545fd4ab",
      "tree": "0986bc4d82595dae4a3fabb15fce4780c053f004",
      "parents": [
        "27a84d54c02591e815d291ae0ee4bfb9cfd21065"
      ],
      "author": {
        "name": "Suresh Jayaraman",
        "email": "sjayaraman@suse.de",
        "time": "Wed Sep 21 10:00:16 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Sep 21 10:00:16 2011 +0200"
      },
      "message": "block: document blk-plug\n\nThus spake Andrew Morton:\n\n\"And I have the usual maintainability whine.  If someone comes up to\nvmscan.c and sees it calling blk_start_plug(), how are they supposed to\nwork out why that call is there?  They go look at the blk_start_plug()\ndefinition and it is undocumented.  I think we can do better than this?\"\n\nAdapted from the LWN article - http://lwn.net/Articles/438256/ by Jens\nAxboe and from an earlier attempt by Shaohua Li to document blk-plug.\n\n[akpm@linux-foundation.org: grammatical and spelling tweaks]\nSigned-off-by: Suresh Jayaraman \u003csjayaraman@suse.de\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Jonathan Corbet \u003ccorbet@lwn.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@google.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "27a84d54c02591e815d291ae0ee4bfb9cfd21065",
      "tree": "a65129a8c7053241fe51886f279bb4522599b6b6",
      "parents": [
        "5a7bbad27a410350e64a2d7f5ec18fc73836c14f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Sep 15 14:01:40 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Sep 15 14:01:40 2011 +0200"
      },
      "message": "block: refactor generic_make_request\n\nMove all the checks performed on a bio into a new helper, and call it as\nsoon as bio is submitted even if it is a re-submission from -\u003emake_request.\n\nWe explicitly mark the new helper as beeing non-inlined as the stack\nusage for printing the block device name in the failure case is quite\nhigh and this a patch where we have to be extremely conservative about\nstack usage.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    }
  ],
  "next": "8ad6a56f5679a987bfeacad1bd818a2a381aa98e"
}
