)]}'
{
  "log": [
    {
      "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": "f48ec1d7885281a9c6cd7779d61f321d1b1fd741",
      "tree": "87f94a60dae017dc68b76605f76b89031004a7f7",
      "parents": [
        "5bc4afb1ec6aa562fac4d9aba34d957ee42f5813"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:25 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "cfq: fix build breakage \u0026 warnings\n\n* CFQ_WEIGHT_* defined inside CONFIG_BLK_CGROUP causes cfq-iosched.c\n  compile failure when the config is disabled.  Move it outside the\n  ifdef block.\n\n* Dummy cfqg_stats_*() definitions were lacking inline modifiers\n  causing unused functions warning if !CONFIG_CFQ_GROUP_IOSCHED.  Add\n  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": "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": "3381cb8d2ef1523dbaeec99161d766c25f1e52d6",
      "tree": "b5592ee2a0f84e694282c947611971eb7735622d",
      "parents": [
        "8a3d26151f24e2a2ffa550890144c3d54d2edb15"
      ],
      "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-\u003eweight to cfq\n\nblkio_group_conf-\u003eweight is owned by cfq and has no reason to be\ndefined in blkcg core.  Replace it with cfq_group-\u003edev_weight and let\nconf setting functions directly set it.  If dev_weight is zero, the\ncfqg doesn\u0027t have device specific weight configured.\n\nAlso, rename BLKIO_WEIGHT_* constants to CFQ_WEIGHT_* and rename\nblkio_cgroup-\u003eweight to blkio_cgroup-\u003ecfq_weight.  We eventually want\nper-policy storage in blkio_cgroup but just mark the ownership of the\nfield for now.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "155fead9b6347ead90e0b0396cb108a6ba6126c6",
      "tree": "7e14bb87d942561aa5f44ac8a2d09d6e546c6ccb",
      "parents": [
        "9ade5ea4ce57d3596eaee6a57cd212a483674058"
      ],
      "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 to cfq-iosched.c\n\nblkio_group_stats contains only fields used by cfq and has no reason\nto be defined in blkcg core.\n\n* Move blkio_group_stats to cfq-iosched.c and rename it to cfqg_stats.\n\n* blkg_policy_data-\u003estats is replaced with cfq_group-\u003estats.\n  blkg_prfill_[rw]stat() are updated to use offset against pd-\u003epdata\n  instead.\n\n* All related macros / functions are renamed so that they have cfqg_\n  prefix and the unnecessary @pol arguments are dropped.\n\n* All stat functions now take cfq_group * instead of blkio_group *.\n\n* lockdep assertion on queue lock dropped.  Elevator runs under queue\n  lock by default.  There isn\u0027t much to be gained by adding lockdep\n  assertions at stat function level.\n\n* cfqg_stats_reset() implemented for blkio_reset_group_stats_fn method\n  so that cfqg-\u003estats can be 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": "2ce4d50f9cfab40831eee5e51e950d5c4724994b",
      "tree": "80dec4f311844b6a2af8a3f621ba9965de345d6d",
      "parents": [
        "60c2bc2d5a12369deef395cda41638d7e6b6bf19"
      ],
      "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": "cfq: collapse cfq.h into cfq-iosched.c\n\nblock/cfq.h contains some functions which interact with blkcg;\nhowever, this is only part of it and cfq-iosched.c already has quite\nsome #ifdef CONFIG_CFQ_GROUP_IOSCHED.  With conf/stat handling being\nmoved to specific policies, having these relay functions isolated in\ncfq.h doesn\u0027t make much sense.  Collapse cfq.h into cfq-iosched.c for\nnow.  Let\u0027s split blkcg support properly later if necessary.\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": "5bf14c0727a07ded1bd9fa6d77923d7e6dc32833",
      "tree": "db1c4db0ece7ec7f416c9581eef3bdf172a73864",
      "parents": [
        "8bcb6c7d48eb341b1f49f814cdcbe05eb6f15680"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Sun Apr 01 14:33:39 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Sun Apr 01 14:33:39 2012 -0700"
      },
      "message": "block: Make cfq_target_latency tunable through sysfs.\n\nIn cfq, when we calculate a time slice for a process(or a cfqq to\nbe precise), we have to consider the cfq_target_latency so that all the\nsync request have an estimated latency(300ms) and it is controlled by\ncfq_target_latency. But in some hadoop test, we have found that if\nthere are many processes doing sequential read(24 for example), the\nthroughput is bad because every process can only work for about 25ms\nand the cfqq is switched. That leads to a higher disk seek. We can\nachive the good throughput by setting low_latency\u003d0, but then some\nread\u0027s latency is too much for the application.\n\nSo this patch makes cfq_target_latency tunable through sysfs so that\nwe can tune it and find some magic number which is not bad for both\nthe throughput and the read latency.\n\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "eb7d8c07f9c5fca6190b0d328179551122d1b8a3",
      "tree": "b75cd8a91faee93990ec03f0044d24111e51a918",
      "parents": [
        "2b566fa55b9a94b53217c2818e6c5e5756eeb1a1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Mar 23 14:02:53 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Mar 23 14:02:53 2012 +0100"
      },
      "message": "cfq: fix cfqg ref handling when BLK_CGROUP \u0026\u0026 !CFQ_GROUP_IOSCHED\n\nWhen BLK_CGROUP is enabled but CFQ_GROUP_IOSCHED is, cfq ends up\ncalling blkg_get/put() on dummy cfqg leading to the following crash.\n\n  BUG: unable to handle kernel NULL pointer dereference at 00000000000000b0\n  IP: [\u003cffffffff813d44d8\u003e] cfq_init_queue+0x258/0x430\n  PGD 0\n  Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC\n  CPU 0\n  Modules linked in:\n\n  Pid: 1, comm: swapper/0 Not tainted 3.3.0-rc6-work+ #125 Bochs Bochs\n  RIP: 0010:[\u003cffffffff813d44d8\u003e]  [\u003cffffffff813d44d8\u003e] cfq_init_queue+0x258/0x430\n  RSP: 0018:ffff88001f9dfd80  EFLAGS: 00010046\n  RAX: ffff88001aefbbf0 RBX: ffff88001aeedbf0 RCX: 0000000000000100\n  RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff820ffd40\n  RBP: ffff88001f9dfdd0 R08: 0000000000000000 R09: 0000000000000001\n  R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000\n  R13: 0000000000000009 R14: ffff88001aefbc30 R15: 0000000000000003\n  FS:  0000000000000000(0000) GS:ffff88001fc00000(0000) knlGS:0000000000000000\n  CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n  CR2: 00000000000000b0 CR3: 000000000206f000 CR4: 00000000000006f0\n  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n  DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n  Process swapper/0 (pid: 1, threadinfo ffff88001f9de000, task ffff88001f9dc040)\n  Stack:\n   ffff88001aeedbf0 ffff88001aefbdb0 ffff88001aef1548 ffff88001aefbbf0\n   ffff88001f9dfdd0 ffff88001aef1548 ffffffff820d6320 ffffffff8165ce30\n   ffffffff82c555e0 ffff88001aeebbf0 ffff88001f9dfe00 ffffffff813b0507\n  Call Trace:\n   [\u003cffffffff813b0507\u003e] elevator_init+0xd7/0x140\n   [\u003cffffffff813b83d5\u003e] blk_init_allocated_queue+0x125/0x150\n   [\u003cffffffff813b94d3\u003e] blk_init_queue_node+0x43/0x80\n   [\u003cffffffff813b9523\u003e] blk_init_queue+0x13/0x20\n   [\u003cffffffff821aec00\u003e] floppy_init+0x82/0xec7\n   [\u003cffffffff810001d2\u003e] do_one_initcall+0x42/0x170\n   [\u003cffffffff821835fc\u003e] kernel_init+0xcb/0x14f\n   [\u003cffffffff81b40b24\u003e] kernel_thread_helper+0x4/0x10\n  Code: 00 e8 1d 9e 76 00 48 8b 43 48 48 85 c0 48 89 83 28 03 00 00 74 07 4c 8b a0 10 ff ff ff 8b 15 b0 2e d0 00 85 d2 0f 85 49 01 00 00 \u003c41\u003e 8b 84 24 b0 00 00 00 85 c0 0f 8e 8c 01 00 00 83 e8 01 85 c0\n  RIP  [\u003cffffffff813d44d8\u003e] cfq_init_queue+0x258/0x430\n\nBecause cfq\u0027s blkcg support has a on/off switch, CFQ_GROUP_IOSCHED,\nseparate from BLK_CGROUP, blkg access through cfqg needs to be\nconditioned on it.\n\n* Make blkg_to_cfqg() and cfqg_to_blkg() conditioned on\n  CFQ_GROUP_IOSCHED.  If disabled, they always return %NULL.\n\n* Introduce cfqg_get() and cfqg_put() conditioned on\n  CFQ_GROUP_IOSCHED.  If disabled, they are noops.\n\nReported-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "598971bfbdfdc8701337dc1636c7919c44699914",
      "tree": "3de33d5059ce3a0cf77a9735804335f9264b7c08",
      "parents": [
        "abede6da27d9bd62ea9512830c83e32b3ee1104c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 19 15:10:58 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:47:47 2012 +0100"
      },
      "message": "cfq: don\u0027t use icq_get_changed()\n\ncfq caches the associated cfqq\u0027s for a given cic.  The cache needs to\nbe flushed if the cic\u0027s ioprio or blkcg has changed.  It is currently\ndone by requiring the changing action to set the respective\nICQ_*_CHANGED bit in the icq and testing it from cfq_set_request(),\nwhich involves iterating through all the affected icqs.\n\nAll cfq wants to know is whether ioprio and/or blkcg have changed\nsince the last flush and can be easily achieved by just remembering\nthe current ioprio and blkcg ID in cic.\n\nThis patch adds cic-\u003e{ioprio|blkcg_id}, updates all ioprio users to\nuse the remembered value instead, and updates cfq_set_request() path\nsuch that, instead of using icq_get_changed(), the current values are\ncompared against the remembered ones and trigger appropriate flush\naction if not.  Condition tests are moved inside both _changed\nfunctions which are now named check_ioprio_changed() and\ncheck_blkcg_changed().\n\nioprio.h::task_ioprio*() can\u0027t be used anymore and replaced with\nopen-coded IOPRIO_CLASS_NONE case in cfq_async_queue_prio().\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": "abede6da27d9bd62ea9512830c83e32b3ee1104c",
      "tree": "6ddd5ddec15f0b5a8c9c1905bbb57d5a164d37ca",
      "parents": [
        "9a9e8a26da4c2c5ddc60999bdea957935fb22b6b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 19 15:10:57 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:47:47 2012 +0100"
      },
      "message": "cfq: pass around cfq_io_cq instead of io_context\n\nNow that io_cq is managed by block core and guaranteed to exist for\nany in-flight request, it is easier and carries more information to\npass around cfq_io_cq than io_context.\n\nThis patch updates cfq_init_prio_data(), cfq_find_alloc_queue() and\ncfq_get_queue() to take @cic instead of @ioc.  This change removes a\nduplicate cfq_cic_lookup() from cfq_find_alloc_queue().\n\nThis change enables the use of cic-cached ioprio in the next patch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "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": "852c788f8365062c8a383c5a93f7f7289977cb50",
      "tree": "561b69e7f2b6bcc16de165b3b988990de7913615",
      "parents": [
        "f6e8d01bee036460e03bd4f6a79d014f98ba712e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:27 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: implement bio_associate_current()\n\nIO scheduling and cgroup are tied to the issuing task via io_context\nand cgroup of %current.  Unfortunately, there are cases where IOs need\nto be routed via a different task which makes scheduling and cgroup\nlimit enforcement applied completely incorrectly.\n\nFor example, all bios delayed by blk-throttle end up being issued by a\ndelayed work item and get assigned the io_context of the worker task\nwhich happens to serve the work item and dumped to the default block\ncgroup.  This is double confusing as bios which aren\u0027t delayed end up\nin the correct cgroup and makes using blk-throttle and cfq propio\ntogether impossible.\n\nAny code which punts IO issuing to another task is affected which is\ngetting more and more common (e.g. btrfs).  As both io_context and\ncgroup are firmly tied to task including userland visible APIs to\nmanipulate them, it makes a lot of sense to match up tasks to bios.\n\nThis patch implements bio_associate_current() which associates the\nspecified bio with %current.  The bio will record the associated ioc\nand blkcg at that point and block layer will use the recorded ones\nregardless of which task actually ends up issuing the bio.  bio\nrelease puts the associated ioc and blkcg.\n\nIt grabs and remembers ioc and blkcg instead of the task itself\nbecause task may already be dead by the time the bio is issued making\nioc and blkcg inaccessible and those are all block layer cares about.\n\nelevator_set_req_fn() is updated such that the bio elvdata is being\nallocated for is available to the elevator.\n\nThis doesn\u0027t update block cgroup policies yet.  Further patches will\nimplement the support.\n\n-v2: #ifdef CONFIG_BLK_CGROUP added around bio-\u003ebi_ioc dereference in\n     rq_ioc() to fix build breakage.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Kent Overstreet \u003ckoverstreet@google.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f6e8d01bee036460e03bd4f6a79d014f98ba712e",
      "tree": "acaaab3667e0450f0f05464426c3540c89ce4e18",
      "parents": [
        "3d48749d93a3dce732dd30a14002ab90ec4355f3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:26 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "block: add io_context-\u003eactive_ref\n\nCurrently ioc-\u003enr_tasks is used to decide two things - whether an ioc\nis done issuing IOs and whether it\u0027s shared by multiple tasks.  This\npatch separate out the first into ioc-\u003eactive_ref, which is acquired\nand released using {get|put}_io_context_active() respectively.\n\nThis will be used to associate bio\u0027s with a given task.  This patch\ndoesn\u0027t introduce any visible behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "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": "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": "b2fab5acd28ead6f0dd6c3996ba23f0ef1772f15",
      "tree": "b0b96984e1a4d9c856edc9ddfc36e427951c5a86",
      "parents": [
        "5a5bafdc396b1da7570f84fb96a0f8a288970c5e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:14:57 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:21 2012 +0100"
      },
      "message": "elevator: make elevator_init_fn() return 0/-errno\n\nelevator_ops-\u003eelevator_init_fn() has a weird return value.  It returns\na void * which the caller should assign to q-\u003eelevator-\u003eelevator_data\nand %NULL return denotes init failure.\n\nUpdate such that it returns integer 0/-errno and sets elevator_data\ndirectly as necessary.\n\nThis makes the interface more conventional and eases further 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": "b95ada558c9e69c69ffd6950eb644ee8a3dba18f",
      "tree": "565eda3f793d6b89623fba41beb93df03ceef696",
      "parents": [
        "32e380aedc3de454c06ce1c254fe3bea35a676e1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:14:55 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:21 2012 +0100"
      },
      "message": "cfq: don\u0027t register propio policy if !CONFIG_CFQ_GROUP_IOSCHED\n\ncfq has been registering zeroed blkio_poilcy_cfq if CFQ_GROUP_IOSCHED\nis disabled.  This fortunately doesn\u0027t collide with blk-throtl as\nBLKIO_POLICY_PROP is zero but is unnecessary and risky.  Just don\u0027t\nregister it if not enabled.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "d705ae6b133f9f6a8beee617b1224b6a5c99c5da",
      "tree": "b1a0b09ae01f8385e66c021c338106b88e8d23f8",
      "parents": [
        "7ada1dd62804ca9ce1cb8666c6e563cd92fa50c1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 15 09:45:49 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 15 09:45:49 2012 +0100"
      },
      "message": "block: replace icq-\u003echanged with icq-\u003eflags\n\nicq-\u003echanged was used for ICQ_*_CHANGED bits.  Rename it to flags and\naccess it under ioc-\u003elock instead of using atomic bitops.\nioc_get_changed() is added so that the changed part can be fetched and\ncleared as before.\n\nicq-\u003eflags will be used to carry other flags.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nTested-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "07c2bd37350c9b1af71b35d05f16e300a6602948",
      "tree": "e45ee2952fb78d6d8f2372c8ea1f854da825fa90",
      "parents": [
        "050c8ea80e3e90019d9e981c6a117ef614e882ed"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 08 09:19:42 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Feb 08 09:19:42 2012 +0100"
      },
      "message": "block: don\u0027t call elevator callbacks for plug merges\n\nPlug merge calls two elevator callbacks outside queue lock -\nelevator_allow_merge_fn() and elevator_bio_merged_fn().  Although\nattempt_plug_merge() suggests that elevator is guaranteed to be there\nthrough the existing request on the plug list, nothing prevents plug\nmerge from calling into dying or initializing elevator.\n\nFor regular merges, bypass ensures elvpriv count to reach zero, which\nin turn prevents merges as all !ELVPRIV requests get REQ_SOFTBARRIER\nfrom forced back insertion.  Plug merge doesn\u0027t check ELVPRIV, and, as\nthe requests haven\u0027t gone through elevator insertion yet, it doesn\u0027t\nhave SOFTBARRIER set allowing merges on a bypassed queue.\n\nThis, for example, leads to the following crash during elevator\nswitch.\n\n BUG: unable to handle kernel NULL pointer dereference at 0000000000000008\n IP: [\u003cffffffff813b34e9\u003e] cfq_allow_merge+0x49/0xa0\n PGD 112cbc067 PUD 115d5c067 PMD 0\n Oops: 0000 [#1] PREEMPT SMP\n CPU 1\n Modules linked in: deadline_iosched\n\n Pid: 819, comm: dd Not tainted 3.3.0-rc2-work+ #76 Bochs Bochs\n RIP: 0010:[\u003cffffffff813b34e9\u003e]  [\u003cffffffff813b34e9\u003e] cfq_allow_merge+0x49/0xa0\n RSP: 0018:ffff8801143a38f8  EFLAGS: 00010297\n RAX: 0000000000000000 RBX: ffff88011817ce28 RCX: ffff880116eb6cc0\n RDX: 0000000000000000 RSI: ffff880118056e20 RDI: ffff8801199512f8\n RBP: ffff8801143a3908 R08: 0000000000000000 R09: 0000000000000000\n R10: 0000000000000001 R11: 0000000000000000 R12: ffff880118195708\n R13: ffff880118052aa0 R14: ffff8801143a3d50 R15: ffff880118195708\n FS:  00007f19f82cb700(0000) GS:ffff88011fc80000(0000) knlGS:0000000000000000\n CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n CR2: 0000000000000008 CR3: 0000000112c6a000 CR4: 00000000000006e0\n DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n Process dd (pid: 819, threadinfo ffff8801143a2000, task ffff880116eb6cc0)\n Stack:\n  ffff88011817ce28 ffff880118195708 ffff8801143a3928 ffffffff81391bba\n  ffff88011817ce28 ffff880118195708 ffff8801143a3948 ffffffff81391bf1\n  ffff88011817ce28 0000000000000000 ffff8801143a39a8 ffffffff81398e3e\n Call Trace:\n  [\u003cffffffff81391bba\u003e] elv_rq_merge_ok+0x4a/0x60\n  [\u003cffffffff81391bf1\u003e] elv_try_merge+0x21/0x40\n  [\u003cffffffff81398e3e\u003e] blk_queue_bio+0x8e/0x390\n  [\u003cffffffff81396a5a\u003e] generic_make_request+0xca/0x100\n  [\u003cffffffff81396b04\u003e] submit_bio+0x74/0x100\n  [\u003cffffffff811d45c2\u003e] __blockdev_direct_IO+0x1ce2/0x3450\n  [\u003cffffffff811d0dc7\u003e] blkdev_direct_IO+0x57/0x60\n  [\u003cffffffff811460b5\u003e] generic_file_aio_read+0x6d5/0x760\n  [\u003cffffffff811986b2\u003e] do_sync_read+0xe2/0x120\n  [\u003cffffffff81199345\u003e] vfs_read+0xc5/0x180\n  [\u003cffffffff81199501\u003e] sys_read+0x51/0x90\n  [\u003cffffffff81aeac12\u003e] system_call_fastpath+0x16/0x1b\n\nThere are multiple ways to fix this including making plug merge check\nELVPRIV; however,\n\n* Calling into elevator outside queue lock is confusing and\n  error-prone.\n\n* Requests on plug list aren\u0027t known to the elevator.  They aren\u0027t on\n  the elevator yet, so there\u0027s no elevator specific state to update.\n\n* Given the nature of plug merges - collecting bio\u0027s for the same\n  purpose from the same issuer - elevator specific restrictions aren\u0027t\n  applicable.\n\nSo, simply don\u0027t call into elevator methods from plug merge by moving\nelv_bio_merged() from bio_attempt_*_merge() to blk_queue_bio(), and\nusing blk_try_merge() in attempt_plug_merge().\n\nThis is based on Jens\u0027 patch to skip elevator_allow_merge_fn() from\nplug merge.\n\nNote that this makes per-cgroup merged stats skip plug merging.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c4F16F3CA.90904@kernel.dk\u003e\nOriginal-patch-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "11a3122f6cf2d988a77eb8883d0fc49cd013a6d5",
      "tree": "ded8ea8a2982754ff0c58448a7ed2e59487104cb",
      "parents": [
        "822bfa51ce44f2c63c300fdb76dc99c4d5a5ca9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Feb 07 07:51:30 2012 +0100"
      },
      "message": "block: strip out locking optimization in put_io_context()\n\nput_io_context() performed a complex trylock dancing to avoid\ndeferring ioc release to workqueue.  It was also broken on UP because\ntrylock was always assumed to succeed which resulted in unbalanced\npreemption count.\n\nWhile there are ways to fix the UP breakage, even the most\npathological microbench (forced ioc allocation and tight fork/exit\nloop) fails to show any appreciable performance benefit of the\noptimization.  Strip it out.  If there turns out to be workloads which\nare affected by this change, simpler optimization from the discussion\nthread can be applied later.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nLKML-Reference: \u003c1328514611.21268.66.camel@sli10-conroe\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "df0793abb929e66606fa25f3875ff1b89de5ad32",
      "tree": "fa53e6e4e7f4a6773f45173132bbfd77908f7c17",
      "parents": [
        "90a4c0f51e8e44111a926be6f4c87af3938a79c3"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 19 09:20:09 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Jan 19 09:20:09 2012 +0100"
      },
      "message": "block,cfq: change code order\n\ncfq_slice_expired will change saved_workload_slice. It should be called\nfirst so saved_workload_slice is correctly set to 0 after workload type\nis changed.\nThis fixes the code order changed by 54b466e44b1c7.\n\nTested-by: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "54b466e44b1c7809144bbd8cd6be3f85877ca46f",
      "tree": "01c99a8b6fff843ac7c327b8a0c777039e2c405e",
      "parents": [
        "b3c9dd182ed3bdcdaf0e42625a35924b0497afdc"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jan 17 21:26:11 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jan 17 21:26:11 2012 +0100"
      },
      "message": "cfq-iosched: fix use-after-free of cfqq\n\nWith the changes in life time management between the cfq IO contexts\nand the cfq queues, we now risk having cfqd-\u003eactive_queue being\nfreed when cfq_slice_expired() is being called. cfq_preempt_queue()\ncaches this queue and uses it after calling said function, causing\na use-after-free condition. This triggers the following oops,\nwhen cfqq_type() attempts to dereference it:\n\nBUG: unable to handle kernel paging request at ffff8800746c4f0c\nIP: [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\nPGD 18d4063 PUD 1fe15067 PMD 1ffb9067 PTE 80000000746c4160\nOops: 0000 [#1] SMP DEBUG_PAGEALLOC\nCPU 3\nModules linked in:\n\nPid: 1, comm: init Not tainted 3.2.0-josef+ #367 Bochs Bochs\nRIP: 0010:[\u003cffffffff81266d59\u003e]  [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\nRSP: 0018:ffff880079c11778  EFLAGS: 00010046\nRAX: 0000000000000000 RBX: ffff880076f3df08 RCX: 0000000000000000\nRDX: 0000000000000006 RSI: ffff880074271888 RDI: ffff8800746c4f08\nRBP: ffff880079c11778 R08: 0000000000000078 R09: 0000000000000001\nR10: 09f911029d74e35b R11: 09f911029d74e35b R12: ffff880076f337f0\nR13: ffff8800746c4f08 R14: ffff8800746c4f08 R15: 0000000000000002\nFS:  00007f62fd44f700(0000) GS:ffff88007cd80000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\nCR2: ffff8800746c4f0c CR3: 0000000076c21000 CR4: 00000000000006e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess init (pid: 1, threadinfo ffff880079c10000, task ffff880079c0a040)\nStack:\n ffff880079c117c8 ffffffff812683d8 ffff880079c117a8 ffffffff8125de43\n ffff8800744fcf48 ffff880074b43e98 ffff8800770c8828 ffff880074b43e98\n 0000000000000003 0000000000000000 ffff880079c117f8 ffffffff81254149\nCall Trace:\n [\u003cffffffff812683d8\u003e] cfq_insert_request+0x3f5/0x47c\n [\u003cffffffff8125de43\u003e] ? blk_recount_segments+0x20/0x31\n [\u003cffffffff81254149\u003e] __elv_add_request+0x1ca/0x200\n [\u003cffffffff8125aa99\u003e] blk_queue_bio+0x2ef/0x312\n [\u003cffffffff81258f7b\u003e] generic_make_request+0x9f/0xe0\n [\u003cffffffff8125907b\u003e] submit_bio+0xbf/0xca\n [\u003cffffffff81136ec7\u003e] submit_bh+0xdf/0xfe\n [\u003cffffffff81176d04\u003e] ext3_bread+0x50/0x99\n [\u003cffffffff811785b3\u003e] dx_probe+0x38/0x291\n [\u003cffffffff81178864\u003e] ext3_dx_find_entry+0x58/0x219\n [\u003cffffffff81178ad5\u003e] ext3_find_entry+0xb0/0x406\n [\u003cffffffff8110c4d5\u003e] ? cache_alloc_debugcheck_after.isra.46+0x14d/0x1a0\n [\u003cffffffff8110cfbd\u003e] ? kmem_cache_alloc+0xef/0x191\n [\u003cffffffff8117a330\u003e] ext3_lookup+0x39/0xe1\n [\u003cffffffff81119461\u003e] d_alloc_and_lookup+0x45/0x6c\n [\u003cffffffff8111ac41\u003e] do_lookup+0x1e4/0x2f5\n [\u003cffffffff8111aef6\u003e] link_path_walk+0x1a4/0x6ef\n [\u003cffffffff8111b557\u003e] path_lookupat+0x59/0x5ea\n [\u003cffffffff8127406c\u003e] ? __strncpy_from_user+0x30/0x5a\n [\u003cffffffff8111bce0\u003e] do_path_lookup+0x23/0x59\n [\u003cffffffff8111cfd6\u003e] user_path_at_empty+0x53/0x99\n [\u003cffffffff8107b37b\u003e] ? remove_wait_queue+0x51/0x56\n [\u003cffffffff8111d02d\u003e] user_path_at+0x11/0x13\n [\u003cffffffff811141f5\u003e] vfs_fstatat+0x3a/0x64\n [\u003cffffffff8111425a\u003e] vfs_stat+0x1b/0x1d\n [\u003cffffffff81114359\u003e] sys_newstat+0x1a/0x33\n [\u003cffffffff81060e12\u003e] ? task_stopped_code+0x42/0x42\n [\u003cffffffff815d6712\u003e] system_call_fastpath+0x16/0x1b\nCode: 89 e6 48 89 c7 e8 fa ca fe ff 85 c0 74 06 4c 89 2b 41 b6 01 5b 44 89 f0 41 5c 41 5d 41 5e 5d c3 55 48 89 e5 66 66 66 66 90 31 c0 \u003c8b\u003e 57 04 f6 c6 01 74 0b 83 e2 20 83 fa 01 19 c0 83 c0 02 5d c3\nRIP  [\u003cffffffff81266d59\u003e] cfqq_type+0xb/0x20\n RSP \u003cffff880079c11778\u003e\nCR2: ffff8800746c4f0c\n\nGet rid of the caching of cfqd-\u003eactive_queue, and reorder the\ncheck so that it happens before we expire the active queue.\n\nThanks to Tejun for pin pointing the error location.\n\nReported-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nTested-by: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "4a0b75c7d02c2bd46ed227d4ba5941ba8a0aba5d",
      "tree": "a5a0c37a44c87227539ebc356178cc80435144d9",
      "parents": [
        "f1f8cc94651738b418ba54c039df536303b91704"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Dec 16 14:00:22 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Dec 16 14:00:22 2011 +0100"
      },
      "message": "block, cfq: fix empty queue crash caused by request merge\n\nAll requests of a queue could be merged to other requests of other queue.\nSuch queue will not have request in it, but it\u0027s in service tree. This\nwill cause kernel oops.\nI encounter a BUG_ON() in cfq_dispatch_request() with next patch, but the\nissue should exist without the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f1f8cc94651738b418ba54c039df536303b91704",
      "tree": "eb8bc5a33dec104ab32a935a5bb1e1da2e7cdd34",
      "parents": [
        "9b84cacd013996f244d85b3d873287c2a8f88658"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move icq creation and rq-\u003eelv.icq association to block core\n\nNow block layer knows everything necessary to create and associate\nicq\u0027s with requests.  Move ioc_create_icq() to blk-ioc.c and update\nget_request() such that, if elevator_type-\u003eicq_size is set, requests\nare automatically associated with their matching icq\u0027s before\nelv_set_request().  io_context reference is also managed by block core\non request alloc/free.\n\n* Only ioprio/cgroup changed handling remains from cfq_get_cic().\n  Collapsed into cfq_set_request().\n\n* This removes queue kicking on icq allocation failure (for now).  As\n  icq allocation failure is rare and the only effect of queue kicking\n  achieved was possibily accelerating queue processing, this change\n  shouldn\u0027t be noticeable.\n\n  There is a larger underlying problem.  Unlike request allocation,\n  icq allocation is not guaranteed to succeed eventually after\n  retries.  The number of icq is unbound and thus mempool can\u0027t be the\n  solution either.  This effectively adds allocation dependency on\n  memory free path and thus possibility of deadlock.\n\n  This usually wouldn\u0027t happen because icq allocation is not a hot\n  path and, even when the condition triggers, it\u0027s highly unlikely\n  that none of the writeback workers already has icq.\n\n  However, this is still possible especially if elevator is being\n  switched under high memory pressure, so we better get it fixed.\n  Probably the only solution is just bypassing elevator and appending\n  to dispatch queue on any elevator allocation failure.\n\n* Comment added to explain how icq\u0027s are managed and synchronized.\n\nThis completes cleanup of io_context interface.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9b84cacd013996f244d85b3d873287c2a8f88658",
      "tree": "a11b850f9c8b182a7a8141276244a831aaae5291",
      "parents": [
        "7e5a8794492e43e9eebb68a98a23be055888ccd0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: restructure io_cq creation path for io_context interface cleanup\n\nAdd elevator_ops-\u003eelevator_init_icq_fn() and restructure\ncfq_create_cic() and rename it to ioc_create_icq().\n\nThe new function expects its caller to pass in io_context, uses\nelevator_type-\u003eicq_cache, handles generic init, calls the new elevator\noperation for elevator specific initialization, and returns pointer to\ncreated or looked up icq.  This leaves cfq_icq_pool variable without\nany user.  Removed.\n\nThis prepares for io_context interface cleanup and doesn\u0027t introduce\nany functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "7e5a8794492e43e9eebb68a98a23be055888ccd0",
      "tree": "cc049a23b2c994f910d3101860bc1c2ecb7aa35f",
      "parents": [
        "3d3c2379feb177a5fd55bb0ed76776dc9d4f3243"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move io_cq exit/release to blk-ioc.c\n\nWith kmem_cache managed by blk-ioc, io_cq exit/release can be moved to\nblk-ioc too.  The odd -\u003eio_cq-\u003eexit/release() callbacks are replaced\nwith elevator_ops-\u003eelevator_exit_icq_fn() with unlinking from both ioc\nand q, and freeing automatically handled by blk-ioc.  The elevator\noperation only need to perform exit operation specific to the elevator\n- in cfq\u0027s case, exiting the cfqq\u0027s.\n\nAlso, clearing of io_cq\u0027s on q detach is moved to block core and\nautomatically performed on elevator switch and q release.\n\nBecause the q io_cq points to might be freed before RCU callback for\nthe io_cq runs, blk-ioc code should remember to which cache the io_cq\nneeds to be freed when the io_cq is released.  New field\nio_cq-\u003e__rcu_icq_cache is added for this purpose.  As both the new\nfield and rcu_head are used only after io_cq is released and the\nq/ioc_node fields aren\u0027t, they are put into unions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "3d3c2379feb177a5fd55bb0ed76776dc9d4f3243",
      "tree": "fafebbef8f0fb5b73ac4db24bff20dcd40b8bf12",
      "parents": [
        "47fdd4ca96bf4b28ac4d05d7a6e382df31d3d758"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move icq cache management to block core\n\nLet elevators set -\u003eicq_size and -\u003eicq_align in elevator_type and\nelv_register() and elv_unregister() respectively create and destroy\nkmem_cache for icq.\n\n* elv_register() now can return failure.  All callers updated.\n\n* icq caches are automatically named \"ELVNAME_io_cq\".\n\n* cfq_slab_setup/kill() are collapsed into cfq_init/exit().\n\n* While at it, minor indentation change for iosched_cfq.elevator_name\n  for consistency.\n\nThis will help moving icq management to block core.  This doesn\u0027t\nintroduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "47fdd4ca96bf4b28ac4d05d7a6e382df31d3d758",
      "tree": "bcb928575b66511345b00102a7e8cace84526e3e",
      "parents": [
        "a612fddf0d8090f2877305c9168b6c1a34fb5d90"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:42 2011 +0100"
      },
      "message": "block, cfq: move io_cq lookup to blk-ioc.c\n\nNow that all io_cq related data structures are in block core layer,\nio_cq lookup can be moved from cfq-iosched.c to blk-ioc.c.\n\nLookup logic from cfq_cic_lookup() is moved to ioc_lookup_icq() with\nparameter return type changes (cfqd -\u003e request_queue, cfq_io_cq -\u003e\nio_cq) and cfq_cic_lookup() becomes thin wrapper around\ncfq_cic_lookup().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a612fddf0d8090f2877305c9168b6c1a34fb5d90",
      "tree": "b59047a1670469362e1ea44093522224bdcf5aae",
      "parents": [
        "c58698073218f2c8f2fc5982fa3938c2d3803b9f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n\nMost of icq management is about to be moved out of cfq into blk-ioc.\nThis patch prepares for it.\n\n* Move cfqd-\u003eicq_list to request_queue-\u003eicq_list\n\n* Make request explicitly point to icq instead of through elevator\n  private data.  -\u003eelevator_private[3] is replaced with sub struct elv\n  which contains icq pointer and priv[2].  cfq is updated accordingly.\n\n* Meaningless clearing of -\u003eelevator_private[0] removed from\n  elv_set_request().  At that point in code, the field was guaranteed\n  to be %NULL anyway.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "c58698073218f2c8f2fc5982fa3938c2d3803b9f",
      "tree": "ccd2403fd8674051a062efd2c22e6fdd179b7b8f",
      "parents": [
        "22f746e235a5cbee2a6ca9887b1be2aa7d31fe71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:41 2011 +0100"
      },
      "message": "block, cfq: reorganize cfq_io_context into generic and cfq specific parts\n\nCurrently io_context and cfq logics are mixed without clear boundary.\nMost of io_context is independent from cfq but cfq_io_context handling\nlogic is dispersed between generic ioc code and cfq.\n\ncfq_io_context represents association between an io_context and a\nrequest_queue, which is a concept useful outside of cfq, but it also\ncontains fields which are useful only to cfq.\n\nThis patch takes out generic part and put it into io_cq (io\ncontext-queue) and the rest into cfq_io_cq (cic moniker remains the\nsame) which contains io_cq.  The following changes are made together.\n\n* cfq_ttime and cfq_io_cq now live in cfq-iosched.c.\n\n* All related fields, functions and constants are renamed accordingly.\n\n* ioc-\u003eioc_data is now \"struct io_cq *\" instead of \"void *\" and\n  renamed to icq_hint.\n\nThis prepares for io_context API cleanup.  Documentation is currently\nsparse.  It will be added later.\n\nChanges in this patch are mechanical and don\u0027t cause functional\nchange.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f2dbd76a0a994bc1d5a3d0e7c844cc373832e86c",
      "tree": "cae6a4333ee6e5eb76ef133dfdee95e1943c0ab1",
      "parents": [
        "1238033c79e92e5c315af12e45396f1a78c73dec"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "message": "block, cfq: replace current_io_context() with create_io_context()\n\nWhen called under queue_lock, current_io_context() triggers lockdep\nwarning if it hits allocation path.  This is because io_context\ninstallation is protected by task_lock which is not IRQ safe, so it\ntriggers irq-unsafe-lock -\u003e irq -\u003e irq-safe-lock -\u003e irq-unsafe-lock\ndeadlock warning.\n\nGiven the restriction, accessor + creator rolled into one doesn\u0027t work\ntoo well.  Drop current_io_context() and let the users access\ntask-\u003eio_context directly inside queue_lock combined with explicit\ncreation using create_io_context().\n\nFuture ioc updates will further consolidate ioc access and the create\ninterface will be unexported.\n\nWhile at it, relocate ioc internal interface declarations in blk.h and\nadd section comments before and after.\n\nThis patch does not introduce functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "1238033c79e92e5c315af12e45396f1a78c73dec",
      "tree": "0f205155f811930f0cf43716e56fa57ea1f792b9",
      "parents": [
        "b50b636bce6293fa858cc7ff6c3ffe4920d90006"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:40 2011 +0100"
      },
      "message": "block, cfq: kill cic-\u003ekey\n\nNow that lazy paths are removed, cfqd_dead_key() is meaningless and\ncic-\u003eq can be used whereever cic-\u003ekey is used.  Kill cic-\u003ekey.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b50b636bce6293fa858cc7ff6c3ffe4920d90006",
      "tree": "65a4c509ff491aa89bf4d1a5f3e26d600eeea49f",
      "parents": [
        "b9a1920837bc53430d339380e393a6e4c372939f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: kill ioc_gone\n\nNow that cic\u0027s are immediately unlinked under both locks, there\u0027s no\nneed to count and drain cic\u0027s before module unload.  RCU callback\ncompletion is waited with rcu_barrier().\n\nWhile at it, remove residual RCU operations on cic_list.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b9a1920837bc53430d339380e393a6e4c372939f",
      "tree": "e3f7b8389fe58ebf88381ad404ad408cef9792c2",
      "parents": [
        "b2efa05265d62bc29f3a64400fad4b44340eedb8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: remove delayed unlink\n\nNow that all cic\u0027s are immediately unlinked from both ioc and queue,\nlazy dropping from lookup path and trimming on elevator unregister are\nunnecessary.  Kill them and remove now unused elevator_ops-\u003etrim().\n\nThis also leaves call_for_each_cic() without any user.  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b2efa05265d62bc29f3a64400fad4b44340eedb8",
      "tree": "4555f0b5f0025c099997b81f7b3f8bc48b44220d",
      "parents": [
        "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: unlink cfq_io_context\u0027s immediately\n\ncic is association between io_context and request_queue.  A cic is\nlinked from both ioc and q and should be destroyed when either one\ngoes away.  As ioc and q both have their own locks, locking becomes a\nbit complex - both orders work for removal from one but not from the\nother.\n\nCurrently, cfq tries to circumvent this locking order issue with RCU.\nioc-\u003elock nests inside queue_lock but the radix tree and cic\u0027s are\nalso protected by RCU allowing either side to walk their lists without\ngrabbing lock.\n\nThis rather unconventional use of RCU quickly devolves into extremely\nfragile convolution.  e.g. The following is from cfqd going away too\nsoon after ioc and q exits raced.\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n [   88.503444]\n Pid: 599, comm: hexdump Not tainted 3.1.0-rc10-work+ #158 Bochs Bochs\n RIP: 0010:[\u003cffffffff81397628\u003e]  [\u003cffffffff81397628\u003e] cfq_exit_single_io_context+0x58/0xf0\n ...\n Call Trace:\n  [\u003cffffffff81395a4a\u003e] call_for_each_cic+0x5a/0x90\n  [\u003cffffffff81395ab5\u003e] cfq_exit_io_context+0x15/0x20\n  [\u003cffffffff81389130\u003e] exit_io_context+0x100/0x140\n  [\u003cffffffff81098a29\u003e] do_exit+0x579/0x850\n  [\u003cffffffff81098d5b\u003e] do_group_exit+0x5b/0xd0\n  [\u003cffffffff81098de7\u003e] sys_exit_group+0x17/0x20\n  [\u003cffffffff81b02f2b\u003e] system_call_fastpath+0x16/0x1b\n\nThe only real hot path here is cic lookup during request\ninitialization and avoiding extra locking requires very confined use\nof RCU.  This patch makes cic removal from both ioc and request_queue\nperform double-locking and unlink immediately.\n\n* From q side, the change is almost trivial as ioc-\u003elock nests inside\n  queue_lock.  It just needs to grab each ioc-\u003elock as it walks\n  cic_list and unlink it.\n\n* From ioc side, it\u0027s a bit more difficult because of inversed lock\n  order.  ioc needs its lock to walk its cic_list but can\u0027t grab the\n  matching queue_lock and needs to perform unlock-relock dancing.\n\n  Unlinking is now wholly done from put_io_context() and fast path is\n  optimized by using the queue_lock the caller already holds, which is\n  by far the most common case.  If the ioc accessed multiple devices,\n  it tries with trylock.  In unlikely cases of fast path failure, it\n  falls back to full double-locking dance from workqueue.\n\nDouble-locking isn\u0027t the prettiest thing in the world but it\u0027s *far*\nsimpler and more understandable than RCU trick without adding any\nmeaningful overhead.\n\nThis still leaves a lot of now unnecessary RCU logics.  Future patches\nwill trim them.\n\n-v2: Vivek pointed out that cic-\u003eq was being dereferenced after\n     cic-\u003erelease() was called.  Updated to use local variable @this_q\n     instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2",
      "tree": "c0ad51e3136286a9c1e1728fb1cfd7a322e8cf83",
      "parents": [
        "216284c352a0061f5b20acff2c4e50fb43fea183"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: fix cic lookup locking\n\n* cfq_cic_lookup() may be called without queue_lock and multiple tasks\n  can execute it simultaneously for the same shared ioc.  Nothing\n  prevents them racing each other and trying to drop the same dead cic\n  entry multiple times.\n\n* smp_wmb() in cfq_exit_cic() doesn\u0027t really do anything and nothing\n  prevents cfq_cic_lookup() seeing stale cic-\u003ekey.  This usually\n  doesn\u0027t blow up because by the time cic is exited, all requests have\n  been drained and new requests are terminated before going through\n  elevator.  However, it can still be triggered by plug merge path\n  which doesn\u0027t grab queue_lock and thus can\u0027t check DEAD state\n  reliably.\n\nThis patch updates lookup locking such that,\n\n* Lookup is always performed under queue_lock.  This doesn\u0027t add any\n  more locking.  The only issue is cfq_allow_merge() which can be\n  called from plug merge path without holding any lock.  For now, this\n  is worked around by using cic of the request to merge into, which is\n  guaranteed to have the same ioc.  For longer term, I think it would\n  be best to separate out plug merge method from regular one.\n\n* Spurious ioc-\u003elock locking around cic lookup hint assignment\n  dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "216284c352a0061f5b20acff2c4e50fb43fea183",
      "tree": "01611f6d35c041a941269cb3dd3926c0711722ae",
      "parents": [
        "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: fix race condition in cic creation path and tighten locking\n\ncfq_get_io_context() would fail if multiple tasks race to insert cic\u0027s\nfor the same association.  This patch restructures\ncfq_get_io_context() such that slow path insertion race is handled\nproperly.\n\nNote that the restructuring also makes cfq_get_io_context() called\nunder queue_lock and performs both ioc and cfqd insertions while\nholding both ioc and queue locks.  This is part of on-going locking\ntightening and will be used to simplify synchronization rules.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d",
      "tree": "ec24aa4b076f54fcfb0558d5113f5c5e0f4bc173",
      "parents": [
        "283287a52e3c3f7f8f9da747f4b8c5202740d776"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: move ioc ioprio/cgroup changed handling to cic\n\nioprio/cgroup change was handled by marking the changed state in ioc\nand, on the following access to the ioc, performing RCU-protected\niteration through all cic\u0027s grabbing the matching queue_lock.\n\nThis patch moves the changed state to each cic.  When ioprio or cgroup\nchanges, the respective bit is set on all cic\u0027s of the ioc and when\neach of those cic (not ioc) is accessed, change is applied for that\nspecific ioc-queue pair.\n\nThis also fixes the following two race conditions between setting and\nclearing of changed states.\n\n* Missing barrier between assign/load of ioprio and ioprio_changed\n  allowed applying old ioprio.\n\n* Change requests could happen between application of change and\n  clearing of changed variables.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "283287a52e3c3f7f8f9da747f4b8c5202740d776",
      "tree": "b5b145bcdcefc24deb68cd91bb16582286dce171",
      "parents": [
        "09ac46c429464c919d04bb737b27edd84d944f02"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: misc updates to cfq_io_context\n\nMake the following changes to prepare for ioc/cic management cleanup.\n\n* Add cic-\u003eq so that ioc can determine the associated queue without\n  querying cfq.  This will eventually replace -\u003ekey.\n\n* Factor out cfq_release_cic() from cic_free_func().  This function\n  assumes that the caller handled locking.\n\n* Rename __cfq_exit_single_io_context() to cfq_exit_cic() and make it\n  take only @cic.\n\n* Restructure cfq_cic_link() for future updates.\n\nThis patch doesn\u0027t introduce any functional changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6e736be7f282fff705db7c34a15313281b372a76",
      "tree": "1683e00e073ee4bd3027798f92ae2d368404d44b",
      "parents": [
        "42ec57a8f68311bbbf4ff96a5d33c8a2e90b9d05"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block: make ioc get/put interface more conventional and fix race on alloction\n\nIgnoring copy_io() during fork, io_context can be allocated from two\nplaces - current_io_context() and set_task_ioprio().  The former is\nalways called from local task while the latter can be called from\ndifferent task.  The synchornization between them are peculiar and\ndubious.\n\n* current_io_context() doesn\u0027t grab task_lock() and assumes that if it\n  saw %NULL -\u003eio_context, it would stay that way until allocation and\n  assignment is complete.  It has smp_wmb() between alloc/init and\n  assignment.\n\n* set_task_ioprio() grabs task_lock() for assignment and does\n  smp_read_barrier_depends() between \"ioc \u003d task-\u003eio_context\" and \"if\n  (ioc)\".  Unfortunately, this doesn\u0027t achieve anything - the latter\n  is not a dependent load of the former.  ie, if ioc itself were being\n  dereferenced \"ioc-\u003exxx\", it would mean something (not sure what tho)\n  but as the code currently stands, the dependent read barrier is\n  noop.\n\nAs only one of the the two test-assignment sequences is task_lock()\nprotected, the task_lock() can\u0027t do much about race between the two.\nNothing prevents current_io_context() and set_task_ioprio() allocating\nits own ioc for the same task and overwriting the other\u0027s.\n\nAlso, set_task_ioprio() can race with exiting task and create a new\nioc after exit_io_context() is finished.\n\nioc get/put doesn\u0027t have any reason to be complex.  The only hot path\nis accessing the existing ioc of %current, which is simple to achieve\ngiven that -\u003eio_context is never destroyed as long as the task is\nalive.  All other paths can happily go through task_lock() like all\nother task sub structures without impacting anything.\n\nThis patch updates ioc get/put so that it becomes more conventional.\n\n* alloc_io_context() is replaced with get_task_io_context().  This is\n  the only interface which can acquire access to ioc of another task.\n  On return, the caller has an explicit reference to the object which\n  should be put using put_io_context() afterwards.\n\n* The functionality of current_io_context() remains the same but when\n  creating a new ioc, it shares the code path with\n  get_task_io_context() and always goes through task_lock().\n\n* get_io_context() now means incrementing ref on an ioc which the\n  caller already has access to (be that an explicit refcnt or implicit\n  %current one).\n\n* PF_EXITING inhibits creation of new io_context and once\n  exit_io_context() is finished, it\u0027s guaranteed that both ioc\n  acquisition functions return %NULL.\n\n* All users are updated.  Most are trivial but\n  smp_read_barrier_depends() removal from cfq_get_io_context() needs a\n  bit of explanation.  I suppose the original intention was to ensure\n  ioc-\u003eioprio is visible when set_task_ioprio() allocates new\n  io_context and installs it; however, this wouldn\u0027t have worked\n  because set_task_ioprio() doesn\u0027t have wmb between init and install.\n  There are other problems with this which will be fixed in another\n  patch.\n\n* While at it, use NUMA_NO_NODE instead of -1 for wildcard node\n  specification.\n\n-v2: Vivek spotted contamination from debug patch.  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "a73f730d013ff2788389fd0c46ad3e5510f124e6",
      "tree": "773987c8cbec56745d46f46382ad268ed91adf98",
      "parents": [
        "8ba61435d73f2274e12d4d823fde06735e8f6a54"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:37 2011 +0100"
      },
      "message": "block, cfq: move cfqd-\u003ecic_index to q-\u003eid\n\ncfq allocates per-queue id using ida and uses it to index cic radix\ntree from io_context.  Move it to q-\u003eid and allocate on queue init and\nfree on queue release.  This simplifies cfq a bit and will allow for\nfurther improvements of io context life-cycle management.\n\nThis patch doesn\u0027t introduce any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "65299a3b788bd274bed92f9fa3232082c9f3ea70",
      "tree": "191c0afe31c15ac4c1bab96e0a07fddb097d0de8",
      "parents": [
        "5dc06c5a70b79a323152bec7e55783e705767e63"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Aug 23 14:50:29 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Aug 23 14:50:29 2011 +0200"
      },
      "message": "block: separate priority boosting from REQ_META\n\nAdd a new REQ_PRIO to let requests preempt others in the cfq I/O schedule,\nand lave REQ_META purely for marking requests as metadata in blktrace.\n\nAll existing callers of REQ_META except for XFS are updated to also\nset REQ_PRIO for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b53d1ed734a2b9af8da115b836b658daa7d47a48",
      "tree": "07ed12caa6fd50f97568f419448cf03906d980c4",
      "parents": [
        "4853abaae7e4a2af938115ce9071ef8684fb7af4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Aug 19 08:34:48 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Aug 19 08:34:48 2011 +0200"
      },
      "message": "Revert \"cfq: Remove special treatment for metadata rqs.\"\n\nWe have a kernel build regression since 3.1-rc1, which is about 10%\nregression. The kernel source is in an ext3 filesystem.\nAlex Shi bisect it to commit:\ncommit a07405b7802691d29ab3b23bdc76ee6d006aad0b\nAuthor: Justin TerAvest \u003cteravest@google.com\u003e\nDate:   Sun Jul 10 22:09:19 2011 +0200\n\n    cfq: Remove special treatment for metadata rqs.\n\nApparently this is caused by lack metadata preemption, where ext3/ext4\ndo use READ_META. I didn\u0027t see a way to fix the issue, so suggest\nreverting the patch.\n\nThis reverts commit a07405b7802691d29ab3b23bdc76ee6d006aad0b.\n\nReported-by: Alex Shi\u003calex.shi@intel.com\u003e\nReported-by: Shaohua Li\u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a5395b83b78f62ccf5e3af854aacd025c2a6e7b5",
      "tree": "9705672ce8d806582abe667f06b4d302954b1795",
      "parents": [
        "e5a94f56845bb4b272d82e84b5a1e2080b07ba82"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Aug 02 09:24:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Aug 02 09:24:09 2011 +0200"
      },
      "message": "cfq-iosched: Reduce linked group count upon group destruction\n\nFQ keeps track of number of groups which are linked on blkcg-\u003eblkg_list.\nThis is useful to avoid races between queue exit and cgroup exit code\npaths. So if at the request queue exit time linked group count is not\nzero, that means there are some group out there which is yet to be\ndeleted under rcu read period and queue exit code should wait for\non rcu period.\n\nIn my previous patch I forgot to decrease the number of group count.\nSo in current form, we nr_blkcg_linked_grps is always non-zero and\nwe will always wait one rcu period (if BLK_CGROUP\u003dy). The side effect\nof this is that it can increase boot time. I am surprised, nobody\ncomplained so far.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7700fc4f675fa38094e78e345b594363a2fd895b",
      "tree": "000ae1fb3d825240b7e78ad8d3db66be168ffe94",
      "parents": [
        "f5f2b6ceb23e02ff35c6dbc6a39aa776ace99cda"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 12 14:24:56 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 14:24:56 2011 +0200"
      },
      "message": "CFQ: add think time check for group\n\nCurrently when the last queue of a group has no request, we don\u0027t expire\nthe queue to hope request from the group comes soon, so the group doesn\u0027t\nmiss its share. But if the think time is big, the assumption isn\u0027t correct\nand we just waste bandwidth. In such case, we don\u0027t do idle.\n\n[global]\nruntime\u003d30\ndirect\u003d1\n\n[test1]\ncgroup\u003dtest1\ncgroup_weight\u003d1000\nrw\u003drandread\nioengine\u003dlibaio\nsize\u003d500m\nruntime\u003d30\ndirectory\u003d/mnt\nfilename\u003dfile1\nthinktime\u003d9000\n\n[test2]\ncgroup\u003dtest2\ncgroup_weight\u003d1000\nrw\u003drandread\nioengine\u003dlibaio\nsize\u003d500m\nruntime\u003d30\ndirectory\u003d/mnt\nfilename\u003dfile2\n\n\tpatched\t\tbase\ntest1\t64k\t\t39k\ntest2\t548k\t\t540k\ntotal\t604k\t\t578k\n\ngroup1 gets much better throughput because it waits less time.\n\nTo check if the patch changes behavior of queue without think time. I also\ntried to give test1 2ms think time or no think time. The test result is stable.\nThe thoughput doesn\u0027t change with/without the patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f5f2b6ceb23e02ff35c6dbc6a39aa776ace99cda",
      "tree": "19ea26a1832c03c1c221675d3372b86abd12cc83",
      "parents": [
        "383cd7213f95a2784ab5038fe292844178768b82"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 12 14:24:55 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 14:24:55 2011 +0200"
      },
      "message": "CFQ: add think time check for service tree\n\nCurrently when the last queue of a service tree has no request, we don\u0027t\nexpire the queue to hope request from the service tree comes soon, so the\nservice tree doesn\u0027t miss its share. But if the think time is big, the\nassumption isn\u0027t correct and we just waste bandwidth. In such case, we\ndon\u0027t do idle.\n\n[global]\nruntime\u003d10\ndirect\u003d1\n\n[test1]\nrw\u003drandread\nioengine\u003dlibaio\nsize\u003d500m\ndirectory\u003d/mnt\nfilename\u003dfile1\nthinktime\u003d9000\n\n[test2]\nrw\u003dread\nioengine\u003dlibaio\nsize\u003d1G\ndirectory\u003d/mnt\nfilename\u003dfile2\n\n\tpatched\t\tbase\ntest1\t41k/s\t\t33k/s\ntest2\t15868k/s\t15789k/s\ntotal\t15902k/s\t15817k/s\n\nA slightly better\n\nTo check if the patch changes behavior of queue without think time. I also\ntried to give test1 2ms think time or no think time. The test has variation\neven without the patch, but the average throughput doesn\u0027t change with/without\nthe patch.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "383cd7213f95a2784ab5038fe292844178768b82",
      "tree": "625de0648246daff30a9030e350c29584d29441e",
      "parents": [
        "4aede84b33d6beb401136a3deca0651ae07c5e99"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 12 14:24:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 14:24:35 2011 +0200"
      },
      "message": "CFQ: move think time check variables to a separate struct\n\nMove the variables to do think time check to a sepatate struct. This is\nto prepare adding think time check for service tree and group. No\nfunctional change.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4aede84b33d6beb401136a3deca0651ae07c5e99",
      "tree": "831266dbb15227584da5011ae4bb1e5038a69677",
      "parents": [
        "a07405b7802691d29ab3b23bdc76ee6d006aad0b"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Jul 12 08:31:45 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 08:35:10 2011 +0200"
      },
      "message": "fixlet: Remove fs_excl from struct task.\n\nfs_excl is a poor man\u0027s priority inheritance for filesystems to hint to\nthe block layer that an operation is important. It was never clearly\nspecified, not widely adopted, and will not prevent starvation in many\ncases (like across cgroups).\n\nfs_excl was introduced with the time sliced CFQ IO scheduler, to\nindicate when a process held FS exclusive resources and thus needed\na boost.\n\nIt doesn\u0027t cover all file systems, and it was never fully complete.\nLets kill it.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a07405b7802691d29ab3b23bdc76ee6d006aad0b",
      "tree": "8ca155acb56662e9807af2fa91b801b9f0d25495",
      "parents": [
        "316cc67d5e03801a5ee4ac660a4dfe9e02aed475"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Sun Jul 10 22:09:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jul 10 22:09:19 2011 +0200"
      },
      "message": "cfq: Remove special treatment for metadata rqs.\n\nThere is no consistency among filesystems from what bios (or requests)\nare marked as being metadata. It\u0027s interesting to expose this in traces,\nbut we shouldn\u0027t schedule the requests differently based on whether or\nnot they\u0027re marked as being metadata.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "04bf7869ca0fd12009aee301cac2264a36df4d98",
      "tree": "66cb81ebf8b76560a31433c2c493dc430c914af9",
      "parents": [
        "d2f31a5fd60d168b00fc4f7617b68a1287b21e90",
        "7b28afe01ab6ffb5f152f47831b44933facd2328"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jul 01 16:17:13 2011 +0200"
      },
      "message": "Merge branch \u0027for-linus\u0027 into for-3.1/core\n\nConflicts:\n\tblock/blk-throttle.c\n\tblock/cfq-iosched.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "726e99ab88db059fe1422e15376ae404f8c66eb4",
      "tree": "8d9373239aa568f28631e253d9fd07bc78b312c3",
      "parents": [
        "3181faa85bda3dc3f5e630a1846526c9caaa38e3"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Jun 27 09:03:48 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 27 09:36:06 2011 +0200"
      },
      "message": "cfq-iosched: make code consistent\n\nioc-\u003eioc_data is rcu protectd, so uses correct API to access it.\nThis doesn\u0027t change any behavior, but just make code consistent.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: stable@kernel.org # after ab4bd22d\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3181faa85bda3dc3f5e630a1846526c9caaa38e3",
      "tree": "1017c61ebf8a7711ac400e2a728e188ec5770001",
      "parents": [
        "258e43fdb00c73d424b114ae3850accd55b27cbb"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Jun 27 09:03:47 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 27 09:36:06 2011 +0200"
      },
      "message": "cfq-iosched: fix a rcu warning\n\nI got a rcu warnning at boot. the ioc-\u003eioc_data is rcu_deferenced, but\ndoesn\u0027t hold rcu_read_lock.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: stable@kernel.org # after ab4bd22d\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": "08e8138adebdd511e0955e8d6c051904bb4082af",
      "tree": "f73e9adc3e0164bf427f297312dff95c370db5ee",
      "parents": [
        "fdd514e16bb2531c0c61ae8a1f87740ce217f630"
      ],
      "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 10:42: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": "8aea45451b252e4be09ee9974c5658bb47c81625",
      "tree": "7b838405229f32fb7937fac49c95b2d1294fb59b",
      "parents": [
        "9b50902db5eb8a220160fb89e95aa11967998d12"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Mon Jun 06 05:07:54 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:57:25 2011 +0200"
      },
      "message": "CFQ: make two functions static\n\nCorrectly suggested by sparse.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9b50902db5eb8a220160fb89e95aa11967998d12",
      "tree": "ad025360c616398f2b0aea1f0789a2f8174496b1",
      "parents": [
        "796d5116c407690b14fd5bda136aa67a39e7061a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jun 05 06:01:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:57:21 2011 +0200"
      },
      "message": "cfq-iosched: fix locking around ioc-\u003eioc_data assignment\n\nSince we are modifying this RCU pointer, we need to hold\nthe lock protecting it around it.\n\nThis fixes a potential reuse and double free of a cfq\nio_context structure. The bug has been in CFQ for a long\ntime, it hit very few people but those it did hit seemed\nto see it a lot.\n\nTracked in RH bugzilla here:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d577968\n\nCredit goes to Paul Bolle for figuring out that the issue\nwas around the one-hit ioc-\u003eioc_data cache. Thanks to his\nhard work the issue is now fixed.\n\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ab4bd22d3cce6977dc039664cc2d052e3147d662",
      "tree": "70cd3b540a8efef5d737da68272f67d2265c356a",
      "parents": [
        "23c79d31a3dd2602ee1a5ff31303b2d7a2d3c159"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Jun 05 06:01:13 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jun 06 05:56:49 2011 +0200"
      },
      "message": "cfq-iosched: fix locking around ioc-\u003eioc_data assignment\n\nSince we are modifying this RCU pointer, we need to hold\nthe lock protecting it around it.\n\nThis fixes a potential reuse and double free of a cfq\nio_context structure. The bug has been in CFQ for a long\ntime, it hit very few people but those it did hit seemed\nto see it a lot.\n\nTracked in RH bugzilla here:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d577968\n\nCredit goes to Paul Bolle for figuring out that the issue\nwas around the one-hit ioc-\u003eioc_data cache. Thanks to his\nhard work the issue is now fixed.\n\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "796d5116c407690b14fd5bda136aa67a39e7061a",
      "tree": "bb0522aacb0a923e6636c82aff143df95ea1d730",
      "parents": [
        "1fa7b6a29c61358cc2ca6f64cef4aa0e1a7ca74c"
      ],
      "author": {
        "name": "Jeff Moyer",
        "email": "jmoyer@redhat.com",
        "time": "Thu Jun 02 21:19:05 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 02 21:19:05 2011 +0200"
      },
      "message": "iosched: prevent aliased requests from starving other I/O\n\nHi, Jens,\n\nIf you recall, I posted an RFC patch for this back in July of last year:\nhttp://lkml.org/lkml/2010/7/13/279\n\nThe basic problem is that a process can issue a never-ending stream of\nasync direct I/Os to the same sector on a device, thus starving out\nother I/O in the system (due to the way the alias handling works in both\ncfq and deadline).  The solution I proposed back then was to start\ndispatching from the fifo after a certain number of aliases had been\ndispatched.  Vivek asked why we had to treat aliases differently at all,\nand I never had a good answer.  So, I put together a simple patch which\nallows aliases to be added to the rb tree (it adds them to the right,\nthough that doesn\u0027t matter as the order isn\u0027t guaranteed anyway).  I\nthink this is the preferred solution, as it doesn\u0027t break up time slices\nin CFQ or batches in deadline.  I\u0027ve tested it, and it does solve the\nstarvation issue.  Let me know what you think.\n\nCheers,\nJeff\n\nSigned-off-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "28304f485c3627cc5e1665b92e26eb7fcfe98088",
      "tree": "c885abcc932d5ae28fdeb49027ea5eafaaafd376",
      "parents": [
        "4c49ff3fe128ca68dabd07537415c419ad7f82f9"
      ],
      "author": {
        "name": "Paul Bolle",
        "email": "pebolle@tiscali.nl",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jun 02 13:05:02 2011 +0200"
      },
      "message": "cfq-iosched: Remove bogus check in queue_fail path\n\nqueue_fail can only be reached if cic is NULL, so its check for cic must\nbe bogus.\n\nSigned-off-by: Paul Bolle \u003cpebolle@tiscali.nl\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4495a7d41dbda03841c2a1c2a5ce7135a45131ba",
      "tree": "9c5044963151f3c058d9e20ef88c4a856497fe27",
      "parents": [
        "ea9d6553b3b3044e7374774cc33bb1b2eee19dd3"
      ],
      "author": {
        "name": "Kyungmin Park",
        "email": "kyungmin.park@samsung.com",
        "time": "Tue May 31 10:04:09 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 31 19:49:44 2011 +0200"
      },
      "message": "CFQ: Fix typo and remove unnecessary semicolon\n\nFix comment typo and remove unnecessary semicolon at macro\n\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1547010e6e15a3f44f49381246421a1e19de526e",
      "tree": "560796824e489a5d5c0b6de7a143d9a48a558d83",
      "parents": [
        "20359f27e8ff115f7cddf3da5b3a6cdcca2e650d"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "message": "cfq-iosched: free cic_index if cfqd allocation fails\n\nWhen struct cfq_data allocation fails, cic_index need to be freed.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "20359f27e8ff115f7cddf3da5b3a6cdcca2e650d",
      "tree": "b87c86545f68c5c660f3aeaf4cf3e366fa7db668",
      "parents": [
        "229836bd63c5413a4f8eed93d610b432be141e9b"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:22 2011 +0200"
      },
      "message": "cfq-iosched: remove unused \u0027group_changed\u0027 in cfq_service_tree_add()\n\nThe \u0027group_changed\u0027 variable is initialized to 0 and never changed, so\nchecking the variable is meaningless.\n\nIt is a leftover from 0bbfeb832042 (\"cfq-iosched: Always provide group\niosolation.\"). Let\u0027s get rid of it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "229836bd63c5413a4f8eed93d610b432be141e9b",
      "tree": "a55fa492dbcde4c8f179d58d07165bdff872c34e",
      "parents": [
        "b9f8ce059940064a732da49b5d6e618381dad956"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "message": "cfq-iosched: reduce bit operations in cfq_choose_req()\n\nReduce the number of bit operations in cfq_choose_req() on average\n(and worst) cases.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b9f8ce059940064a732da49b5d6e618381dad956",
      "tree": "850281e8dd7bf5813d2960c2d42177803072bc02",
      "parents": [
        "4cbadbd16e2fb727f6926597e0a580829e6222f1"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue May 24 10:23:21 2011 +0200"
      },
      "message": "cfq-iosched: algebraic simplification in cfq_prio_to_maxrq()\n\nSimplify the calculation in cfq_prio_to_maxrq(), plus replace CFQ_PRIO_LISTS to\nIOPRIO_BE_NR since they are the same and IOPRIO_BE_NR looks more reasonable in\nthis context IMHO.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2abae55f5a41d29f21b5b259c33d218c950d5c90",
      "tree": "69169fa89fb25fcf7521999d7fca91664262bfc7",
      "parents": [
        "345227d705f2318e9bc088e79fe71a38bb5fe82b"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon May 23 10:02:19 2011 +0200"
      },
      "message": "cfq-iosched: Fix a memory leak of per cpu stats for root group\n\nWe allocated per cpu stats struct for root group but did not free it.\nFix it.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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": "f469a7b4d5b1d1d053200a9015fd25d59c057f49",
      "tree": "2c68c0689e40955b186e350b15d44d0b260f4655",
      "parents": [
        "56edf7d75db5b14d628b46623c414ffbeed68d7f"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:23 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "blk-cgroup: Allow sleeping while dynamically allocating a group\n\nCurrently, all the cfq_group or throtl_group allocations happen while\nwe are holding -\u003equeue_lock and sleeping is not allowed.\n\nSoon, we will move to per cpu stats and also need to allocate the\nper group stats. As one can not call alloc_percpu() from atomic\ncontext as it can sleep, we need to drop -\u003equeue_lock, allocate the\ngroup, retake the lock and continue processing.\n\nIn throttling code, I check the queue DEAD flag again to make sure\nthat driver did not call blk_cleanup_queue() in the mean time.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "56edf7d75db5b14d628b46623c414ffbeed68d7f",
      "tree": "7d7ff46f03676154d0edf3da85c8e738d506ad92",
      "parents": [
        "3e59cf9d66a87763fef6c232a4a8dc664461ca50"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:22 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "cfq-iosched: Fix a possible race with cfq cgroup removal code\n\nblkg-\u003ekey \u003d cfqd is an rcu protected pointer and hence we used to do\ncall_rcu(cfqd-\u003ercu_head) to free up cfqd after one rcu grace period.\n\nThe problem here is that even though cfqd is around, there are no\ngurantees that associated request queue (td-\u003equeue) or q-\u003equeue_lock\nis still around. A driver might have called blk_cleanup_queue() and\nrelease the lock.\n\nIt might happen that after freeing up the lock we call\nblkg-\u003ekey-\u003equeue-\u003equeue_ock and crash. This is possible in following\npath.\n\nblkiocg_destroy()\n blkio_unlink_group_fn()\n  cfq_unlink_blkio_group()\n\nHence, wait for an rcu peirod if there are groups which have not\nbeen unlinked from blkcg-\u003eblkg_list. That way, if there are any groups\nwhich are taking cfq_unlink_blkio_group() path, can safely take queue\nlock.\n\nThis is how we have taken care of race in throttling logic also.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3e59cf9d66a87763fef6c232a4a8dc664461ca50",
      "tree": "2a7a0618092f29ac72b3723e0e3e64a7e4227716",
      "parents": [
        "a23e68695593d00b35a6cddf8e9c9ec03505ecb9"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu May 19 15:38:21 2011 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 20:34:52 2011 +0200"
      },
      "message": "cfq-iosched: Get rid of redundant function parameter \"create\"\n\nNobody seems to be using cfq_find_alloc_cfqg() function parameter \"create\".\nGet rid of that.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "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": "5f45c69589b7d2953584e6cd0b31e35dbe960ad0",
      "tree": "7f920cebcbbe6a1435975e355cee15289ddbc428",
      "parents": [
        "bd900d4580107c899d43b262fbbd995f11097a43"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 09:10:35 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Apr 19 09:10:35 2011 +0200"
      },
      "message": "cfq-iosched: read_lock() does not always imply rcu_read_lock()\n\nFor some configurations of CONFIG_PREEMPT that is not true. So\nget rid of __call_for_each_cic() and always uses the explicitly\nrcu_read_lock() protected call_for_each_cic() instead.\n\nThis fixes a potential bug related to IO scheduler removal or\nonline switching.\n\nThanks to Paul McKenney for clarifying this.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    }
  ],
  "next": "24ecfbe27f65563909b14492afda2f1c21f7c044"
}
