)]}'
{
  "log": [
    {
      "commit": "ff26eaadf4d914e397872b99885d45756104e9ae",
      "tree": "5020f3e4a14ab68f6d027366e719b7fb5193123c",
      "parents": [
        "0b7877d4eea3f93e3dd941999522bbd8c538cb53"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed May 23 12:16:21 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed May 23 12:16:21 2012 +0200"
      },
      "message": "blkcg: tg_stats_alloc_lock is an irq lock\n\ntg_stats_alloc_lock nests inside queue lock and should always be held\nwith irq disabled.  throtl_pd_{init|exit}() were using non-irqsafe\nspinlock ops which triggered inverse lock ordering via irq warning via\nRCU freeing of blkg invoking throtl_pd_exit() w/o disabling IRQ.\n\nUpdate both functions to use irq safe operations.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nLKML-Reference: \u003c1335339396.16988.80.camel@lappy\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "0b7877d4eea3f93e3dd941999522bbd8c538cb53",
      "tree": "ade6d4e411b9b9b569c802e3b2179826162c934c",
      "parents": [
        "bd1a68b59c8e3bce45fb76632c64e1e063c3962d",
        "69964ea4c7b68c9399f7977aa5b9aa6539a6a98a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue May 01 14:29:55 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue May 01 14:29:55 2012 +0200"
      },
      "message": "Merge tag \u0027v3.4-rc5\u0027 into for-3.5/core\n\nThe core branch is behind driver commits that we want to build\non for 3.5, hence I\u0027m pulling in a later -rc.\n\nLinux 3.4-rc5\n\nConflicts:\n\tDocumentation/feature-removal-schedule.txt\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f9fcc2d3919b8eb575b3cee9274feefafb641bca",
      "tree": "bb3eaeb993b21ba352c0967488a6955a40314d97",
      "parents": [
        "f95a04afa80c0f4ddd645ef6a84ed118b5d1ad46"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 16 13:57:27 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:17 2012 +0200"
      },
      "message": "blkcg: collapse blkcg_policy_ops into blkcg_policy\n\nThere\u0027s no reason to keep blkcg_policy_ops separate.  Collapse it into\nblkcg_policy.\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": "f95a04afa80c0f4ddd645ef6a84ed118b5d1ad46",
      "tree": "2428dacf9bab1eb643628c872aed3092704f7fb2",
      "parents": [
        "3c798398e393e5f9502dbab2b51e6c25e2e8f2ac"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 16 13:57:26 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:17 2012 +0200"
      },
      "message": "blkcg: embed struct blkg_policy_data in policy specific data\n\nCurrently blkg_policy_data carries policy specific data as char flex\narray instead of being embedded in policy specific data.  This was\nforced by oddities around blkg allocation which are all gone now.\n\nThis patch makes blkg_policy_data embedded in policy specific data -\nthrotl_grp and cfq_group so that it\u0027s more conventional and consistent\nwith how io_cq is handled.\n\n* blkcg_policy-\u003epdata_size is renamed to -\u003epd_size.\n\n* Functions which used to take void *pdata now takes struct\n  blkg_policy_data *pd.\n\n* blkg_to_pdata/pdata_to_blkg() updated to blkg_to_pd/pd_to_blkg().\n\n* Dummy struct blkg_policy_data definition added.  Dummy\n  pdata_to_blkg() definition was unused and inconsistent with the\n  non-dummy version - correct dummy pd_to_blkg() added.\n\n* throtl and cfq updated accordingly.\n\n* As dummy blkg_to_pd/pd_to_blkg() are provided,\n  blkg_to_cfqg/cfqg_to_blkg() don\u0027t need to be ifdef\u0027d.  Moved outside\n  ifdef block.\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": "3c798398e393e5f9502dbab2b51e6c25e2e8f2ac",
      "tree": "d6f638e6a25dec4887e64bcc35b98bc394cb974f",
      "parents": [
        "36558c8a30e121f97b5852ae33e28081af21bdbf"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 16 13:57:25 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:17 2012 +0200"
      },
      "message": "blkcg: mass rename of blkcg API\n\nDuring the recent blkcg cleanup, most of blkcg API has changed to such\nextent that mass renaming wouldn\u0027t cause any noticeable pain.  Take\nthe chance and cleanup the naming.\n\n* Rename blkio_cgroup to blkcg.\n\n* Drop blkio / blkiocg prefixes and consistently use blkcg.\n\n* Rename blkio_group to blkcg_gq, which is consistent with io_cq but\n  keep the blkg prefix / variable name.\n\n* Rename policy method type and field names to signify they\u0027re dealing\n  with policy data.\n\n* Rename blkio_policy_type to blkcg_policy.\n\nThis patch doesn\u0027t cause 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": "54e7ed12bad1e3aa2a28558fab6850240465f973",
      "tree": "907eb0451782f4eb1ad3f9236e51ec4acb7fb941",
      "parents": [
        "c94bed89995e638e43a6663177358b9d20617361"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 16 13:57:23 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:16 2012 +0200"
      },
      "message": "blkcg: remove blkio_group-\u003epath[]\n\nblkio_group-\u003epath[] stores the path of the associated cgroup and is\nused only for debug messages.  Just format the path from blkg-\u003ecgroup\nwhen printing debug messages.\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": "3c96cb32d318f323c1bf972a4c66821f8499e34d",
      "tree": "e76d0437f487405d8a22a727b8085696b949179d",
      "parents": [
        "a2b1693bac45ea3fe3ba612fd22c45f17449f610"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:34 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: drop stuff unused after per-queue policy activation update\n\n* All_q_list is unused.  Drop all_q_{mutex|list}.\n\n* @for_root of blkg_lookup_create() is always %false when called from\n  outside blk-cgroup.c proper.  Factor out __blkg_lookup_create() so\n  that it doesn\u0027t check whether @q is bypassing and use the\n  underscored version for the @for_root callsite.\n\n* blkg_destroy_all() is used only from blkcg proper and @destroy_root\n  is always %true.  Make it static and drop @destroy_root.\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": "a2b1693bac45ea3fe3ba612fd22c45f17449f610",
      "tree": "2e05859caab6453efbc85d584dd72dca7ef03cd0",
      "parents": [
        "03d8e11142a893ad322285d3c8a08e88b570cda1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:33 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: implement per-queue policy activation\n\nAll blkcg policies were assumed to be enabled on all request_queues.\nDue to various implementation obstacles, during the recent blkcg core\nupdates, this was temporarily implemented as shooting down all !root\nblkgs on elevator switch and policy [de]registration combined with\nhalf-broken in-place root blkg updates.  In addition to being buggy\nand racy, this meant losing all blkcg configurations across those\nevents.\n\nNow that blkcg is cleaned up enough, this patch replaces the temporary\nimplementation with proper per-queue policy activation.  Each blkcg\npolicy should call the new blkcg_[de]activate_policy() to enable and\ndisable the policy on a specific queue.  blkcg_activate_policy()\nallocates and installs policy data for the policy for all existing\nblkgs.  blkcg_deactivate_policy() does the reverse.  If a policy is\nnot enabled for a given queue, blkg printing / config functions skip\nthe respective blkg for the queue.\n\nblkcg_activate_policy() also takes care of root blkg creation, and\ncfq_init_queue() and blk_throtl_init() are updated accordingly.\n\nThis replaces blkcg_bypass_{start|end}() and update_root_blkg_pd()\nunnecessary.  Dropped.\n\nv2: cfq_init_queue() was returning uninitialized @ret on root_group\n    alloc failure if !CONFIG_CFQ_GROUP_IOSCHED.  Fixed.\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": "03d8e11142a893ad322285d3c8a08e88b570cda1",
      "tree": "0f6117ffdb0ad9565a165a98a8d4985ced094eb1",
      "parents": [
        "b82d4b197c782ced82a8b7b76664125d2d3c156c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:32 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: add request_queue-\u003eroot_blkg\n\nWith per-queue policy activation, root blkg creation will be moved to\nblkcg core.  Add q-\u003eroot_blkg in preparation.  For blk-throtl, this\nreplaces throtl_data-\u003eroot_tg; however, cfq needs to keep\ncfqd-\u003eroot_group for !CONFIG_CFQ_GROUP_IOSCHED.\n\nThis is to prepare for per-queue policy activation and doesn\u0027t cause\nany 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": "da8b066262e12d1d0a3b1e6d3486e500169bf730",
      "tree": "048eee7101b526017bbd295366bf2e95dd65e5a7",
      "parents": [
        "8bd435b30ecacb69bbb8b2d3e251f770b807c5b2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:29 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: make blkg_conf_prep() take @pol and return with queue lock held\n\nAdd @pol to blkg_conf_prep() and let it return with queue lock held\n(to be released by blkg_conf_finish()).  Note that @pol isn\u0027t used\nyet.\n\nThis is to prepare for per-queue policy activation and doesn\u0027t cause\nany visible 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": "8bd435b30ecacb69bbb8b2d3e251f770b807c5b2",
      "tree": "a1a50e95517a54a578af3967fb4016a5a1a42a68",
      "parents": [
        "ec399347d39fb2337ebace928cf4a2855bd0ec37"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:28 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: remove static policy ID enums\n\nRemove BLKIO_POLICY_* enums and let blkio_policy_register() allocate\n@pol-\u003eplid dynamically on registration.  The maximum number of blkcg\npolicies which can be registered at the same time is defined by\nBLKCG_MAX_POLS constant added to include/linux/blkdev.h.\n\nNote that blkio_policy_register() now may fail.  Policy init functions\nupdated accordingly and unnecessary ifdefs removed from cfq_init().\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": "ec399347d39fb2337ebace928cf4a2855bd0ec37",
      "tree": "d95efeb004e8da914f7d3c726cd059b422443694",
      "parents": [
        "bc0d6501a844392ab6ad419d7ca5af4693b6afac"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:27 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: use @pol instead of @plid in update_root_blkg_pd() and blkcg_print_blkgs()\n\nThe two functions were taking \"enum blkio_policy_id plid\".  Make them\ntake \"const struct blkio_policy_type *pol\" instead.\n\nThis is to prepare for per-queue policy activation and doesn\u0027t cause\nany 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": "5bc4afb1ec6aa562fac4d9aba34d957ee42f5813",
      "tree": "dfef1de2dcb71beab3150ffecf6ae564d326ffba",
      "parents": [
        "d366e7ec41882791c970dfb7c67b737be8c3a174"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:45 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:45 2012 -0700"
      },
      "message": "blkcg: drop BLKCG_STAT_{PRIV|POL|OFF} macros\n\nNow that all stat handling code lives in policy implementations,\nthere\u0027s no need to encode policy ID in cft-\u003eprivate.\n\n* Export blkcg_prfill_[rw]stat() from blkcg, remove\n  blkcg_print_[rw]stat(), and implement cfqg_print_[rw]stat() which\n  use hard-code BLKIO_POLICY_PROP.\n\n* Use cft-\u003eprivate for offset of the target field directly and drop\n  BLKCG_STAT_{PRIV|POL|OFF}().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d366e7ec41882791c970dfb7c67b737be8c3a174",
      "tree": "78d3c73d90276b797e1553c004272af869a30075",
      "parents": [
        "af133ceb261033eb43c03d161a991c3b772e8c56"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: pass around pd-\u003epdata instead of pd itself in prfill functions\n\nNow that all conf and stat fields are moved into policy specific\nblkio_policy_data-\u003epdata areas, there\u0027s no reason to use\nblkio_policy_data itself in prfill functions.  Pass around @pd-\u003epdata\ninstead of @pd.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "af133ceb261033eb43c03d161a991c3b772e8c56",
      "tree": "fdc943f4f8c2c7e19af0d963d73647d3333aaa5c",
      "parents": [
        "3381cb8d2ef1523dbaeec99161d766c25f1e52d6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: move blkio_group_conf-\u003eiops and -\u003ebps to blk-throttle\n\nblkio_cgroup_conf-\u003eiops and -\u003ebps are owned by blk-throttle and has no\nreason to be defined in blkcg core.  Drop them and let conf setting\nfunctions directly manipulate throtl_grp-\u003ebps[] and -\u003eiops[].\n\nThis makes blkio_group_conf empty.  Drop it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "8a3d26151f24e2a2ffa550890144c3d54d2edb15",
      "tree": "b99f5cf8db0abc02e39e5c5107f8d4342f81effa",
      "parents": [
        "155fead9b6347ead90e0b0396cb108a6ba6126c6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: move blkio_group_stats_cpu and friends to blk-throttle.c\n\nblkio_group_stats_cpu is used only by blk-throtl and has no reason to\nbe defined in blkcg core.\n\n* Move blkio_group_stats_cpu to blk-throttle.c and rename it to\n  tg_stats_cpu.\n\n* blkg_policy_data-\u003estats_cpu is replaced with throtl_grp-\u003estats_cpu.\n  prfill functions updated accordingly.\n\n* All related macros / functions are renamed so that they have tg_\n  prefix and the unnecessary @pol arguments are dropped.\n\n* Per-cpu stats allocation code is also moved from blk-cgroup.c to\n  blk-throttle.c and gets simplified to only deal with\n  BLKIO_POLICY_THROTL.  percpu stat free is performed by the exit\n  method throtl_exit_blkio_group().\n\n* throtl_reset_group_stats() implemented for\n  blkio_reset_group_stats_fn method so that tg-\u003estats_cpu can be\n  reset.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "41b38b6d540f951c49315d8573e6f6195a6e736d",
      "tree": "e667cec0bba6e7678810ff0087c96547a21a45c7",
      "parents": [
        "629ed0b10209ffc4e1d439e5508d52d5e3a090b8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: cfq doesn\u0027t need per-cpu dispatch stats\n\nblkio_group_stats_cpu is used to count dispatch stats using per-cpu\ncounters.  This is used by both blk-throtl and cfq-iosched but the\nsharing is rather silly.\n\n* cfq-iosched doesn\u0027t need per-cpu dispatch stats.  cfq always updates\n  those stats while holding queue_lock.\n\n* blk-throtl needs per-cpu dispatch stats but only service_bytes and\n  serviced.  It doesn\u0027t make use of sectors.\n\nThis patch makes cfq add and use global stats for service_bytes,\nserviced and sectors, removes per-cpu sectors counter and moves\nper-cpu stat printing code to blk-throttle.c.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "629ed0b10209ffc4e1d439e5508d52d5e3a090b8",
      "tree": "69caa493e4ea0714aff247c8415c4fef7ebfe996",
      "parents": [
        "2ce4d50f9cfab40831eee5e51e950d5c4724994b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: move statistics update code to policies\n\nAs with conf/stats file handling code, there\u0027s no reason for stat\nupdate code to live in blkcg core with policies calling into update\nthem.  The current organization is both inflexible and complex.\n\nThis patch moves stat update code to specific policies.  All\nblkiocg_update_*_stats() functions which deal with BLKIO_POLICY_PROP\nstats are collapsed into their cfq_blkiocg_update_*_stats()\ncounterparts.  blkiocg_update_dispatch_stats() is used by both\npolicies and duplicated as throtl_update_dispatch_stats() and\ncfq_blkiocg_update_dispatch_stats().  This will be cleaned up later.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "60c2bc2d5a12369deef395cda41638d7e6b6bf19",
      "tree": "67fb6ace87a930215f800f0a96bb33f9773231c7",
      "parents": [
        "44ea53de46a8b01a65ae6217f47e00b516725190"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:43 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:43 2012 -0700"
      },
      "message": "blkcg: move conf/stat file handling code to policies\n\nblkcg conf/stat handling is convoluted in that details which belong to\nspecific policy implementations are all out in blkcg core and then\npolicies hook into core layer to access and manipulate confs and\nstats.  This sadly achieves both inflexibility (confs/stats can\u0027t be\nmodified without messing with blkcg core) and complexity (all the\ncall-ins and call-backs).\n\nThe previous patches restructured conf and stat handling code such\nthat they can be separated out.  This patch relocates the file\nhandling part.  All conf/stat file handling code which belongs to\nBLKIO_POLICY_PROP is moved to cfq-iosched.c and all\nBKLIO_POLICY_THROTL code to blk-throtl.c.\n\nThe move is verbatim except for blkio_update_group_{weight|bps|iops}()\ncallbacks which relays conf changes to policies.  The configuration\nsettings are handled in policies themselves so the relaying isn\u0027t\nnecessary.  Conf setting functions are modified to directly call\nper-policy update functions and the relaying mechanism is dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "aaec55a002a29bf940588dc03253099a4cd543bf",
      "tree": "2fb146599db30c25abca72e52516d1c5f2c4e21e",
      "parents": [
        "959d851caa48829eb85cb85aa949fd6b4c5d5bc6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:42 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:42 2012 -0700"
      },
      "message": "blkcg: remove unused @pol and @plid parameters\n\n@pol to blkg_to_pdata() and @plid to blkg_lookup_create() are no\nlonger necessary.  Drop them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "8bcb6c7d48eb341b1f49f814cdcbe05eb6f15680",
      "tree": "83ff62ab93d0cf2c2687e5ca8799cac4c5dcfa25",
      "parents": [
        "00380a404fc4235e9b8b39598138bd3223a27b8a"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Mar 30 12:33:28 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Mar 30 12:33:28 2012 +0200"
      },
      "message": "block: use lockdep_assert_held for queue locking\n\nInstead of an ugly open coded variant.\n\nCc: axboe@kernel.dk\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "671058fb2a2aac4e70f01b316b06bc59b98bd138",
      "tree": "6c49961409ad0e3c16b5e2027f515cafecedf39a",
      "parents": [
        "4f85cb96d9d2fbbb7160db855a6beee1baced5e5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:29 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: make blk-throttle preserve the issuing task on delayed bios\n\nMake blk-throttle call bio_associate_current() on bios being delayed\nsuch that they get issued to block layer with the original io_context.\nThis allows stacking blk-throttle and cfq-iosched propio policies.\nbios will always be issued with the correct ioc and blkcg whether it\ngets delayed by blk-throttle or not.\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": "4f85cb96d9d2fbbb7160db855a6beee1baced5e5",
      "tree": "5472bba04490da05fa6ca8f780431b37bd7375cb",
      "parents": [
        "852c788f8365062c8a383c5a93f7f7289977cb50"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:28 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: make block cgroup policies follow bio task association\n\nImplement bio_blkio_cgroup() which returns the blkcg associated with\nthe bio if exists or %current\u0027s blkcg, and use it in blk-throttle and\ncfq-iosched propio.  This makes both cgroup policies honor task\nassociation for the bio instead of always assuming %current.\n\nAs nobody is using bio_set_task() yet, this doesn\u0027t introduce any\nbehavior 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": "c875f4d0250a1f070fa26087a73bdd8f54c48100",
      "tree": "4ed2bae2fc48e54ac712d28eaaae8217c8064c1d",
      "parents": [
        "9f13ef678efd977487fc0c2e489f17c9a8c67a3e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:22 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "blkcg: drop unnecessary RCU locking\n\nNow that blkg additions / removals are always done under both q and\nblkcg locks, the only places RCU locking is necessary are\nblkg_lookup[_create]() for lookup w/o blkcg lock.  This patch drops\nunncessary RCU locking replacing it with plain blkcg locking as\nnecessary.\n\n* blkiocg_pre_destroy() already perform proper locking and don\u0027t need\n  RCU.  Dropped.\n\n* blkio_read_blkg_stats() now uses blkcg-\u003elock instead of RCU read\n  lock.  This isn\u0027t a hot path.\n\n* Now unnecessary synchronize_rcu() from queue exit paths removed.\n  This makes q-\u003enr_blkgs unnecessary.  Dropped.\n\n* RCU annotation on blkg-\u003eq removed.\n\n-v2: Vivek pointed out that blkg_lookup_create() still needs to be\n     called under rcu_read_lock().  Updated.\n\n-v3: After the update, stats_lock locking in blkio_read_blkg_stats()\n     shouldn\u0027t be using _irq variant as it otherwise ends up enabling\n     irq while blkcg-\u003elock is locked.  Fixed.\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": "e8989fae38d9831c72b20375a206a919ca468c52",
      "tree": "2eeb1320e526cd0ba187465c0e6e19799dc1b956",
      "parents": [
        "03aa264ac15637b6f98374270bcdf31400965505"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:20 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: unify blkg\u0027s for blkcg policies\n\nCurrently, blkg is per cgroup-queue-policy combination.  This is\nunnatural and leads to various convolutions in partially used\nduplicate fields in blkg, config / stat access, and general management\nof blkgs.\n\nThis patch make blkg\u0027s per cgroup-queue and let them serve all\npolicies.  blkgs are now created and destroyed by blkcg core proper.\nThis will allow further consolidation of common management logic into\nblkcg core and API with better defined semantics and layering.\n\nAs a transitional step to untangle blkg management, elvswitch and\npolicy [de]registration, all blkgs except the root blkg are being shot\ndown during elvswitch and bypass.  This patch adds blkg_root_update()\nto update root blkg in place on policy change.  This is hacky and racy\nbut should be good enough as interim step until we get locking\nsimplified and switch over to proper in-place update for all blkgs.\n\n-v2: Root blkgs need to be updated on elvswitch too and blkg_alloc()\n     comment wasn\u0027t updated according to the function change.  Fixed.\n     Both pointed out by Vivek.\n\n-v3: v2 updated blkg_destroy_all() to invoke update_root_blkg_pd() for\n     all policies.  This freed root pd during elvswitch before the\n     last queue finished exiting and led to oops.  Directly invoke\n     update_root_blkg_pd() only on BLKIO_POLICY_PROP from\n     cfq_exit_queue().  This also is closer to what will be done with\n     proper in-place blkg update.  Reported by Vivek.\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": "03aa264ac15637b6f98374270bcdf31400965505",
      "tree": "6fa9ca54d3f775fba19123790f6655158034a1d8",
      "parents": [
        "4eef3049986e8397d5003916aed8cad6567a5e02"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:19 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: let blkcg core manage per-queue blkg list and counter\n\nWith the previous patch to move blkg list heads and counters to\nrequest_queue and blkg, logic to manage them in both policies are\nalmost identical and can be moved to blkcg core.\n\nThis patch moves blkg link logic into blkg_lookup_create(), implements\ncommon blkg unlink code in blkg_destroy(), and updates\nblkg_destory_all() so that it\u0027s policy specific and can skip root\ngroup.  The updated blkg_destroy_all() is now used to both clear queue\nfor bypassing and elv switching, and release all blkgs on q exit.\n\nThis patch introduces a race window where policy [de]registration may\nrace against queue blkg clearing.  This can only be a problem on cfq\nunload and shouldn\u0027t be a real problem in practice (and we have many\nother places where this race already exists).  Future patches will\nremove these unlikely races.\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": "4eef3049986e8397d5003916aed8cad6567a5e02",
      "tree": "5e36431986907b9fa728a6fbeb819a2738a64c82",
      "parents": [
        "c1768268f9424410761da57ea71107acae7b03cc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:18 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: move per-queue blkg list heads and counters to queue and blkg\n\nCurrently, specific policy implementations are responsible for\nmaintaining list and number of blkgs.  This duplicates code\nunnecessarily, and hinders factoring common code and providing blkcg\nAPI with better defined semantics.\n\nAfter this patch, request_queue hosts list heads and counters and blkg\nhas list nodes for both policies.  This patch only relocates the\nnecessary fields and the next patch will actually move management code\ninto blkcg core.\n\nNote that request_queue-\u003eblkg_list[] and -\u003enr_blkgs[] are hardcoded to\nhave 2 elements.  This is to avoid include dependency and will be\nremoved by the next patch.\n\nThis patch doesn\u0027t introduce any behavior change.\n\n-v2: Now unnecessary conditional on CONFIG_BLK_CGROUP_MODULE removed\n     as pointed out by Vivek.\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": "c1768268f9424410761da57ea71107acae7b03cc",
      "tree": "be6a534b1a15ab9df9f23e585b039776c5a5e498",
      "parents": [
        "549d3aa872cd1aec1ee540fd93afd9611faa0def"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:17 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: don\u0027t use blkg-\u003eplid in stat related functions\n\nblkg is scheduled to be unified for all policies and thus there won\u0027t\nbe one-to-one mapping from blkg to policy.  Update stat related\nfunctions to take explicit @pol or @plid arguments and not use\nblkg-\u003eplid.\n\nThis is painful for now but most of specific stat interface functions\nwill be replaced with a handful of generic helpers.\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": "1adaf3dde37a8b9b59ea59c5f58fed7761178383",
      "tree": "e4a46485b1bf0370aa41a5b9a8f138fba34c9d23",
      "parents": [
        "0381411e4b1a52cee134eb73750e5e3cc1155d09"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:15 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: move refcnt to blkcg core\n\nCurrently, blkcg policy implementations manage blkg refcnt duplicating\nmostly identical code in both policies.  This patch moves refcnt to\nblkg and let blkcg core handle refcnt and freeing of blkgs.\n\n* cfq blkgs now also get freed via RCU.\n\n* cfq blkgs lose RB_EMPTY_ROOT() sanity check on blkg free.  If\n  necessary, we can add blkio_exit_group_fn() to resurrect this.\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": "0381411e4b1a52cee134eb73750e5e3cc1155d09",
      "tree": "32aa1d0b8a2ca8277e60e8b78dd731d193440924",
      "parents": [
        "923adde1be1df57cebd80c563058e503376645e8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:14 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: let blkcg core handle policy private data allocation\n\nCurrently, blkg\u0027s are embedded in private data blkcg policy private\ndata structure and thus allocated and freed by policies.  This leads\nto duplicate codes in policies, hinders implementing common part in\nblkcg core with strong semantics, and forces duplicate blkg\u0027s for the\nsame cgroup-q association.\n\nThis patch introduces struct blkg_policy_data which is a separate data\nstructure chained from blkg.  Policies specifies the amount of private\ndata it needs in its blkio_policy_type-\u003epdata_size and blkcg core\ntakes care of allocating them along with blkg which can be accessed\nusing blkg_to_pdata().  blkg can be determined from pdata using\npdata_to_blkg().  blkio_alloc_group_fn() method is accordingly updated\nto blkio_init_group_fn().\n\nFor consistency, tg_of_blkg() and cfqg_of_blkg() are replaced with\nblkg_to_tg() and blkg_to_cfqg() respectively, and functions to map in\nthe reverse direction are added.\n\nExcept that policy specific data now lives in a separate data\nstructure from blkg, this patch doesn\u0027t introduce any functional\ndifference.\n\nThis will be used to unify blkg\u0027s for different policies.\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": "5efd611351d1a847c72d74fb12ff4bd187c0cb2c",
      "tree": "bac28206d088426ab872eea98155cc100bd8d9b1",
      "parents": [
        "7ee9c5620504906e98451dc9a1945b2b9e892cb8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:12 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: add blkcg_{init|drain|exit}_queue()\n\nCurrently block core calls directly into blk-throttle for init, drain\nand exit.  This patch adds blkcg_{init|drain|exit}_queue() which wraps\nthe blk-throttle functions.  This is to give more control and\nvisiblity to blkcg core layer for proper layering.  Further patches\nwill add logic common to blkcg policies to the functions.\n\nWhile at it, collapse blk_throtl_release() into blk_throtl_exit().\nThere\u0027s no reason to keep them separate.\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": "7ee9c5620504906e98451dc9a1945b2b9e892cb8",
      "tree": "1daf4d9fc8d03ebbc88ceedb7abeec46d8c71df3",
      "parents": [
        "92616b5b3a7c7fa8148df82e7ff6183056f2bfc8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:11 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: let blkio_group point to blkio_cgroup directly\n\nCurrently, blkg points to the associated blkcg via its css_id.  This\nunnecessarily complicates dereferencing blkcg.  Let blkg hold a\nreference to the associated blkcg and point directly to it and disable\ncss_id on blkio_subsys.\n\nThis change requires splitting blkiocg_destroy() into\nblkiocg_pre_destroy() and blkiocg_destroy() so that all blkg\u0027s can be\ndestroyed and all the blkcg references held by them dropped during\ncgroup removal.\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": "7a4dd281ec66224f802093962d1d903d86b09560",
      "tree": "c38c5c40464d4d7eb429cc14348a435176832ef2",
      "parents": [
        "4bfd482e73b30284cb21e10834ce729fa81aa256"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:09 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: kill the mind-bending blkg-\u003edev\n\nblkg-\u003edev is dev_t recording the device number of the block device for\nthe associated request_queue.  It is used to identify the associated\nblock device when printing out configuration or stats.\n\nThis is redundant to begin with.  A blkg is an association between a\ncgroup and a request_queue and it of course is possible to reach\nrequest_queue from blkg and synchronization conventions are in place\nfor safe q dereferencing, so this shouldn\u0027t be necessary from the\nbeginning.  Furthermore, it\u0027s initialized by sscanf()ing the device\nname of backing_dev_info.  The mind boggles.\n\nAnyways, if blkg is visible under rcu lock, we *know* that the\nassociated request_queue hasn\u0027t gone away yet and its bdi is\nregistered and alive - blkg can\u0027t be created for request_queue which\nhasn\u0027t been fully initialized and it can\u0027t go away before blkg is\nremoved.\n\nLet stat and conf read functions get device name from\nblkg-\u003eq-\u003ebacking_dev_info.dev and pass it down to printing functions\nand remove blkg-\u003edev.\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": "e56da7e287967667474a58c4f60c286279e3f487",
      "tree": "4ce64581888f287a25b4abdc21fc641210351612",
      "parents": [
        "cd1604fab4f95f7cfc227d3955fd7ae14da61f38"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:07 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: don\u0027t allow or retain configuration of missing devices\n\nblkcg is very peculiar in that it allows setting and remembering\nconfigurations for non-existent devices by maintaining separate data\nstructures for configuration.\n\nThis behavior is completely out of the usual norms and outright\nconfusing; furthermore, it uses dev_t number to match the\nconfiguration to devices, which is unpredictable to begin with and\nbecomes completely unuseable if EXT_DEVT is fully used.\n\nIt is wholely unnecessary - we already have fully functional userland\nmechanism to program devices being hotplugged which has full access to\ndevice identification, connection topology and filesystem information.\n\nAdd a new struct blkio_group_conf which contains all blkcg\nconfigurations to blkio_group and let blkio_group, which can be\ncreated iff the associated device exists and is removed when the\nassociated device goes away, carry all configurations.\n\nNote that, after this patch, all newly created blkg\u0027s will always have\nthe default configuration (unlimited for throttling and blkcg\u0027s weight\nfor propio).\n\nThis patch makes blkio_policy_node meaningless but doesn\u0027t remove it.\nThe next patch will.\n\n-v2: Updated to retry after short sleep if blkg lookup/creation failed\n     due to the queue being temporarily bypassed as indicated by\n     -EBUSY return.  Pointed out by Vivek.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "cd1604fab4f95f7cfc227d3955fd7ae14da61f38",
      "tree": "021881faedc1c2468730f9f54d364083e70dce76",
      "parents": [
        "f51b802c17e2a21926b29911493f5e7ddf6eee87"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:06 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: factor out blkio_group creation\n\nCurrently both blk-throttle and cfq-iosched implement their own\nblkio_group creation code in throtl_get_tg() and cfq_get_cfqg().  This\npatch factors out the common code into blkg_lookup_create(), which\nreturns ERR_PTR value so that transitional failures due to queue\nbypass can be distinguished from other failures.\n\n* New plkio_policy_ops methods blkio_alloc_group_fn() and\n  blkio_link_group_fn added.  Both are transitional and will be\n  removed once the blkg management code is fully moved into\n  blk-cgroup.c.\n\n* blkio_alloc_group_fn() allocates policy-specific blkg which is\n  usually a larger data structure with blkg as the first entry and\n  intiailizes it.  Note that initialization of blkg proper, including\n  percpu stats, is responsibility of blk-cgroup proper.\n\n  Note that default config (weight, bps...) initialization is done\n  from this method; otherwise, we end up violating locking order\n  between blkcg and q locks via blkcg_get_CONF() functions.\n\n* blkio_link_group_fn() is called under queue_lock and responsible for\n  linking the blkg to the queue.  blkcg side is handled by blk-cgroup\n  proper.\n\n* The common blkg creation function is named blkg_lookup_create() and\n  blkiocg_lookup_group() is renamed to blkg_lookup() for consistency.\n  Also, throtl / cfq related functions are similarly [re]named for\n  consistency.\n\nThis simplifies blkcg policy implementations and enables further\ncleanup.\n\n-v2: Vivek noticed that blkg_lookup_create() incorrectly tested\n     blk_queue_dead() instead of blk_queue_bypass() leading a user of\n     the function ending up creating a new blkg on bypassing queue.\n     This is a bug introduced while relocating bypass patches before\n     this one.  Fixed.\n\n-v3: ERR_PTR patch folded into this one.  @for_root added to\n     blkg_lookup_create() to allow creating root group on a bypassed\n     queue during elevator switch.\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": "f51b802c17e2a21926b29911493f5e7ddf6eee87",
      "tree": "c32d9ea2a61201b0c6bf59b349300af04dbc3686",
      "parents": [
        "035d10b2fa7e5f7e9bf9465dbc39c35affd5ac32"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:05 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: use the usual get blkg path for root blkio_group\n\nFor root blkg, blk_throtl_init() was using throtl_alloc_tg()\nexplicitly and cfq_init_queue() was manually initializing embedded\ncfqd-\u003eroot_group, adding unnecessarily different code paths to blkg\nhandling.\n\nMake both use the usual blkio_group get functions - throtl_get_tg()\nand cfq_get_cfqg() - for the root blkio_group too.  Note that\nblk_throtl_init() callsite is pushed downwards in\nblk_alloc_queue_node() so that @q is sufficiently initialized for\nthrotl_get_tg().\n\nThis simplifies root blkg handling noticeably for cfq and will allow\nfurther modularization of blkcg API.\n\n-v2: Vivek pointed out that using cfq_get_cfqg() won\u0027t work if\n     CONFIG_CFQ_GROUP_IOSCHED is disabled.  Fix it by factoring out\n     initialization of base part of cfqg into cfq_init_cfqg_base() and\n     alloc/init/free explicitly if !CONFIG_CFQ_GROUP_IOSCHED.\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": "ca32aefc7f2539ed88d42763330d54ee3e61769a",
      "tree": "791d2ac1c11b738ce34629653090b6e971fc11b5",
      "parents": [
        "0a5a7d0e32be6643b881f0e7cd9d0d06fadde27a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:03 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: use q and plid instead of opaque void * for blkio_group association\n\nblkgio_group is association between a block cgroup and a queue for a\ngiven policy.  Using opaque void * for association makes things\nconfusing and hinders factoring of common code.  Use request_queue *\nand, if necessary, policy id instead.\n\nThis will help block cgroup API cleanup.\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": "0a5a7d0e32be6643b881f0e7cd9d0d06fadde27a",
      "tree": "271f62b5f75c239831c7def1c445a6e990366730",
      "parents": [
        "2a7f124414b35645049e9c1b125a6f0b470aa5ae"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:02 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: update blkg get functions take blkio_cgroup as parameter\n\nIn both blkg get functions - throtl_get_tg() and cfq_get_cfqg(),\ninstead of obtaining blkcg of %current explicitly, let the caller\nspecify the blkcg to use as parameter and make both functions hold on\nto the blkcg.\n\nThis is part of block cgroup interface cleanup and will help making\nblkcg API more modular.\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": "2a7f124414b35645049e9c1b125a6f0b470aa5ae",
      "tree": "298d9bc310dc46baed69baf88f083c6db35f0964",
      "parents": [
        "72e06c255181537d0b3e1f657a9ed81655d745b1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:01 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: move rcu_read_lock() outside of blkio_group get functions\n\nrcu_read_lock() in throtl_get_tb() and cfq_get_cfqg() holds onto\n@blkcg while looking up blkg.  For API cleanup, the next patch will\nmake the caller responsible for determining @blkcg to look blkg from\nand let them specify it as a parameter.  Move rcu read locking out to\nthe callers to prepare for the change.\n\n-v2: Originally this patch was described as a fix for RCU read locking\n     bug around @blkg, which Vivek pointed out to be incorrect.  It\n     was from misunderstanding the role of rcu locking as protecting\n     @blkg not @blkcg.  Patch description updated.\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": "72e06c255181537d0b3e1f657a9ed81655d745b1",
      "tree": "eb656df2ad23a7709b4e9fe58f1dabdc32be9ae9",
      "parents": [
        "6ecf23afab13c39d3bb0e2d826d0984b0dd53733"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:00 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: shoot down blkio_groups on elevator switch\n\nElevator switch may involve changes to blkcg policies.  Implement\nshoot down of blkio_groups.\n\nCombined with the previous bypass updates, the end goal is updating\nblkcg core such that it can ensure that blkcg\u0027s being affected become\nquiescent and don\u0027t have any per-blkg data hanging around before\ncommencing any policy updates.  Until queues are made aware of the\npolicies that applies to them, as an interim step, all per-policy blkg\ndata will be shot down.\n\n* blk-throtl doesn\u0027t need this change as it can\u0027t be disabled for a\n  live queue; however, update it anyway as the scheduled blkg\n  unification requires this behavior change.  This means that\n  blk-throtl configuration will be unnecessarily lost over elevator\n  switch.  This oddity will be removed after blkcg learns to associate\n  individual policies with request_queues.\n\n* blk-throtl dosen\u0027t shoot down root_tg.  This is to ease transition.\n  Unified blkg will always have persistent root group and not shooting\n  down root_tg for now eases transition to that point by avoiding\n  having to update td-\u003eroot_tg and is safe as blk-throtl can never be\n  disabled\n\n-v2: Vivek pointed out that group list is not guaranteed to be empty\n     on return from clear function if it raced cgroup removal and\n     lost.  Fix it by waiting a bit and retrying.  This kludge will\n     soon be removed once locking is updated such that blkg is never\n     in limbo state between blkcg and request_queue locks.\n\n     blk-throtl no longer shoots down root_tg to avoid breaking\n     td-\u003eroot_tg.\n\n     Also, Nest queue_lock inside blkio_list_lock not the other way\n     around to avoid introduce possible deadlock via blkcg lock.\n\n-v3: blkcg_clear_queue() repositioned and renamed to\n     blkg_destroy_all() to increase consistency with later changes.\n     cfq_clear_queue() updated to check q-\u003eelevator before\n     dereferencing it to avoid NULL dereference on not fully\n     initialized queues (used by later 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": "6ecf23afab13c39d3bb0e2d826d0984b0dd53733",
      "tree": "48436e2eb507d623ff2c2332aa34e9b7380f33e1",
      "parents": [
        "d732580b4eb31553c63744a47d590f770cafb8f0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:14:59 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "block: extend queue bypassing to cover blkcg policies\n\nExtend queue bypassing such that dying queue is always bypassing and\nblk-throttle is drained on bypass.  With blkcg policies updated to\ntest blk_queue_bypass() instead of blk_queue_dead(), this ensures that\nno bio or request is held by or going through blkcg policies on a\nbypassing queue.\n\nThis will be used to implement blkg cleanup on elevator switches and\npolicy changes.\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": "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": "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": "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": "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": "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": "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": "e5a94f56845bb4b272d82e84b5a1e2080b07ba82",
      "tree": "884fcc9d3c7cab28416084ba793a181d37858ca1",
      "parents": [
        "05eb0f252b04aa94ace0794f73d56c6a02351d80"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Aug 01 10:31:06 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Aug 01 10:31:06 2011 +0200"
      },
      "message": "blk-throttle: correctly determine sync bio\n\nread request is always sync. Using rw_is_sync() to determine\nif a bio is sync.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2f31a5fd60d168b00fc4f7617b68a1287b21e90",
      "tree": "c51b882926a840df57e376d21df74ec4177561a3",
      "parents": [
        "fd16d263194aa6b50b215eb593a567b59d744d6e"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jun 13 20:19:27 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 13 20:19:27 2011 +0200"
      },
      "message": "blk-throttle: Make total_nr_queued unsigned\n\nThe total of two unsigned values should also be unsigned.\n\nUpdate throtl_log output to unsigned.\nUpdate total_nr_queued test to non-zero to be the\nsame as the other total_nr_queued tests.\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fd16d263194aa6b50b215eb593a567b59d744d6e",
      "tree": "555aac4bd0104ea85643f1a3550c9bc1cbac9256",
      "parents": [
        "dd7740933842202fccaa9ebcba6bce0507b3f6d6"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jun 13 10:42:49 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 13 20:18:49 2011 +0200"
      },
      "message": "block: Add __attribute__((format(printf...) and fix fallout\n\nUse the compiler to verify format strings and arguments.\n\nFix fallout.\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "af75cd3c67845ebe31d2df9a780889a5ebecef11",
      "tree": "2d8cdeb9db03a72a90b9b80612f08bd0e7bb4f61",
      "parents": [
        "f0bdc8cdd9a2bcc2c84ae2a1fdbff4188b354d8d"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:31 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:53 2011 +0200"
      },
      "message": "blk-throttle: Make no throttling rule group processing lockless\n\nCurrently we take a queue lock on each bio to check if there are any\nthrottling rules associated with the group and also update the stats.\nNow access the group under rcu and update the stats without taking\nthe queue lock. Queue lock is taken only if there are throttling rules\nassociated with the group.\n\nSo the common case of root group when there are no rules, save\nunnecessary pounding of request queue lock.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5624a4e445e2ec27582984b068d7bf7f127cee10",
      "tree": "0827c83c6e5f5fa83bd0dadc1bc395c0f0657dae",
      "parents": [
        "4843c69d496a8d2e4caab6182fe016b9a79136e0"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:28 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Make dispatch stats per cpu\n\nCurrently we take blkg_stat lock for even updating the stats. So even if\na group has no throttling rules (common case for root group), we end\nup taking blkg_lock, for updating the stats.\n\nMake dispatch stats per cpu so that these can be updated without taking\nblkg lock.\n\nIf cpu goes offline, these stats simply disappear. No protection has\nbeen provided for that yet. Do we really need anything for that?\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4843c69d496a8d2e4caab6182fe016b9a79136e0",
      "tree": "0812bb95cfc7769a3ccd90d84f303bed861c9c0a",
      "parents": [
        "5617cbef7723952cbdff28c7a10ff8a254945f4f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:27 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Free up a group only after one rcu grace period\n\nSoon we will allow accessing a throtl_grp under rcu_read_lock(). Hence\nstart freeing up throtl_grp after one rcu grace period.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5617cbef7723952cbdff28c7a10ff8a254945f4f",
      "tree": "1922ac8f6011d5ccc92c668448971a12cc6df909",
      "parents": [
        "269f541555d8f5da322d592fb3e13e23ed62d80c"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:26 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Use helper function to add root throtl group to lists\n\nUse same helper function for root group as we use with dynamically\nallocated groups to add it to various lists.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "269f541555d8f5da322d592fb3e13e23ed62d80c",
      "tree": "8aaf602bc8d284f9c43720801b799f631dc47419",
      "parents": [
        "29b125892f3317ada86b662e0b6ebc0f79be9037"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:25 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Introduce a helper function to fill in device details\n\nA helper function for the code which is used at 2-3 places. Makes reading\ncode little easier.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "29b125892f3317ada86b662e0b6ebc0f79be9037",
      "tree": "a8caa5a8d521c0d667bbae956ff4d8b160ad02d9",
      "parents": [
        "f469a7b4d5b1d1d053200a9015fd25d59c057f49"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:24 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-throttle: Dynamically allocate root group\n\nCurrently, we allocate root throtl_grp statically. But as we will be\nintroducing per cpu stat pointers and that will be allocated\ndynamically even for root group, we might as well make whole root\nthrotl_grp allocation dynamic and treat it in same manner as other\ngroups.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f469a7b4d5b1d1d053200a9015fd25d59c057f49",
      "tree": "2c68c0689e40955b186e350b15d44d0b260f4655",
      "parents": [
        "56edf7d75db5b14d628b46623c414ffbeed68d7f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:23 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-cgroup: Allow sleeping while dynamically allocating a group\n\nCurrently, all the cfq_group or throtl_group allocations happen while\nwe are holding -\u003equeue_lock and sleeping is not allowed.\n\nSoon, we will move to per cpu stats and also need to allocate the\nper group stats. As one can not call alloc_percpu() from atomic\ncontext as it can sleep, we need to drop -\u003equeue_lock, allocate the\ngroup, retake the lock and continue processing.\n\nIn throttling code, I check the queue DEAD flag again to make sure\nthat driver did not call blk_cleanup_queue() in the mean time.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a29a171e7c46c60842b85729280e2f5690372683",
      "tree": "83d9be7f8801c04feeac0256e677da7240239046",
      "parents": [
        "698567f3fa790fea37509a54dea855302dd88331"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:19 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:51 2011 +0200"
      },
      "message": "blk-throttle: Do the new group initialization with the help of a function\n\nGroup initialization code seems to be at two places. root group\ninitialization in blk_throtl_init() and dynamically allocated group\nin throtl_find_alloc_tg(). Create a common function and use at both\nthe places.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "70087dc38cc77ca8f46059564c00338777734762",
      "tree": "2ffd5885a12acb44d90d3c3c1a578387bad94a32",
      "parents": [
        "02e352287a40bd456eb78df705bf888bc3161d3f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 16 15:24:08 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 16 15:24:08 2011 +0200"
      },
      "message": "blk-throttle: Use task_subsys_state() to determine a task\u0027s blkio_cgroup\n\nCurrentlly we first map the task to cgroup and then cgroup to\nblkio_cgroup. There is a more direct way to get to blkio_cgroup\nfrom task using task_subsys_state(). Use that.\n\nThe real reason for the fix is that it also avoids a race in generic\ncgroup code. During remount/umount rebind_subsystems() is called and\nit can do following with and rcu protection.\n\ncgrp-\u003esubsys[i] \u003d NULL;\n\nThat means if somebody got hold of cgroup under rcu and then it tried\nto do cgroup-\u003esubsys[] to get to blkio_cgroup, it would get NULL which\nis wrong. I was running into this race condition with ltp running on a\nupstream derived kernel and that lead to crash.\n\nSo ideally we should also fix cgroup generic code to wait for rcu\ngrace period before setting pointer to NULL. Li Zefan is not very keen\non introducing synchronize_wait() as he thinks it will slow\ndown moun/remount/umount operations.\n\nSo for the time being atleast fix the kernel crash by taking a more\ndirect route to blkio_cgroup.\n\nOne tester had reported a crash while running LTP on a derived kernel\nand with this fix crash is no more seen while the test has been\nrunning for over 6 days.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "42933bac11e811f02200c944d8562a15f8ec4ff0",
      "tree": "fcdd9afe56eb0e746565ddd1f92f22d36678b843",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "25985edcedea6396277003854657b5f3cb31a628"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6\n\n* \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6:\n  Fix common misspellings\n"
    },
    {
      "commit": "6f0379377047b18103b88ce33c03e5b19747ae57",
      "tree": "83a39f34bd29c38ab46faa21d65a45831a659287",
      "parents": [
        "ee3dea3549444e6e76d27af48b4929983e6f023c"
      ],
      "author": {
        "name": "Andreas Schwab",
        "email": "schwab@linux-m68k.org",
        "time": "Wed Mar 30 12:21:56 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 05 23:51:37 2011 +0200"
      },
      "message": "blk-throttle: don\u0027t call xchg on bool\n\nxchg does not work portably with smaller than 32bit types.\n\nSigned-off-by: Andreas Schwab \u003cschwab@linux-m68k.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "04521db04e9a11e74b0252d222051cb194487f4d",
      "tree": "4a07811529a16f9e25c4de44ef0bf2621d360249",
      "parents": [
        "9026e521c0da0731eb31f9f9022dd00cc3cd8885"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Mar 22 21:54:29 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 22 21:55:00 2011 +0100"
      },
      "message": "blk-throttle: Reset group slice when limits are changed\n\nLina reported that if throttle limits are initially very high and then\ndropped, then no new bio might be dispatched for a long time. And the\nreason being that after dropping the limits we don\u0027t reset the existing\nslice and do the rate calculation with new low rate and account the bios\ndispatched at high rate. To fix it, reset the slice upon rate change.\n\nhttps://lkml.org/lkml/2011/3/10/298\n\nAnother problem with very high limit is that we never queued the\nbio on throtl service tree. That means we kept on extending the\ngroup slice but never trimmed it. Fix that also by regulary\ntrimming the slice even if bio is not being queued up.\n\nReported-by: Lina Lu \u003clulina_nuaa@foxmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "69d60eb96ae8a73cf9b79cf28051caf973006011",
      "tree": "254be7302abbd6a21d4f54cfdad6a0af6db282d0",
      "parents": [
        "721a9602e6607417c6bc15b18e97a2f35266c690"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Mar 09 08:27:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:27 2011 +0100"
      },
      "message": "blk-throttle: Use blk_plug in throttle dispatch\n\nUse plug in throttle dispatch also as we are dispatching a bunch of\nbios in throttle context and some of them might merge.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "de701c74a34005e637e1ca2634fbf28fd1debba2",
      "tree": "45a4af16e2a76cbf5866cfb3f284956988918a13",
      "parents": [
        "231d704b4ab7491473c0b1a9cd0c6e0d1cba85b9"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 07 21:09:32 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 21:09:32 2011 +0100"
      },
      "message": "blk-throttle: Some cleanups and race fixes in limit  update code\n\nWhen throttle group limits are updated through cgroups, a thread is\nwoken up to process these updates. While reviewing that code, oleg noted\ncouple of race conditions existed in the code and he also suggested that\ncode can be simplified.\n\nThis patch fixes the races simplifies the code based on Oleg\u0027s suggestions:\n\n\t- Use xchg().\n\t- Introduced a common function throtl_update_blkio_group_common()\n          which is shared now by all iops/bps update functions.\n\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n\nFixed a merge issue, throtl_schedule_delayed_work() takes throtl_data\nas the argument now, not the queue.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "231d704b4ab7491473c0b1a9cd0c6e0d1cba85b9",
      "tree": "a4666d35b6e11f92eb0fc4506bdd7f65185a7aa6",
      "parents": [
        "b873c5d692d4d5453cceed18bb06c62bb1a73ac0"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 07 21:05:14 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Mar 07 21:05:14 2011 +0100"
      },
      "message": "blk-throttle: process limit change only through one function\n\nWith the help of cgroup interface one can go and upate the bps/iops\nlimits of existing group. Once the limits are udpated, a thread is\nwoken up to see if some blocked group needs recalculation based on new\nlimits and needs to be requeued.\n\nThere was also a piece of code where I was checking for group limit\nupdate when a fresh bio comes in. This patch gets rid of that piece of\ncode and keeps processing the limit change at one place\nthrotl_process_limit_change().  It just keeps the code simple and easy\nto understand.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e83a46bbb1d4c03defd733a64b727632a40059ad",
      "tree": "c4bc4822b2d3af1bf38095f531adc0a2aac054a5",
      "parents": [
        "da527770007fce8e4541947d47918248286da875",
        "fd51469fb68b987032e46297e0a4fe9020063c20"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 04 19:09:02 2011 +0100"
      },
      "message": "Merge branch \u0027for-linus\u0027 of ../linux-2.6-block into block-for-2.6.39/core\n\nThis merge creates two set of conflicts.  One is simple context\nconflicts caused by removal of throtl_scheduled_delayed_work() in\nfor-linus and removal of throtl_shutdown_timer_wq() in\nfor-2.6.39/core.\n\nThe other is caused by commit 255bb490c8 (block: blk-flush shouldn\u0027t\ncall directly into q-\u003erequest_fn() __blk_run_queue()) in for-linus\ncrashing with FLUSH reimplementation in for-2.6.39/core.  The conflict\nisn\u0027t trivial but the resolution is straight-forward.\n\n* __blk_run_queue() calls in flush_end_io() and flush_data_end_io()\n  should be called with @force_kblockd set to %true.\n\n* elv_insert() in blk_kick_flush() should use\n  %ELEVATOR_INSERT_REQUEUE.\n\nBoth changes are to avoid invoking -\u003erequest_fn() directly from\nrequest completion path and closely match the changes in the commit\n255bb490c8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "da527770007fce8e4541947d47918248286da875",
      "tree": "fc518172887409133e8dea827067209adfdb1c3c",
      "parents": [
        "cd25f54961273c2e4cbd47441e04832468382a5e"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Mar 02 19:05:33 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 19:06:49 2011 -0500"
      },
      "message": "block: Move blk_throtl_exit() call to blk_cleanup_queue()\n\nMove blk_throtl_exit() in blk_cleanup_queue() as blk_throtl_exit() is\nwritten in such a way that it needs queue lock. In blk_release_queue()\nthere is no gurantee that -\u003equeue_lock is still around.\n\nInitially blk_throtl_exit() was in blk_cleanup_queue() but Ingo reported\none problem.\n\n  https://lkml.org/lkml/2010/10/23/86\n\n  And a quick fix moved blk_throtl_exit() to blk_release_queue().\n\n        commit 7ad58c028652753814054f4e3ac58f925e7343f4\n        Author: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n        Date:   Sat Oct 23 20:40:26 2010 +0200\n\n        block: fix use-after-free bug in blk throttle code\n\nThis patch reverts above change and does not try to shutdown the\nthrotl work in blk_sync_queue(). By avoiding call to\nthrotl_shutdown_timer_wq() from blk_sync_queue(), we should also avoid\nthe problem reported by Ingo.\n\nblk_sync_queue() seems to be used only by md driver and it seems to be\nusing it to make sure q-\u003eunplug_fn is not called as md registers its\nown unplug functions and it is about to free up the data structures\nused by unplug_fn(). Block throttle does not call back into unplug_fn()\nor into md. So there is no need to cancel blk throttle work.\n\nIn fact I think cancelling block throttle work is bad because it might\nhappen that some bios are throttled and scheduled to be dispatched later\nwith the help of pending work and if work is cancelled, these bios might\nnever be dispatched.\n\nBlock layer also uses blk_sync_queue() during blk_cleanup_queue() and\nblk_release_queue() time. That should be safe as we are also calling\nblk_throtl_exit() which should make sure all the throttling related\ndata structures are cleaned up.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "450adcbe518ab3a3953d8475309525d22de77cba",
      "tree": "352fd47d75b86804e590fd88c09f953a798ba8b0",
      "parents": [
        "3e1f2356ce231488dc1fa844e5ce91bcb59fc2a1"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Mar 01 13:40:54 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 13:41:53 2011 -0500"
      },
      "message": "blk-throttle: Do not use kblockd workqueue for throtl work\n\no Dominik Klein reported a system hang issue while doing some blkio\n  throttling testing.\n\n  https://lkml.org/lkml/2011/2/24/173\n\no Some tracing revealed that CFQ was not dispatching any more jobs as\n  queue unplug was not happening. And queue unplug was not happening\n  because unplug work was not being called as there was one throttling\n  work on same cpu which as not finished yet. And throttling work had not\n  finished as it was tyring to dispatch a bio to CFQ but all the request\n  descriptors were consume to it was put to sleep.\n\no So basically it is a cyclic dependecny between CFQ unplug work and\n  throtl dispatch work. Tejun suggested that use separate workqueue for\n  such cases.\n\no This patch uses a separate workqueue for throttle related work and\n  does not rely on kblockd workqueue anymore.\n\nCc: stable@kernel.org\nReported-by: Dominik Klein \u003cdk@in-telegence.net\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "be2c6b1990904dbd43f3d9b90fa2c530504375cd",
      "tree": "f2ec4322adc9f0607b5a78367bc66d8fa333cf54",
      "parents": [
        "ba5bd520f679c450fb6efa439618703bd0956daa"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "message": "blkio-throttle: Avoid calling blkiocg_lookup_group() for root group\n\no Jeff Moyer was doing some testing on a RAM backed disk and\n  blkiocg_lookup_group() showed up high overhead after memcpy(). Similarly\n  somebody else reported that blkiocg_lookup_group() is eating 6% extra\n  cpu. Though looking at the code I can\u0027t think why the overhead of\n  this function is so high. One thing is that it is called with very high\n  frequency (once for every IO).\n\no For lot of folks blkio controller will be compiled in but they might\n  not have actually created cgroups. Hence optimize the case of root\n  cgroup where we can avoid calling blkiocg_lookup_group() if IO is happening\n  in root group (common case).\n\nReported-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "04a6b516cdc6efc2500b52a540cf65be8c5aaf9e",
      "tree": "fa5d6675308df0ff42eceeec1b406d2ce5eb2ff6",
      "parents": [
        "d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 01 19:34:52 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Dec 01 19:34:52 2010 +0100"
      },
      "message": "blk-throttle: Correct the placement of smp_rmb()\n\no I was discussing what are the variable being updated without spin lock and\n  why do we need barriers and Oleg pointed out that location of smp_rmb()\n  should be between read of td-\u003elimits_changed and tg-\u003elimits_changed. This\n  patch fixes it.\n\no Following is one possible sequence of events. Say cpu0 is executing\n  throtl_update_blkio_group_read_bps() and cpu1 is executing\n  throtl_process_limit_change().\n\n cpu0                                                cpu1\n\n tg-\u003elimits_changed \u003d true;\n smp_mb__before_atomic_inc();\n atomic_inc(\u0026td-\u003elimits_changed);\n\n                                     if (!atomic_read(\u0026td-\u003elimits_changed))\n                                             return;\n\n                                     if (tg-\u003elimits_changed)\n                                             do_something;\n\n If cpu0 has updated tg-\u003elimits_changed and td-\u003elimits_changed, we want to\n make sure that if update to td-\u003elimits_changed is visible on cpu1, then\n update to tg-\u003elimits_changed should also be visible.\n\n Oleg pointed out to ensure that we need to insert an smp_rmb() between\n td-\u003elimits_changed read and tg-\u003elimits_changed read.\n\no I had erroneously put smp_rmb() before atomic_read(\u0026td-\u003elimits_changed).\n  This patch fixes it.\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347",
      "tree": "d34fabaf556ec4471e076b4794fa1de8515956f0",
      "parents": [
        "5478755616ae2ef1ce144dded589b62b2a50d575"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 01 19:34:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Dec 01 19:34:46 2010 +0100"
      },
      "message": "blk-throttle: Trim/adjust slice_end once a bio has been dispatched\n\no During some testing I did following and noticed throttling stops working.\n\n        - Put a very low limit on a cgroup, say 1 byte per second.\n        - Start some reads, this will set slice_end to a very high value.\n        - Change the limit to higher value say 1MB/s\n        - Now IO unthrottles and finishes as expected.\n        - Try to do the read again but IO is not limited to 1MB/s as expected.\n\no What is happening.\n        - Initially low value of limit sets slice_end to a very high value.\n        - During updation of limit, slice_end is not being truncated.\n        - Very high value of slice_end leads to keeping the existing slice\n          valid for a very long time and new slice does not start.\n        - tg_may_dispatch() is called in blk_throtle_bio(), and trim_slice()\n          is not called in this path. So slice_start is some old value and\n          practically we are able to do huge amount of IO.\n\no There are many ways it can be fixed. I have fixed it by trying to\n  adjust/cleanup slice_end in trim_slice(). Generally we extend slices if bio\n  is big and can\u0027t be dispatched in one slice. After dispatch of bio, readjust\n  the slice_end to make sure we don\u0027t end up with huge values.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c2f6805d470af369a7337801deeecea800dbfe1c",
      "tree": "2381b8c512d611869877adfad3d5e0dfe75e668a",
      "parents": [
        "d69b78ba1deaaa95ffa8dac5a9ca819ce454d52e"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Nov 15 19:32:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 15 19:32:42 2010 +0100"
      },
      "message": "blk-throttle: Fix calculation of max number of WRITES to be dispatched\n\no Currently we try to dispatch more READS and less WRITES (75%, 25%) in one\n  dispatch round. ummy pointed out that there is a bug in max_nr_writes\n  calculation. This patch fixes it.\n\nReported-by: ummy y \u003cyummylln@yahoo.com.cn\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c49c06e4960949a9bced708858433fcf6ca36a9c",
      "tree": "071c65544a98b6b0b599896591855f8ac69ab79a",
      "parents": [
        "9355aede5a3c4975e0ba8bbfe2b9d1fd73308916"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 21:16:42 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 21:16:42 2010 +0200"
      },
      "message": "blkio-throttle: Fix possible multiplication overflow in iops calculations\n\no User can specify max iops value of 32bit (UINT_MAX), through cgroup\n  interface. If a user has specified say 4294967294 (UNIT_MAX  - 2), then\n  on 32bit platform, following multiplication can overflow.\n\n  io_allowed \u003d (tg-\u003eiops[rw] * jiffy_elapsed_rnd)\n\no Explicitly cast the multiplication to 64bit and then perform division and\n  then check whether result is still great then UNINT_MAX.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5e901a2b95db709c5e40599ff4df6029be1e2a12",
      "tree": "e2450a1157c6f9411429fceb9939002d8c0282f8",
      "parents": [
        "3aad5d3ee4e4fce8f4b5bb6ca73342dcade42b33"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 21:16:38 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 21:16:38 2010 +0200"
      },
      "message": "blkio-throttle: There is no need to convert jiffies to milli seconds\n\no Do not convert jiffies to mili seconds as it is not required. Just work\n  with jiffies and HZ.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3aad5d3ee4e4fce8f4b5bb6ca73342dcade42b33",
      "tree": "1ba65d361b6d77761f53769fc8891a56085422c6",
      "parents": [
        "fe0714377ee2ca161bf2afb7773e22f15f1786d4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:51:14 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:51:14 2010 +0200"
      },
      "message": "blkio-throttle: Fix link failure failure on i386\n\no Randy Dunlap reported following linux-next failure. This patch fixes it.\n\non i386:\n\nblk-throttle.c:(.text+0x1abb8): undefined reference to `__udivdi3\u0027\nblk-throttle.c:(.text+0x1b1dc): undefined reference to `__udivdi3\u0027\n\no bytes_per_second interface is 64bit and I was continuing to do 64 bit\n  division even on 32bit platform without help of special macros/functions\n  hence the failure.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReported-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fe0714377ee2ca161bf2afb7773e22f15f1786d4",
      "tree": "09f5e8686d741d012333c92251b8cc66793ef916",
      "parents": [
        "02977e4af7ed3b478c505e50491ffdf3e1314cf4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "message": "blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n\no Currently any cgroup throttle limit changes are processed asynchronousy and\n  the change does not take affect till a new bio is dispatched from same group.\n\no It might happen that a user sets a redicuously low limit on throttling.\n  Say 1 bytes per second on reads. In such cases simple operations like mount\n  a disk can wait for a very long time.\n\no Once bio is throttled, there is no easy way to come out of that wait even if\n  user increases the read limit later.\n\no This patch fixes it. Now if a user changes the cgroup limits, we recalculate\n  the bio dispatch time according to new limits.\n\no Can\u0027t take queueu lock under blkcg_lock, hence after the change I wake\n  up the dispatch thread again which recalculates the time. So there are some\n  variables being synchronized across two threads without lock and I had to\n  make use of barriers. Hoping I have used barriers correctly. Any review of\n  memory barrier code especially will help.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02977e4af7ed3b478c505e50491ffdf3e1314cf4",
      "tree": "5adb947a5c8567cbbff79459e9feaccf354fd81f",
      "parents": [
        "61014e96e6ed55b8db0af31574eec2a75d4e8755"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:48 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:48 2010 +0200"
      },
      "message": "blkio: Add root group to td-\u003etg_list\n\no Currently all the dynamically allocated groups, except root grp is added\n  to td-\u003etg_list. This was not a problem so far but in next patch I will\n  travel through td-\u003etg_list to process any updates of limits on the group.\n  If root group is not in tg_list, then root group\u0027s updates are not\n  processed.\n\no It is better to root group also to tg_list instead of doing special\n  processing for it during limit updates.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8e89d13f4ede2467629a971618537430fafaaea3",
      "tree": "90a79a2997f597715e3ad7edeea507fdb6223882",
      "parents": [
        "7702e8f45b0a3bb262b9366c60beb5445758d94c"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Sep 15 17:06:37 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 08:44:00 2010 +0200"
      },
      "message": "blkio: Implementation of IOPS limit logic\n\no core logic of implementing IOPS throttling.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e43473b7f223ec866f7db273697e76c337c390f9",
      "tree": "e90b52dbe4ec4ae37263a00e2bd9eaf5367cf72f",
      "parents": [
        "4c9eefa16c6f124ffcc736cb719b24ea27f85017"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Sep 15 17:06:35 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 08:42:52 2010 +0200"
      },
      "message": "blkio: Core implementation of throttle policy\n\no Actual implementation of throttling policy in block layer. Currently it\n  implements READ and WRITE bytes per second throttling logic. IOPS throttling\n  comes in later patches.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    }
  ]
}
