)]}'
{
  "log": [
    {
      "commit": "ee89f81252179dcbf6cd65bd48299f5e52292d88",
      "tree": "805846cd12821f84cfe619d44c9e3e36e0b0f9e6",
      "parents": [
        "21f3b24da9328415792efc780f50b9f434c12465",
        "de33127d8d3f1d570aad8c2223cd81b206636bc1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 28 12:52:24 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 28 12:52:24 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9/core\u0027 of git://git.kernel.dk/linux-block\n\nPull block IO core bits from Jens Axboe:\n \"Below are the core block IO bits for 3.9.  It was delayed a few days\n  since my workstation kept crashing every 2-8h after pulling it into\n  current -git, but turns out it is a bug in the new pstate code (divide\n  by zero, will report separately).  In any case, it contains:\n\n   - The big cfq/blkcg update from Tejun and and Vivek.\n\n   - Additional block and writeback tracepoints from Tejun.\n\n   - Improvement of the should sort (based on queues) logic in the plug\n     flushing.\n\n   - _io() variants of the wait_for_completion() interface, using\n     io_schedule() instead of schedule() to contribute to io wait\n     properly.\n\n   - Various little fixes.\n\n  You\u0027ll get two trivial merge conflicts, which should be easy enough to\n  fix up\"\n\nFix up the trivial conflicts due to hlist traversal cleanups (commit\nb67bfe0d42ca: \"hlist: drop the node parameter from iterators\").\n\n* \u0027for-3.9/core\u0027 of git://git.kernel.dk/linux-block: (39 commits)\n  block: remove redundant check to bd_openers()\n  block: use i_size_write() in bd_set_size()\n  cfq: fix lock imbalance with failed allocations\n  drivers/block/swim3.c: fix null pointer dereference\n  block: don\u0027t select PERCPU_RWSEM\n  block: account iowait time when waiting for completion of IO request\n  sched: add wait_for_completion_io[_timeout]\n  writeback: add more tracepoints\n  block: add block_{touch|dirty}_buffer tracepoint\n  buffer: make touch_buffer() an exported function\n  block: add @req to bio_{front|back}_merge tracepoints\n  block: add missing block_bio_complete() tracepoint\n  block: Remove should_sort judgement when flush blk_plug\n  block,elevator: use new hashtable implementation\n  cfq-iosched: add hierarchical cfq_group statistics\n  cfq-iosched: collect stats from dead cfqgs\n  cfq-iosched: separate out cfqg_stats_reset() from cfq_pd_reset_stats()\n  blkcg: make blkcg_print_blkgs() grab q locks instead of blkcg lock\n  block: RCU free request_queue\n  blkcg: implement blkg_[rw]stat_recursive_sum() and blkg_[rw]stat_merge()\n  ...\n"
    },
    {
      "commit": "b67bfe0d42cac56c512dd5da4b1b347a23f4b70a",
      "tree": "3d465aea12b97683f26ffa38eba8744469de9997",
      "parents": [
        "1e142b29e210b5dfb2deeb6ce2210b60af16d2a6"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "sasha.levin@oracle.com",
        "time": "Wed Feb 27 17:06:00 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:24 2013 -0800"
      },
      "message": "hlist: drop the node parameter from iterators\n\nI\u0027m not sure why, but the hlist for each entry iterators were conceived\n\n        list_for_each_entry(pos, head, member)\n\nThe hlist ones were greedy and wanted an extra parameter:\n\n        hlist_for_each_entry(tpos, pos, head, member)\n\nWhy did they need an extra pos parameter? I\u0027m not quite sure. Not only\nthey don\u0027t really need it, it also prevents the iterator from looking\nexactly like the list iterator, which is unfortunate.\n\nBesides the semantic patch, there was some manual work required:\n\n - Fix up the actual hlist iterators in linux/list.h\n - Fix up the declaration of other iterators based on the hlist ones.\n - A very small amount of places were using the \u0027node\u0027 parameter, this\n was modified to use \u0027obj-\u003emember\u0027 instead.\n - Coccinelle didn\u0027t handle the hlist_for_each_entry_safe iterator\n properly, so those had to be fixed up manually.\n\nThe semantic patch which is mostly the work of Peter Senna Tschudin is here:\n\n@@\niterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;\n\ntype T;\nexpression a,c,d,e;\nidentifier b;\nstatement S;\n@@\n\n-T b;\n    \u003c+... when !\u003d b\n(\nhlist_for_each_entry(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue(a,\n- b,\nc) S\n|\nhlist_for_each_entry_from(a,\n- b,\nc) S\n|\nhlist_for_each_entry_rcu(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_rcu_bh(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue_rcu_bh(a,\n- b,\nc) S\n|\nfor_each_busy_worker(a, c,\n- b,\nd) S\n|\nax25_uid_for_each(a,\n- b,\nc) S\n|\nax25_for_each(a,\n- b,\nc) S\n|\ninet_bind_bucket_for_each(a,\n- b,\nc) S\n|\nsctp_for_each_hentry(a,\n- b,\nc) S\n|\nsk_for_each(a,\n- b,\nc) S\n|\nsk_for_each_rcu(a,\n- b,\nc) S\n|\nsk_for_each_from\n-(a, b)\n+(a)\nS\n+ sk_for_each_from(a) S\n|\nsk_for_each_safe(a,\n- b,\nc, d) S\n|\nsk_for_each_bound(a,\n- b,\nc) S\n|\nhlist_for_each_entry_safe(a,\n- b,\nc, d, e) S\n|\nhlist_for_each_entry_continue_rcu(a,\n- b,\nc) S\n|\nnr_neigh_for_each(a,\n- b,\nc) S\n|\nnr_neigh_for_each_safe(a,\n- b,\nc, d) S\n|\nnr_node_for_each(a,\n- b,\nc) S\n|\nnr_node_for_each_safe(a,\n- b,\nc, d) S\n|\n- for_each_gfn_sp(a, c, d, b) S\n+ for_each_gfn_sp(a, c, d) S\n|\n- for_each_gfn_indirect_valid_sp(a, c, d, b) S\n+ for_each_gfn_indirect_valid_sp(a, c, d) S\n|\nfor_each_host(a,\n- b,\nc) S\n|\nfor_each_host_safe(a,\n- b,\nc, d) S\n|\nfor_each_mesh_entry(a,\n- b,\nc, d) S\n)\n    ...+\u003e\n\n[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]\n[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: fix warnings]\n[akpm@linux-foudnation.org: redo intrusive kvm changes]\nTested-by: Peter Senna Tschudin \u003cpeter.senna@gmail.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Gleb Natapov \u003cgleb@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "810ecfa765f8be20c8d9c468885b3403a2232d2f",
      "tree": "0c9173defed8de28cf43d972b8e36b48fbcc6f24",
      "parents": [
        "548bc8e1b38e48653a90f48f636f8d253504f8a2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:13 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:13 2013 -0800"
      },
      "message": "blkcg: make blkcg_print_blkgs() grab q locks instead of blkcg lock\n\nInstead of holding blkcg-\u003elock while walking -\u003eblkg_list and executing\nprfill(), RCU walk -\u003eblkg_list and hold the blkg\u0027s queue lock while\nexecuting prfill().  This makes prfill() implementations easier as\nstats are mostly protected by queue lock.\n\nThis will be used to implement hierarchical stats.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "16b3de6652c7aef151f38726faf90f0dbc9e9c71",
      "tree": "1b8e615c5261b677ff6a6a3b25fad46b34d1b64b",
      "parents": [
        "b50da39f51139f81b3115d0f9d8632507f802755"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "message": "blkcg: implement blkg_[rw]stat_recursive_sum() and blkg_[rw]stat_merge()\n\nImplement blkg_[rw]stat_recursive_sum() and blkg_[rw]stat_merge().\nThe former two collect the [rw]stats designated by the target policy\ndata and offset from the pd\u0027s subtree.  The latter two add one\n[rw]stat to another.\n\nNote that the recursive sum functions require the queue lock to be\nheld on entry to make blkg online test reliable.  This is necessary to\nproperly handle stats of a dying blkg.\n\nThese will be used to implement hierarchical stats.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "b50da39f51139f81b3115d0f9d8632507f802755",
      "tree": "98d8fc862dfa6ad7ed7c9366035eea36a6489d5c",
      "parents": [
        "4d5e80a76074786a49879ff482a83e72ad634606"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "message": "blkcg: export __blkg_prfill_rwstat()\n\nHierarchical stats for cfq-iosched will need __blkg_prfill_rwstat().\nExport it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "f427d909648aa592c9588d0f66b5b457752a0cd1",
      "tree": "d6f91a6d46a1302f0cca6137851f0806364b7965",
      "parents": [
        "b276a876a014c5fa58a16f247c0933f6c42112e3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "message": "blkcg: implement blkcg_policy-\u003eon/offline_pd_fn() and blkcg_gq-\u003eonline\n\nAdd two blkcg_policy methods, -\u003eonline_pd_fn() and -\u003eoffline_pd_fn(),\nwhich are invoked as the policy_data gets activated and deactivated\nwhile holding both blkcg and q locks.\n\nAlso, add blkcg_gq-\u003eonline bool, which is set and cleared as the\nblkcg_gq gets activated and deactivated.  This flag also is toggled\nwhile holding both blkcg and q locks.\n\nThese will be used to implement hierarchical stats.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "b276a876a014c5fa58a16f247c0933f6c42112e3",
      "tree": "c49f85e03d11296683ed938864bd823cdeaa614f",
      "parents": [
        "d02f7aa8dce8166dbbc515ce393912aa45e6b8a6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:12 2013 -0800"
      },
      "message": "blkcg: add blkg_policy_data-\u003eplid\n\nAdd pd-\u003eplid so that the policy a pd belongs to can be identified\neasily.  This will be used to implement hierarchical blkg_[rw]stats.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "e71357e118bdd4057e3bc020b9d80fecdd08f588",
      "tree": "a26644afeb5efb7dcd5f2e8a59c32c1d509f8574",
      "parents": [
        "3c547865902e9fc30dc15941f326fd8039c6628d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "message": "cfq-iosched: add leaf_weight\n\ncfq blkcg is about to grow proper hierarchy handling, where a child\nblkg\u0027s weight would nest inside the parent\u0027s.  This makes tasks in a\nblkg to compete against both tasks in the sibling blkgs and the tasks\nof child blkgs.\n\nWe\u0027re gonna use the existing weight as the group weight which decides\nthe blkg\u0027s weight against its siblings.  This patch introduces a new\nweight - leaf_weight - which decides the weight of a blkg against the\nchild blkgs.\n\nIt\u0027s named leaf_weight because another way to look at it is that each\ninternal blkg nodes have a hidden child leaf node which contains all\nits tasks and leaf_weight is the weight of the leaf node and handled\nthe same as the weight of the child blkgs.\n\nThis patch only adds leaf_weight fields and exposes it to userland.\nThe new weight isn\u0027t actually used anywhere yet.  Note that\ncfq-iosched currently offcially supports only single level hierarchy\nand root blkgs compete with the first level blkgs - ie. root weight is\nbasically being used as leaf_weight.  For root blkgs, the two weights\nare kept in sync for backward compatibility.\n\nv2: cfqd-\u003eroot_group-\u003eleaf_weight initialization was missing from\n    cfq_init_queue() causing divide by zero when\n    !CONFIG_CFQ_GROUP_SCHED.  Fix it.  Reported by Fengguang.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "3c547865902e9fc30dc15941f326fd8039c6628d",
      "tree": "e86d926e86258cfc69d6665e28551fa14267634e",
      "parents": [
        "93e6d5d8f5c909479623c6ab4427f038c6c3f63f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "message": "blkcg: make blkcg_gq\u0027s hierarchical\n\nCurrently a child blkg (blkcg_gq) can be created even if its parent\ndoesn\u0027t exist.  ie. Given a blkg, it\u0027s not guaranteed that its\nancestors will exist.  This makes it difficult to implement proper\nhierarchy support for blkcg policies.\n\nAlways create blkgs recursively and make a child blkg hold a reference\nto its parent.  blkg-\u003eparent is added so that finding the parent is\neasy.  blkcg_parent() is also added in the process.\n\nThis change can be visible to userland.  e.g. while issuing IO in a\nnested cgroup didn\u0027t affect the ancestors at all, now it will\ninitialize all ancestor blkgs and zero stats for the request_queue\nwill always appear on them.  While this is userland visible, this\nshouldn\u0027t cause any functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "93e6d5d8f5c909479623c6ab4427f038c6c3f63f",
      "tree": "a67f60f0b7582f0e85437455c40e071fb27607dd",
      "parents": [
        "86cde6b62313dd221c2e5935db02de7234cb4164"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "message": "blkcg: cosmetic updates to blkg_create()\n\n* Rename out_* labels to err_*.\n\n* Do ERR_PTR() conversion once in the error return path.\n\nThis patch is cosmetic and to prepare for the hierarchy support.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "86cde6b62313dd221c2e5935db02de7234cb4164",
      "tree": "879485988325bb8d97882cac82056bff434b000e",
      "parents": [
        "356d2e581032b686da0854c7f17de2027c872762"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "message": "blkcg: reorganize blkg_lookup_create() and friends\n\nReorganize such that\n\n* __blkg_lookup() takes bool param @update_hint to determine whether\n  to update hint.\n\n* __blkg_lookup_create() no longer performs lookup before trying to\n  create.  Renamed to blkg_create().\n\n* blkg_lookup_create() now performs lookup and then invokes\n  blkg_create() if lookup fails.\n\n* root_blkg creation in blkcg_activate_policy() updated accordingly.\n  Note that blkcg_activate_policy() no longer updates lookup hint if\n  root_blkg already exists.\n\nExcept for the last lookup hint bit which is immaterial, this is pure\nreorganization and doesn\u0027t introduce any visible behavior change.\nThis is to prepare for proper hierarchy support.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "356d2e581032b686da0854c7f17de2027c872762",
      "tree": "c3c10018d5856523ba6a8a3816b433a1b5214412",
      "parents": [
        "b226e5c411759eec29308f0ea38e918aa695dc7f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Jan 09 08:05:10 2013 -0800"
      },
      "message": "blkcg: fix minor bug in blkg_alloc()\n\nblkg_alloc() was mistakenly checking blkcg_policy_enabled() twice.\nThe latter test should have been on whether pol-\u003epd_init_fn() exists.\nThis doesn\u0027t cause actual problems because both blkcg policies\nimplement pol-\u003epd_init_fn().  Fix it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "60da5bf47dd3d301a1d3bd4f0a4b9e29a184515c",
      "tree": "30de83370440aae5350d9ab3fbe6583abd439ee8",
      "parents": [
        "3c2e81ef344a90bb0a39d84af6878b4aeff568a2",
        "cbae8d45d61f3a8c155caf267d01e5e0f0b2f4b7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 08:27:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 08:27:23 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.8/core\u0027 of git://git.kernel.dk/linux-block\n\nPull block layer core updates from Jens Axboe:\n \"Here are the core block IO bits for 3.8.  The branch contains:\n\n   - The final version of the surprise device removal fixups from Bart.\n\n   - Don\u0027t hide EFI partitions under advanced partition types.  It\u0027s\n     fairly wide spread these days.  This is especially dangerous for\n     systems that have both msdos and efi partition tables, where you\n     want to keep them in sync.\n\n   - Cleanup of using -1 instead of the proper NUMA_NO_NODE\n\n   - Export control of bdi flusher thread CPU mask and default to using\n     the home node (if known) from Jeff.\n\n   - Export unplug tracepoint for MD.\n\n   - Core improvements from Shaohua.  Reinstate the recursive merge, as\n     the original bug has been fixed.  Add plugging for discard and also\n     fix a problem handling non pow-of-2 discard limits.\n\n  There\u0027s a trivial merge in block/blk-exec.c due to a fix that went\n  into 3.7-rc at a later point than -rc4 where this is based.\"\n\n* \u0027for-3.8/core\u0027 of git://git.kernel.dk/linux-block:\n  block: export block_unplug tracepoint\n  block: add plug for blkdev_issue_discard\n  block: discard granularity might not be power of 2\n  deadline: Allow 0ms deadline latency, increase the read speed\n  partitions: enable EFI/GPT support by default\n  bsg: Remove unused function bsg_goose_queue()\n  block: Make blk_cleanup_queue() wait until request_fn finished\n  block: Avoid scheduling delayed work on a dead queue\n  block: Avoid that request_fn is invoked on a dead queue\n  block: Let blk_drain_queue() caller obtain the queue lock\n  block: Rename queue dead flag\n  bdi: add a user-tunable cpu_list for the bdi flusher threads\n  block: use NUMA_NO_NODE instead of -1\n  block: recursive merge requests\n  block CFQ: avoid moving request to different queue\n"
    },
    {
      "commit": "3f3299d5c0268d6cc3f47b446e8aca436e4a5651",
      "tree": "5c962e7f6c6f1e8f17b612bb4c144ec610abfd8e",
      "parents": [
        "8fa72d234da9b6b473bbb1f74d533663e4996e6b"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Wed Nov 28 13:42:38 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Dec 06 14:30:58 2012 +0100"
      },
      "message": "block: Rename queue dead flag\n\nQUEUE_FLAG_DEAD is used to indicate that queuing new requests must\nstop. After this flag has been set queue draining starts. However,\nduring the queue draining phase it is still safe to invoke the\nqueue\u0027s request_fn, so QUEUE_FLAG_DYING is a better name for this\nflag.\n\nThis patch has been generated by running the following command\nover the kernel source tree:\n\ngit grep -lEw \u0027blk_queue_dead|QUEUE_FLAG_DEAD\u0027 |\n    xargs sed -i.tmp -e \u0027s/blk_queue_dead/blk_queue_dying/g\u0027      \\\n        -e \u0027s/QUEUE_FLAG_DEAD/QUEUE_FLAG_DYING/g\u0027;                \\\nsed -i.tmp -e \"s/QUEUE_FLAG_DYING$(printf \\\\t)*5/QUEUE_FLAG_DYING$(printf \\\\t)5/g\" \\\n    include/linux/blkdev.h;                                       \\\nsed -i.tmp -e \u0027s/ DEAD/ DYING/g\u0027 -e \u0027s/dead queue/a dying queue/\u0027 \\\n    -e \u0027s/Dead queue/A dying queue/\u0027 block/blk-core.c\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: James Bottomley \u003cJBottomley@Parallels.com\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Chanho Min \u003cchanho.min@lge.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "92fb97487a7e41b222c1417cabd1d1ab7cc3a48c",
      "tree": "c220c622b9ac9b16535535d448e9cd29be72c77e",
      "parents": [
        "b1929db42f8a649d9a9e397119f628c27fd4021f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 19 08:13:38 2012 -0800"
      },
      "message": "cgroup: rename -\u003ecreate/post_create/pre_destroy/destroy() to -\u003ecss_alloc/online/offline/free()\n\nRename cgroup_subsys css lifetime related callbacks to better describe\nwhat their roles are.  Also, update documentation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\n"
    },
    {
      "commit": "5b805f2a7675634fbdf9ac1c9b2256905ab2ea68",
      "tree": "ee00d1e3d757458d66209b926d274491c6c3f61c",
      "parents": [
        "1db1e31b1ee3ae126ef98f39083b5f213c7b41bf",
        "201e72acb2d3821e2de9ce6091e98859c316b29a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 06 12:26:23 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Nov 06 12:26:23 2012 -0800"
      },
      "message": "Merge branch \u0027cgroup/for-3.7-fixes\u0027 into cgroup/for-3.8\n\nThis is to receive device_cgroup fixes so that further device_cgroup\nchanges can be made in cgroup/for-3.8.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1db1e31b1ee3ae126ef98f39083b5f213c7b41bf",
      "tree": "98328124d3b8b08b6db894c79d0e79b3a42417bf",
      "parents": [
        "5d8f72b55c275677865de670fa147ed318191d81",
        "bcf6de1b9129531215d26dd9af8331e84973bc52"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:21:51 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:21:51 2012 -0800"
      },
      "message": "Merge branch \u0027cgroup-rmdir-updates\u0027 into cgroup/for-3.8\n\nPull rmdir updates into for-3.8 so that further callback updates can\nbe put on top.  This pull created a trivial conflict between the\nfollowing two commits.\n\n  8c7f6edbda (\"cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\")\n  ed95779340 (\"cgroup: kill cgroup_subsys-\u003e__DEPRECATED_clear_css_refs\")\n\nThe former added a field to cgroup_subsys and the latter removed one\nfrom it.  They happen to be colocated causing the conflict.  Keeping\nwhat\u0027s added and removing what\u0027s removed resolves the conflict.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "bcf6de1b9129531215d26dd9af8331e84973bc52",
      "tree": "0666760423e4579a50a7752568036a13e0cfa9d5",
      "parents": [
        "9d093cb10eb482adfba6ddc71a0969b78823ee8b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 05 09:16:59 2012 -0800"
      },
      "message": "cgroup: make -\u003epre_destroy() return void\n\nAll -\u003epre_destory() implementations return 0 now, which is the only\nallowed return value.  Make it return void.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "65c77fd9e8a1c8c3da0bbbea6b7efa3d6ef265f8",
      "tree": "305b08304869b3f8d57a191b4b23968e53b53247",
      "parents": [
        "65635cbc37e011e71b208257a25e7c1078cd039b"
      ],
      "author": {
        "name": "Jun\u0027ichi Nomura",
        "email": "j-nomura@ce.jp.nec.com",
        "time": "Mon Oct 22 10:15:37 2012 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 22 22:00:26 2012 +0200"
      },
      "message": "blkcg: stop iteration early if root_rl is the only request list\n\n__blk_queue_next_rl() finds next request list based on blkg_list\nwhile skipping root_blkg in the list.\nOTOH, root_rl is special as it may exist even without root_blkg.\n\nThough the later part of the function handles such a case correctly,\nexiting early is good for readability of the code.\n\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: 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": "65635cbc37e011e71b208257a25e7c1078cd039b",
      "tree": "47e17aaa3008518373d67feed3673942d5decfe5",
      "parents": [
        "0390c8835690506802fd5d54ea5444f0b9b1708b"
      ],
      "author": {
        "name": "Jun\u0027ichi Nomura",
        "email": "j-nomura@ce.jp.nec.com",
        "time": "Wed Oct 17 17:45:36 2012 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 22 22:00:26 2012 +0200"
      },
      "message": "blkcg: Fix use-after-free of q-\u003eroot_blkg and q-\u003eroot_rl.blkg\n\nblk_put_rl() does not call blkg_put() for q-\u003eroot_rl because we\ndon\u0027t take request list reference on q-\u003eroot_blkg.\nHowever, if root_blkg is once attached then detached (freed),\nblk_put_rl() is confused by the bogus pointer in q-\u003eroot_blkg.\n\nFor example, with !CONFIG_BLK_DEV_THROTTLING \u0026\u0026\nCONFIG_CFQ_GROUP_IOSCHED,\nswitching IO scheduler from cfq to deadline will cause system stall\nafter the following warning with 3.6:\n\n\u003e WARNING: at /work/build/linux/block/blk-cgroup.h:250\n\u003e blk_put_rl+0x4d/0x95()\n\u003e Modules linked in: bridge stp llc sunrpc acpi_cpufreq freq_table mperf\n\u003e ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4\n\u003e Pid: 0, comm: swapper/0 Not tainted 3.6.0 #1\n\u003e Call Trace:\n\u003e  \u003cIRQ\u003e  [\u003cffffffff810453bd\u003e] warn_slowpath_common+0x85/0x9d\n\u003e  [\u003cffffffff810453ef\u003e] warn_slowpath_null+0x1a/0x1c\n\u003e  [\u003cffffffff811d5f8d\u003e] blk_put_rl+0x4d/0x95\n\u003e  [\u003cffffffff811d614a\u003e] __blk_put_request+0xc3/0xcb\n\u003e  [\u003cffffffff811d71a3\u003e] blk_finish_request+0x232/0x23f\n\u003e  [\u003cffffffff811d76c3\u003e] ? blk_end_bidi_request+0x34/0x5d\n\u003e  [\u003cffffffff811d76d1\u003e] blk_end_bidi_request+0x42/0x5d\n\u003e  [\u003cffffffff811d7728\u003e] blk_end_request+0x10/0x12\n\u003e  [\u003cffffffff812cdf16\u003e] scsi_io_completion+0x207/0x4d5\n\u003e  [\u003cffffffff812c6fcf\u003e] scsi_finish_command+0xfa/0x103\n\u003e  [\u003cffffffff812ce2f8\u003e] scsi_softirq_done+0xff/0x108\n\u003e  [\u003cffffffff811dcea5\u003e] blk_done_softirq+0x8d/0xa1\n\u003e  [\u003cffffffff810915d5\u003e] ?\n\u003e  generic_smp_call_function_single_interrupt+0x9f/0xd7\n\u003e  [\u003cffffffff8104cf5b\u003e] __do_softirq+0x102/0x213\n\u003e  [\u003cffffffff8108a5ec\u003e] ? lock_release_holdtime+0xb6/0xbb\n\u003e  [\u003cffffffff8104d2b4\u003e] ? raise_softirq_irqoff+0x9/0x3d\n\u003e  [\u003cffffffff81424dfc\u003e] call_softirq+0x1c/0x30\n\u003e  [\u003cffffffff81011beb\u003e] do_softirq+0x4b/0xa3\n\u003e  [\u003cffffffff8104cdb0\u003e] irq_exit+0x53/0xd5\n\u003e  [\u003cffffffff8102d865\u003e] smp_call_function_single_interrupt+0x34/0x36\n\u003e  [\u003cffffffff8142486f\u003e] call_function_single_interrupt+0x6f/0x80\n\u003e  \u003cEOI\u003e  [\u003cffffffff8101800b\u003e] ? mwait_idle+0x94/0xcd\n\u003e  [\u003cffffffff81018002\u003e] ? mwait_idle+0x8b/0xcd\n\u003e  [\u003cffffffff81017811\u003e] cpu_idle+0xbb/0x114\n\u003e  [\u003cffffffff81401fbd\u003e] rest_init+0xc1/0xc8\n\u003e  [\u003cffffffff81401efc\u003e] ? csum_partial_copy_generic+0x16c/0x16c\n\u003e  [\u003cffffffff81cdbd3d\u003e] start_kernel+0x3d4/0x3e1\n\u003e  [\u003cffffffff81cdb79e\u003e] ? kernel_init+0x1f7/0x1f7\n\u003e  [\u003cffffffff81cdb2dd\u003e] x86_64_start_reservations+0xb8/0xbd\n\u003e  [\u003cffffffff81cdb3e3\u003e] x86_64_start_kernel+0x101/0x110\n\nThis patch clears q-\u003eroot_blkg and q-\u003eroot_rl.blkg when root blkg\nis destroyed.\n\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "8c7f6edbda01f1b1a2e60ad61f14fe38023e433b",
      "tree": "f1db9712b109575cba86e37140e1e4f8a56ca780",
      "parents": [
        "fbcbe2b3c92ee1c930dcfcf8bb764074c100fd63"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Sep 13 12:20:58 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 14 12:01:16 2012 -0700"
      },
      "message": "cgroup: mark subsystems with broken hierarchy support and whine if cgroups are nested for them\n\nCurrently, cgroup hierarchy support is a mess.  cpu related subsystems\nbehave correctly - configuration, accounting and control on a parent\nproperly cover its children.  blkio and freezer completely ignore\nhierarchy and treat all cgroups as if they\u0027re directly under the root\ncgroup.  Others show yet different behaviors.\n\nThese differing interpretations of cgroup hierarchy make using cgroup\nconfusing and it impossible to co-mount controllers into the same\nhierarchy and obtain sane behavior.\n\nEventually, we want full hierarchy support from all subsystems and\nprobably a unified hierarchy.  Users using separate hierarchies\nexpecting completely different behaviors depending on the mounted\nsubsystem is deterimental to making any progress on this front.\n\nThis patch adds cgroup_subsys.broken_hierarchy and sets it to %true\nfor controllers which are lacking in hierarchy support.  The goal of\nthis patch is two-fold.\n\n* Move users away from using hierarchy on currently non-hierarchical\n  subsystems, so that implementing proper hierarchy support on those\n  doesn\u0027t surprise them.\n\n* Keep track of which controllers are broken how and nudge the\n  subsystems to implement proper hierarchy support.\n\nFor now, start with a single warning message.  We can whine louder\nlater on.\n\nv2: Fixed a typo spotted by Michal. Warning message updated.\n\nv3: Updated memcg part so that it doesn\u0027t generate warning in the\n    cases where .use_hierarchy\u003dfalse doesn\u0027t make the behavior\n    different from root.use_hierarchy\u003dtrue.  Fixed a typo spotted by\n    Glauber.\n\nv4: Check -\u003ebroken_hierarchy after cgroup creation is complete so that\n    -\u003ecreate() can affect the result per Michal.  Dropped unnecessary\n    memcg root handling per Michal.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Serge E. Hallyn \u003cserue@us.ibm.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Thomas Graf \u003ctgraf@suug.ch\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@ghostprotocols.net\u003e\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "a051661ca6d134c18599498b185b667859d4339b",
      "tree": "9d840030874aed9b97a58051bf9568455126e8e8",
      "parents": [
        "5b788ce3e2acac9bf109743b1281d77347cf2101"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 26 15:05:44 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jun 26 18:42:49 2012 -0400"
      },
      "message": "blkcg: implement per-blkg request allocation\n\nCurrently, request_queue has one request_list to allocate requests\nfrom regardless of blkcg of the IO being issued.  When the unified\nrequest pool is used up, cfq proportional IO limits become meaningless\n- whoever grabs the next request being freed wins the race regardless\nof the configured weights.\n\nThis can be easily demonstrated by creating a blkio cgroup w/ very low\nweight, put a program which can issue a lot of random direct IOs there\nand running a sequential IO from a different cgroup.  As soon as the\nrequest pool is used up, the sequential IO bandwidth crashes.\n\nThis patch implements per-blkg request_list.  Each blkg has its own\nrequest_list and any IO allocates its request from the matching blkg\nmaking blkcgs completely isolated in terms of request allocation.\n\n* Root blkcg uses the request_list embedded in each request_queue,\n  which was renamed to @q-\u003eroot_rl from @q-\u003erq.  While making blkcg rl\n  handling a bit harier, this enables avoiding most overhead for root\n  blkcg.\n\n* Queue fullness is properly per request_list but bdi isn\u0027t blkcg\n  aware yet, so congestion state currently just follows the root\n  blkcg.  As writeback isn\u0027t aware of blkcg yet, this works okay for\n  async congestion but readahead may get the wrong signals.  It\u0027s\n  better than blkcg completely collapsing with shared request_list but\n  needs to be improved with future changes.\n\n* After this change, each block cgroup gets a full request pool making\n  resource consumption of each cgroup higher.  This makes allowing\n  non-root users to create cgroups less desirable; however, note that\n  allowing non-root users to directly manage cgroups is already\n  severely broken regardless of this patch - each block cgroup\n  consumes kernel memory and skews IO weight (IO weights are not\n  hierarchical).\n\nv2: queue-sysfs.txt updated and patch description udpated as suggested\n    by Vivek.\n\nv3: blk_get_rl() wasn\u0027t checking error return from\n    blkg_lookup_create() and may cause oops on lookup failure.  Fix it\n    by falling back to root_rl on blkg lookup failures.  This problem\n    was spotted by Rakesh Iyer \u003crni@google.com\u003e.\n\nv4: Updated to accomodate 458f27a982 \"block: Avoid missed wakeup in\n    request waitqueue\".  blk_drain_queue() now wakes up waiters on all\n    blkg-\u003erl on the target queue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "b1208b56f31408f7d8381ff5d08e970aa5ee761c",
      "tree": "d077f86201fc7dee7ae23065c2c3d929219d1e5f",
      "parents": [
        "7f4b35d155a5f9e5748539a79558533aa08d6a81"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 04 20:40:57 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jun 25 11:53:50 2012 +0200"
      },
      "message": "blkcg: inline bio_blkcg() and friends\n\nMake bio_blkcg() and friends inline.  They all are very simple and\nused only in few places.\n\nThis patch is to prepare for further updates to request allocation\npath.\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": "159749937a3e1605068a454b1607cdc5714f16e6",
      "tree": "28be38dcf91e5714c9e264da9c9502c5b642aa00",
      "parents": [
        "13589864be74736ca4e6def7376742eb1d2099bf"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 04 20:40:52 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jun 25 11:53:46 2012 +0200"
      },
      "message": "blkcg: make root blkcg allocation use %GFP_KERNEL\n\nCurrently, blkcg_activate_policy() depends on %GFP_ATOMIC allocation\nfrom __blkg_lookup_create() for root blkcg creation.  This could make\npolicy fail unnecessarily.\n\nMake blkg_alloc() take @gfp_mask, __blkg_lookup_create() take an\noptional @new_blkg for preallocated blkg, and blkcg_activate_policy()\npreload radix tree and preallocate blkg with %GFP_KERNEL before trying\nto create the root blkg.\n\nv2: __blkg_lookup_create() was returning %NULL on blkg alloc failure\n   instead of ERR_PTR() value.  Fixed.\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": "13589864be74736ca4e6def7376742eb1d2099bf",
      "tree": "ee115325cb8a41695a79cea7be7d11c2486bbd3f",
      "parents": [
        "6d9359280753d2955f86d6411047516a9431eb51"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 04 20:40:51 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jun 25 11:53:45 2012 +0200"
      },
      "message": "blkcg: __blkg_lookup_create() doesn\u0027t need radix preload\n\nThere\u0027s no point in calling radix_tree_preload() if preloading doesn\u0027t\nuse more permissible GFP mask.  Drop preloading from\n__blkg_lookup_create().\n\nWhile at it, drop sparse locking annotation which no longer applies.\n\nv2: Vivek pointed out the odd preload usage.  Instead of updating,\n    just drop it.\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": "27e1f9d1cc87be4e53c6eb7158cafc21c4b85a14",
      "tree": "cdb26074805f8635af606bd1b9e92f21481c0d51",
      "parents": [
        "7b421d24eac79800ee68905f732300a291f72f00"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 05 13:36:44 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Jun 06 08:35:31 2012 +0200"
      },
      "message": "blkcg: drop local variable @q from blkg_destroy()\n\nblkg_destroy() caches @blkg-\u003eq in local variable @q.  While there are\ntwo places which needs @blkg-\u003eq, only lockdep_assert_held() used the\nlocal variable leading to unused local variable warning if lockdep is\nconfigured out.  Drop the local variable and just use @blkg-\u003eq\ndirectly.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Rakesh Iyer \u003crni@google.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9b2ea86bc9e940950a088e9795ab28f006e73276",
      "tree": "8bb42b9a25bd723fe838cc6a4fa3b077a02e50b4",
      "parents": [
        "ffea73fc723a12fdde4c9fb3fcce5d154d1104a1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jun 04 15:21:00 2012 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jun 04 10:03:21 2012 +0200"
      },
      "message": "blkcg: fix blkg_alloc() failure path\n\nWhen policy data allocation fails in the middle, blkg_alloc() invokes\nblkg_free() to destroy the half constructed blkg.  This ends up\ncalling pd_exit_fn() on policy datas which didn\u0027t go through\npd_init_fn().  Fix it by making blkg_alloc() call pd_init_fn()\nimmediately after each policy data allocation.\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": "a637120e49021d197e9578cba545bbaa459cbb51",
      "tree": "0d502a8fcc55c89eb4d79a7578e46a9273d1f2c8",
      "parents": [
        "496fb7806d616185a46865a4f3a20ef19dc6c7e3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Apr 19 16:29:24 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:40 2012 +0200"
      },
      "message": "blkcg: use radix tree to index blkgs from blkcg\n\nblkg lookup is currently performed by traversing linked list anchored\nat blkcg-\u003eblkg_list.  This is very unscalable and with blk-throttle\nenabled and enough request queues on the system, this can get very\nugly quickly (blk-throttle performs look up on every bio submission).\n\nThis patch makes blkcg use radix tree to index blkgs combined with\nsimple last-looked-up hint.  This is mostly identical to how icqs are\nindexed from ioc.\n\nNote that because __blkg_lookup() may be invoked without holding queue\nlock, hint is only updated from __blkg_lookup_create().  Due to cfq\u0027s\ncfqq caching, this makes hint updates overly lazy.  This will be\nimproved with scheduled blkcg aware request allocation.\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": "496fb7806d616185a46865a4f3a20ef19dc6c7e3",
      "tree": "a200e6825be55f6d0ed411ec32dc16244f488fd9",
      "parents": [
        "aaf7c680682f1999ef2e574f743c45d1674a8b8a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Apr 19 16:29:23 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:40 2012 +0200"
      },
      "message": "blkcg: fix blkcg-\u003ecss ref leak in __blkg_lookup_create()\n\n__blkg_lookup_create() leaked blkcg-\u003ecss ref if blkg allocation\nfailed.  Fix it.\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": "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": "6d18b008daf46bcd82b8ae250aae0785f9714096",
      "tree": "e70e66ce74220d5a0c7382acd20efbd4835c8f77",
      "parents": [
        "3c96cb32d318f323c1bf972a4c66821f8499e34d"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:35 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: shoot down blkgs if all policies are deactivated\n\nThere\u0027s no reason to keep blkgs around if no policy is activated for\nthe queue.  This patch moves queue locking out of blkg_destroy_all()\nand call it from blkg_deactivate_policy() on deactivation of the last\npolicy on the queue.\n\nThis change was suggested 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": "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": "80fd99792b0b9f162abdf3da12fb10eb9eb5f321",
      "tree": "3273581c76d9bcad18f0668f6707be9323e650fb",
      "parents": [
        "da8b066262e12d1d0a3b1e6d3486e500169bf730"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 14:50:53 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: make sure blkg_lookup() returns %NULL if @q is bypassing\n\nCurrently, blkg_lookup() doesn\u0027t check @q bypass state.  This patch\nupdates blk_queue_bypass_start() to do synchronize_rcu() before\nreturning and updates blkg_lookup() to check blk_queue_bypass() and\nreturn %NULL if bypassing.  This ensures blkg_lookup() returns %NULL\nif @q is bypassing.\n\nThis is to guarantee that nobody is accessing policy data while @q is\nbypassing, which is necessary to allow replacing blkio_cgroup-\u003epd[] in\nplace on policy [de]activation.\n\nv2: Added more comments explaining bypass guarantees as suggested by\n    Vivek.\n\nv3: Added more comments explaining why there\u0027s no synchronize_rcu() in\n    blk_cleanup_queue() as suggested 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": "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": "bc0d6501a844392ab6ad419d7ca5af4693b6afac",
      "tree": "08375aff242a2efd35d830c7636ab61a3ec6a109",
      "parents": [
        "f48ec1d7885281a9c6cd7779d61f321d1b1fd741"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Apr 13 13:11:26 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Apr 20 10:06:06 2012 +0200"
      },
      "message": "blkcg: kill blkio_list and replace blkio_list_lock with a mutex\n\nWith blkio_policy[], blkio_list is redundant and hinders with\nper-queue policy activation.  Remove it.  Also, replace\nblkio_list_lock with a mutex blkcg_pol_mutex and let it protect the\nwhole [un]registration.\n\nThis is to prepare for per-queue policy activation and doesn\u0027t cause\nany functional difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5bc4afb1ec6aa562fac4d9aba34d957ee42f5813",
      "tree": "dfef1de2dcb71beab3150ffecf6ae564d326ffba",
      "parents": [
        "d366e7ec41882791c970dfb7c67b737be8c3a174"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:45 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:45 2012 -0700"
      },
      "message": "blkcg: drop BLKCG_STAT_{PRIV|POL|OFF} macros\n\nNow that all stat handling code lives in policy implementations,\nthere\u0027s no need to encode policy ID in cft-\u003eprivate.\n\n* Export blkcg_prfill_[rw]stat() from blkcg, remove\n  blkcg_print_[rw]stat(), and implement cfqg_print_[rw]stat() which\n  use hard-code BLKIO_POLICY_PROP.\n\n* Use cft-\u003eprivate for offset of the target field directly and drop\n  BLKCG_STAT_{PRIV|POL|OFF}().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d366e7ec41882791c970dfb7c67b737be8c3a174",
      "tree": "78d3c73d90276b797e1553c004272af869a30075",
      "parents": [
        "af133ceb261033eb43c03d161a991c3b772e8c56"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: pass around pd-\u003epdata instead of pd itself in prfill functions\n\nNow that all conf and stat fields are moved into policy specific\nblkio_policy_data-\u003epdata areas, there\u0027s no reason to use\nblkio_policy_data itself in prfill functions.  Pass around @pd-\u003epdata\ninstead of @pd.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "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": "8a3d26151f24e2a2ffa550890144c3d54d2edb15",
      "tree": "b99f5cf8db0abc02e39e5c5107f8d4342f81effa",
      "parents": [
        "155fead9b6347ead90e0b0396cb108a6ba6126c6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: move blkio_group_stats_cpu and friends to blk-throttle.c\n\nblkio_group_stats_cpu is used only by blk-throtl and has no reason to\nbe defined in blkcg core.\n\n* Move blkio_group_stats_cpu to blk-throttle.c and rename it to\n  tg_stats_cpu.\n\n* blkg_policy_data-\u003estats_cpu is replaced with throtl_grp-\u003estats_cpu.\n  prfill functions updated accordingly.\n\n* All related macros / functions are renamed so that they have tg_\n  prefix and the unnecessary @pol arguments are dropped.\n\n* Per-cpu stats allocation code is also moved from blk-cgroup.c to\n  blk-throttle.c and gets simplified to only deal with\n  BLKIO_POLICY_THROTL.  percpu stat free is performed by the exit\n  method throtl_exit_blkio_group().\n\n* throtl_reset_group_stats() implemented for\n  blkio_reset_group_stats_fn method so that tg-\u003estats_cpu can be\n  reset.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "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": "9ade5ea4ce57d3596eaee6a57cd212a483674058",
      "tree": "cad2cc4ecb116f114cc73098b1704a47d82edd18",
      "parents": [
        "41b38b6d540f951c49315d8573e6f6195a6e736d"
      ],
      "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: add blkio_policy_ops operations for exit and stat reset\n\nAdd blkio_policy_ops-\u003eblkio_exit_group_fn() and\n-\u003eblkio_reset_group_stats_fn().  These will be used to further\nmodularize blkcg policy implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "41b38b6d540f951c49315d8573e6f6195a6e736d",
      "tree": "e667cec0bba6e7678810ff0087c96547a21a45c7",
      "parents": [
        "629ed0b10209ffc4e1d439e5508d52d5e3a090b8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: cfq doesn\u0027t need per-cpu dispatch stats\n\nblkio_group_stats_cpu is used to count dispatch stats using per-cpu\ncounters.  This is used by both blk-throtl and cfq-iosched but the\nsharing is rather silly.\n\n* cfq-iosched doesn\u0027t need per-cpu dispatch stats.  cfq always updates\n  those stats while holding queue_lock.\n\n* blk-throtl needs per-cpu dispatch stats but only service_bytes and\n  serviced.  It doesn\u0027t make use of sectors.\n\nThis patch makes cfq add and use global stats for service_bytes,\nserviced and sectors, removes per-cpu sectors counter and moves\nper-cpu stat printing code to blk-throttle.c.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "629ed0b10209ffc4e1d439e5508d52d5e3a090b8",
      "tree": "69caa493e4ea0714aff247c8415c4fef7ebfe996",
      "parents": [
        "2ce4d50f9cfab40831eee5e51e950d5c4724994b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:44 2012 -0700"
      },
      "message": "blkcg: move statistics update code to policies\n\nAs with conf/stats file handling code, there\u0027s no reason for stat\nupdate code to live in blkcg core with policies calling into update\nthem.  The current organization is both inflexible and complex.\n\nThis patch moves stat update code to specific policies.  All\nblkiocg_update_*_stats() functions which deal with BLKIO_POLICY_PROP\nstats are collapsed into their cfq_blkiocg_update_*_stats()\ncounterparts.  blkiocg_update_dispatch_stats() is used by both\npolicies and duplicated as throtl_update_dispatch_stats() and\ncfq_blkiocg_update_dispatch_stats().  This will be cleaned up later.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "60c2bc2d5a12369deef395cda41638d7e6b6bf19",
      "tree": "67fb6ace87a930215f800f0a96bb33f9773231c7",
      "parents": [
        "44ea53de46a8b01a65ae6217f47e00b516725190"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:43 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 14:38:43 2012 -0700"
      },
      "message": "blkcg: move conf/stat file handling code to policies\n\nblkcg conf/stat handling is convoluted in that details which belong to\nspecific policy implementations are all out in blkcg core and then\npolicies hook into core layer to access and manipulate confs and\nstats.  This sadly achieves both inflexibility (confs/stats can\u0027t be\nmodified without messing with blkcg core) and complexity (all the\ncall-ins and call-backs).\n\nThe previous patches restructured conf and stat handling code such\nthat they can be separated out.  This patch relocates the file\nhandling part.  All conf/stat file handling code which belongs to\nBLKIO_POLICY_PROP is moved to cfq-iosched.c and all\nBKLIO_POLICY_THROTL code to blk-throtl.c.\n\nThe move is verbatim except for blkio_update_group_{weight|bps|iops}()\ncallbacks which relays conf changes to policies.  The configuration\nsettings are handled in policies themselves so the relaying isn\u0027t\nnecessary.  Conf setting functions are modified to directly call\nper-policy update functions and the relaying mechanism is dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "44ea53de46a8b01a65ae6217f47e00b516725190",
      "tree": "45ccff782042704818d0b3f96221c381209e4a2d",
      "parents": [
        "829fdb50004de78f1bd187e428d72edcd9721cb8"
      ],
      "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: implement blkio_policy_type-\u003ecftypes\n\nAdd blkiop-\u003ecftypes which is added and removed together with the\npolicy.  This will be used to move conf/stat handling to the policies.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "829fdb50004de78f1bd187e428d72edcd9721cb8",
      "tree": "96dbdb62c97e0b7a9a31a7af6d18a6c34e820528",
      "parents": [
        "726fa6945e6e5f0389bf47a790e1df734a67de54"
      ],
      "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: export conf/stat helpers to prepare for reorganization\n\nconf/stat handling is about to be moved to policy implementation from\nblkcg core.  Export conf/stat helpers from blkcg core so that\nblk-throttle and cfq-iosched can use them.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "726fa6945e6e5f0389bf47a790e1df734a67de54",
      "tree": "7119107ef544ccde91bdd6a116b4bdabc15e4bbd",
      "parents": [
        "3a8b31d396b296df4b8594429d86d415d3409432"
      ],
      "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: simplify blkg_conf_prep()\n\nblkg_conf_prep() implements \"MAJ:MIN VAL\" parsing manually, which is\nunnecessary.  Just use sscanf(\"%u:%u %llu\").  This might not reject\nsome malformed input (extra input at the end) but we don\u0027t care.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "3a8b31d396b296df4b8594429d86d415d3409432",
      "tree": "fe75761c55f91e558b5899cc284fa9b4134d8167",
      "parents": [
        "c4682aec9caaca1fcfd1dd4b59cef47af22cbdc6"
      ],
      "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: restructure blkio_group configruation setting\n\nAs part of userland interface restructuring, this patch updates\nper-blkio_group configuration setting.  Instead of funneling\neverything through a master function which has hard-coded cases for\neach config file it may handle, the common part is factored into\nblkg_conf_prep() and blkg_conf_finish() and different configuration\nsetters are implemented using the helpers.\n\nWhile this doesn\u0027t result in immediate LOC reduction, this enables\nfurther cleanups and more modular implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "c4682aec9caaca1fcfd1dd4b59cef47af22cbdc6",
      "tree": "6e20981d877cf3dab29eb265f36edbd309f23761",
      "parents": [
        "627f29f48158c3088cc55a25d8650cae455ff63b"
      ],
      "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: restructure configuration printing\n\nSimilarly to the previous stat restructuring, this patch restructures\nconf printing code such that,\n\n* Conf printing uses the same helpers as stat.\n\n* Printing function doesn\u0027t require hardcoded switching on the config\n  being printed.  Note that this isn\u0027t complete yet for throttle\n  confs.  The next patch will convert setting for these confs and will\n  complete the transition.\n\n* Printing uses read_seq_string callback (other methods will be phased\n  out).\n\nNote that blkio_group_conf.iops[2] is changed to u64 so that they can\nbe manipulated with the same functions.  This is transitional and will\ngo away later.\n\nAfter this patch, per-device configurations - weight, bps and iops -\nuse __blkg_prfill_u64() for printing which uses white space as\ndelimiter instead of tab.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "627f29f48158c3088cc55a25d8650cae455ff63b",
      "tree": "c8b2eb5250fbf15e5f932d15714b37f2ff6227a7",
      "parents": [
        "d3d32e69fa368e131b25ee68806aa3fd3916cec1"
      ],
      "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: drop blkiocg_file_write_u64()\n\nblkiocg_file_write_u64() has single switch case.  Drop\nblkiocg_file_write_u64(), rename blkio_weight_write() to\nblkcg_set_weight() and use it directly for .write_u64 callback.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d3d32e69fa368e131b25ee68806aa3fd3916cec1",
      "tree": "f6413e70f38cffb3b363fa831b5f868d90bb6c80",
      "parents": [
        "edcb0722c654947908388df660791abd41e6617c"
      ],
      "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: restructure statistics printing\n\nblkcg stats handling is a mess.  None of the stats has much to do with\nblkcg core but they are all implemented in blkcg core.  Code sharing\nis achieved by mixing common code with hard-coded cases for each stat\ncounter.\n\nThis patch restructures statistics printing such that\n\n* Common logic exists as helper functions and specific print functions\n  use the helpers to implement specific cases.\n\n* Printing functions serving multiple counters don\u0027t require hardcoded\n  switching on specific counters.\n\n* Printing uses read_seq_string callback (other methods will be phased\n  out).\n\nThis change enables further cleanups and relocating stats code to the\npolicy implementation it belongs to.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "edcb0722c654947908388df660791abd41e6617c",
      "tree": "8c44dd4517bd562b58216dd01fb5abc42cb74a95",
      "parents": [
        "2aa4a1523b40a065bc3a31e20097ea7a618ec3de"
      ],
      "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: introduce blkg_stat and blkg_rwstat\n\nblkcg uses u64_stats_sync to avoid reading wrong u64 statistic values\non 32bit archs and some stat counters have subtypes to distinguish\nread/writes and sync/async IOs.  The stat code paths are confusing and\ninvolve a lot of going back and forth between blkcg core and specific\npolicy implementations, and synchronization and subtype handling are\nopen coded in blkcg core.\n\nThis patch introduces struct blkg_stat and blkg_rwstat which, with\naccompanying operations, encapsulate stat updating and accessing with\nproper synchronization.\n\nblkg_stat is simple u64 counter with 64bit read-access protection.\nblkg_rwstat is the one with rw and [a]sync subcounters and takes @rw\nflags to distinguish IO subtypes (%REQ_WRITE and %REQ_SYNC) and\nreplaces stat_sub_type indexed arrays.\n\nAll counters in blkio_group_stats and blkio_group_stats_cpu are\nreplaced with either blkg_stat or blkg_rwstat along with all users.\n\nThis does add one u64_stats_sync per counter and increase stats_sync\noperations but they\u0027re empty/noops on 64bit archs and blkcg doesn\u0027t\nhave too many counters, especially with DEBUG_BLK_CGROUP off.\n\nWhile the currently resulting code isn\u0027t necessarily simpler at the\nmoment, this will enable further clean up of blkcg stats code.\n\n- BLKIO_STAT_{READ|WRITE|SYNC|ASYNC|TOTAL} renamed to\n  BLKG_RWSTAT_{READ|WRITE|SYNC|ASYNC|TOTAL}.\n\n- blkg_stat_add() replaces blkio_add_stat() and\n  blkio_check_and_dec_stat().  Note that BUG_ON() on underflow in the\n  latter function no longer exists.  It\u0027s *way* better to have\n  underflowed stat counters than oopsing.\n\n- blkio_group_stats-\u003edequeue is now a proper u64 stat counter instead\n  of ulong.\n\n- reset_stats() updated to clear each stat counters individually and\n  BLKG_STATS_DEBUG_CLEAR_{START|SIZE} are removed.\n\n- Some functions reconstruct rw flags from direction and sync\n  booleans.  This will be removed by future patches.\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": "959d851caa48829eb85cb85aa949fd6b4c5d5bc6",
      "tree": "3ba9c94ec346275fb44c4f0d1cd2537cdff8d811",
      "parents": [
        "a5567932fc926739e29e98487128080f40c61710",
        "48ddbe194623ae089cc0576e60363f2d2e85662a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:30:01 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:55:00 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.5\u0027 of ../cgroup into block/for-3.5/core-merged\n\ncgroup/for-3.5 contains the following changes which blk-cgroup needs\nto proceed with the on-going cleanup.\n\n* Dynamic addition and removal of cftypes to make config/stat file\n  handling modular for policies.\n\n* cgroup removal update to not wait for css references to drain to fix\n  blkcg removal hang caused by cfq caching cfqgs.\n\nPull in cgroup/for-3.5 into block/for-3.5/core.  This causes the\nfollowing conflicts in block/blk-cgroup.c.\n\n* 761b3ef50e \"cgroup: remove cgroup_subsys argument from callbacks\"\n  conflicts with blkiocg_pre_destroy() addition and blkiocg_attach()\n  removal.  Resolved by removing @subsys from all subsys methods.\n\n* 676f7c8f84 \"cgroup: relocate cftype and cgroup_subsys definitions in\n  controllers\" conflicts with -\u003epre_destroy() and -\u003eattach() updates\n  and removal of modular config.  Resolved by dropping forward\n  declarations of the methods and applying updates to the relocated\n  blkio_subsys.\n\n* 4baf6e3325 \"cgroup: convert all non-memcg controllers to the new\n  cftype interface\" builds upon the previous item.  Resolved by adding\n  -\u003ebase_cftypes to the relocated blkio_subsys.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4baf6e33251b37f111e21289f8ee71fe4cce236e",
      "tree": "7decc386a60679fd2696041810cf331c0daf1f41",
      "parents": [
        "676f7c8f84d15e94065841529016da5ab92e901b"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: convert all non-memcg controllers to the new cftype interface\n\nConvert debug, freezer, cpuset, cpu_cgroup, cpuacct, net_prio, blkio,\nnet_cls and device controllers to use the new cftype based interface.\nTermination entry is added to cftype arrays and populate callbacks are\nreplaced with cgroup_subsys-\u003ebase_cftypes initializations.\n\nThis is functionally identical transformation.  There shouldn\u0027t be any\nvisible behavior change.\n\nmemcg is rather special and will be converted separately.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\n"
    },
    {
      "commit": "676f7c8f84d15e94065841529016da5ab92e901b",
      "tree": "29c267a4c5711f9eaca7fa88fd7a78d39c8c4eac",
      "parents": [
        "6e6ff25bd548a0c5bf5163e4f63e2793dcefbdcb"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: relocate cftype and cgroup_subsys definitions in controllers\n\nblk-cgroup, netprio_cgroup, cls_cgroup and tcp_memcontrol\nunnecessarily define cftype array and cgroup_subsys structures at the\ntop of the file, which is unconventional and necessiates forward\ndeclaration of methods.\n\nThis patch relocates those below the definitions of the methods and\nremoves the forward declarations.  Note that forward declaration of\ntcp_files[] is added in tcp_memcontrol.c for tcp_init_cgroup().  This\nwill be removed soon by another patch.\n\nThis patch doesn\u0027t introduce any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "a5567932fc926739e29e98487128080f40c61710",
      "tree": "8bd1995697c0c86f605a6ddb213312454ac7f467",
      "parents": [
        "eb7d8c07f9c5fca6190b0d328179551122d1b8a3"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Thu Mar 29 20:57:08 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Mar 29 20:57:08 2012 +0200"
      },
      "message": "blkcg: change a spin_lock() to spin_lock_irq()\n\nSmatch complains that we re-enable IRQs twice.  It looks like we forgot\nto disable them here on the spin_trylock() failure path.  This was added\nin 9f13ef678e \"blkcg: use double locking instead of RCU for blkg\nsynchronization\".\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e`\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "0d9cabdccedb79ee5f27b77ff51f29a9e7d23275",
      "tree": "8bfb64c3672d058eb90aec3c3a9c4f61cef9097c",
      "parents": [
        "701085b219016d38f105b031381b9cee6200253a",
        "3ce3230a0cff484e5130153f244d4fb8a56b3a8b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:11:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:11:21 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup changes from Tejun Heo:\n \"Out of the 8 commits, one fixes a long-standing locking issue around\n  tasklist walking and others are cleanups.\"\n\n* \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: Walk task list under tasklist_lock in cgroup_enable_task_cg_list\n  cgroup: Remove wrong comment on cgroup_enable_task_cg_list()\n  cgroup: remove cgroup_subsys argument from callbacks\n  cgroup: remove extra calls to find_existing_css_set\n  cgroup: replace tasklist_lock with rcu_read_lock\n  cgroup: simplify double-check locking in cgroup_attach_proc\n  cgroup: move struct cgroup_pidlist out from the header file\n  cgroup: remove cgroup_attach_task_current_cg()\n"
    },
    {
      "commit": "2b566fa55b9a94b53217c2818e6c5e5756eeb1a1",
      "tree": "d2186ebd18062172a7b0c83e31ca834f44ecdcc0",
      "parents": [
        "598971bfbdfdc8701337dc1636c7919c44699914"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 19 15:10:59 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:47:48 2012 +0100"
      },
      "message": "block: remove ioc_*_changed()\n\nAfter the previous patch to cfq, there\u0027s no ioc_get_changed() user\nleft.  This patch yanks out ioc_{ioprio|cgroup|get}_changed() and all\nrelated stuff.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "9a9e8a26da4c2c5ddc60999bdea957935fb22b6b",
      "tree": "5a42ef29c2c34174390e4ccf9a2924c0ade6f340",
      "parents": [
        "edf1b879e308d37b5b7c414476ab39f79650a253"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 19 15:10:56 2012 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:47:47 2012 +0100"
      },
      "message": "blkcg: add blkcg-\u003eid\n\nAdd 64bit unique id to blkcg.  This will be used by policies which\nwant blkcg identity test to tell whether the associated blkcg has\nchanged.\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": "edf1b879e308d37b5b7c414476ab39f79650a253",
      "tree": "fec2895e806eb357ba9e9ed960f8c247042d5383",
      "parents": [
        "c4c76a05382c7d05e0b911daa58a827399e9ba1a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Mar 08 10:54:00 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:45:37 2012 +0100"
      },
      "message": "blkcg: remove blkio_group-\u003estats_lock\n\nWith recent plug merge updates, all non-percpu stat updates happen\nunder queue_lock making stats_lock unnecessary to synchronize stat\nupdates.  The only synchronization necessary is stat reading, which\ncan be done using u64_stats_sync instead.\n\nThis patch removes blkio_group-\u003estats_lock and adds\nblkio_group_stats-\u003esyncp for reader synchronization.\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": "c4c76a05382c7d05e0b911daa58a827399e9ba1a",
      "tree": "e89f1edb9890a4b857f75dbdb4a0fb77d9aafa59",
      "parents": [
        "997a026c80c3cc05f82e589aced1f0011c17d376"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Mar 08 10:53:59 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:45:37 2012 +0100"
      },
      "message": "blkcg: restructure blkio_get_stat()\n\nRestructure blkio_get_stat() to prepare for removal of stats_lock.\n\n* Define BLKIO_STAT_ARR_NR explicitly to denote which stats have\n  subtypes instead of using BLKIO_STAT_QUEUED.\n\n* Separate out stat acquisition and printing.  After this, there are\n  only two users of blkio_fill_stat().  Just open code it.\n\n* The code was mixing MAX_KEY_LEN and MAX_KEY_LEN - 1.  There\u0027s no\n  need to subtract one.  Use MAX_KEY_LEN consistently.\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": "997a026c80c3cc05f82e589aced1f0011c17d376",
      "tree": "905fe49970f8549663e1e70e77dd04811fd14c9c",
      "parents": [
        "5fe224d2d5fbf8f020b30d0ba69fed7856923752"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Mar 08 10:53:58 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:45:37 2012 +0100"
      },
      "message": "blkcg: simplify stat reset\n\nblkiocg_reset_stats() implements stat reset for blkio.reset_stats\ncgroupfs file.  This feature is very unconventional and something\nwhich shouldn\u0027t have been merged.  It\u0027s only useful when there\u0027s only\none user or tool looking at the stats.  As soon as multiple users\nand/or tools are involved, it becomes useless as resetting disrupts\nother usages.  There are very good reasons why all other stats expect\nreaders to read values at the start and end of a period and subtract\nto determine delta over the period.\n\nThe implementation is rather complex - some fields shouldn\u0027t be\ncleared and it saves some fields, resets whole and restores for some\nreason.  Reset of percpu stats is also racy.  The comment points to\n64bit store atomicity for the reason but even without that stores for\nzero can simply race with other CPUs doing RMW and get clobbered.\n\nSimplify reset by\n\n* Clear selectively instead of resetting and restoring.\n\n* Grouping debug stat fields to be reset and using memset() over them.\n\n* Not caring about stats_lock.\n\n* Using memset() to reset percpu stats.\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": "5fe224d2d5fbf8f020b30d0ba69fed7856923752",
      "tree": "26941c40cd28c4f7070e8edab338d340afd2bc99",
      "parents": [
        "1cd9e039fc258f91fe38b97b3c622b13a3b8a795"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Mar 08 10:53:57 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:45:37 2012 +0100"
      },
      "message": "blkcg: don\u0027t use percpu for merged stats\n\nWith recent plug merge updates, merged stats are no longer called for\nplug merges and now only updated while holding queue_lock.  As\nstats_lock is scheduled to be removed, there\u0027s no reason to use percpu\nfor merged stats.  Don\u0027t use percpu for merged stats.\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": "1cd9e039fc258f91fe38b97b3c622b13a3b8a795",
      "tree": "908f9747124b24ea4413025ab9294bd7d026b4f8",
      "parents": [
        "671058fb2a2aac4e70f01b316b06bc59b98bd138"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Thu Mar 08 10:53:56 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 20 12:45:37 2012 +0100"
      },
      "message": "blkcg: alloc per cpu stats from worker thread in a delayed manner\n\nCurrent per cpu stat allocation assumes GFP_KERNEL allocation flag. But in\nIO path there are times when we want GFP_NOIO semantics. As there is no\nway to pass the allocation flags to alloc_percpu(), this patch delays the\nallocation of stats using a worker thread.\n\nv2-\u003e tejun suggested following changes. Changed the patch accordingly.\n\t- move alloc_node location in structure\n\t- reduce the size of names of some of the fields\n\t- Reduce the scope of locking of alloc_list_lock\n\t- Simplified stat_alloc_fn() by allocating stats for all\n\t  policies in one go and then assigning these to a group.\n\nv3 -\u003e Andrew suggested to put some comments in the code. Also raised\n      concerns about trying to allocate infinitely in case of allocation\n      failure. I have changed the logic to sleep for 10ms before retrying.\n      That should take care of non-preemptible UP kernels.\n\nv4 -\u003e Tejun had more suggestions.\n\t- drop list_for_each_entry_all()\n\t- instead of msleep() use queue_delayed_work()\n\t- Some cleanups realted to more compact coding.\n\nv5-\u003e tejun suggested more cleanups leading to more compact code.\n\ntj: - Relocated pcpu_stats into blkio_stat_alloc_fn().\n    - Minor comment update.\n    - This also fixes suspicious RCU usage warning caused by invoking\n      cgroup_path() from blkg_alloc() without holding RCU read lock.\n      Now that blkg_alloc() doesn\u0027t require sleepable context, RCU\n      read lock from blkg_lookup_create() is maintained throughout\n      blkg_alloc().\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\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": "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": "9f13ef678efd977487fc0c2e489f17c9a8c67a3e",
      "tree": "e58a2dd153ad24b2ea173d5dfb575c507e1f7589",
      "parents": [
        "e8989fae38d9831c72b20375a206a919ca468c52"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:21 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:24 2012 +0100"
      },
      "message": "blkcg: use double locking instead of RCU for blkg synchronization\n\nblkgs are chained from both blkcgs and request_queues and thus\nsubjected to two locks - blkcg-\u003elock and q-\u003equeue_lock.  As both blkcg\nand q can go away anytime, locking during removal is tricky.  It\u0027s\ncurrently solved by wrapping removal inside RCU, which makes the\nsynchronization complex.  There are three locks to worry about - the\nouter RCU, q lock and blkcg lock, and it leads to nasty subtle\ncomplications like conditional synchronize_rcu() on queue exit paths.\n\nFor all other paths, blkcg lock is naturally nested inside q lock and\nthe only exception is blkcg removal path, which is a very cold path\nand can be implemented as clumsy but conceptually-simple reverse\ndouble lock dancing.\n\nThis patch updates blkg removal path such that blkgs are removed while\nholding both q and blkcg locks, which is trivial for request queue\nexit path - blkg_destroy_all().  The blkcg removal path,\nblkiocg_pre_destroy(), implements reverse double lock dancing\nessentially identical to ioc_release_fn().\n\nThis simplifies blkg locking - no half-dead blkgs to worry about.  Now\nunnecessary RCU annotations will be removed by the next patch.\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": "549d3aa872cd1aec1ee540fd93afd9611faa0def",
      "tree": "27c3703d3448dc0be9f58b5f01224ae901422a32",
      "parents": [
        "1adaf3dde37a8b9b59ea59c5f58fed7761178383"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:16 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: make blkg-\u003epd an array and move configuration and stats into it\n\nTo prepare for unifying blkgs for different policies, make blkg-\u003epd an\narray with BLKIO_NR_POLICIES elements and move blkg-\u003econf, -\u003estats,\nand -\u003estats_cpu into blkg_policy_data.\n\nThis patch doesn\u0027t introduce any 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": "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": "923adde1be1df57cebd80c563058e503376645e8",
      "tree": "7009edf644abdf6b91daaab3967ffa6a8b30633a",
      "parents": [
        "5efd611351d1a847c72d74fb12ff4bd187c0cb2c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:13 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: clear all request_queues on blkcg policy [un]registrations\n\nKeep track of all request_queues which have blkcg initialized and turn\non bypass and invoke blkcg_clear_queue() on all before making changes\nto blkcg policies.\n\nThis is to prepare for moving blkg management into blkcg core.  Note\nthat this uses more brute force than necessary.  Finer grained shoot\ndown will be implemented later and given that policy [un]registration\nalmost never happens on running systems (blk-throtl can\u0027t be built as\na module and cfq usually is the builtin default iosched), this\nshouldn\u0027t be a problem for the time being.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "5efd611351d1a847c72d74fb12ff4bd187c0cb2c",
      "tree": "bac28206d088426ab872eea98155cc100bd8d9b1",
      "parents": [
        "7ee9c5620504906e98451dc9a1945b2b9e892cb8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:12 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: add blkcg_{init|drain|exit}_queue()\n\nCurrently block core calls directly into blk-throttle for init, drain\nand exit.  This patch adds blkcg_{init|drain|exit}_queue() which wraps\nthe blk-throttle functions.  This is to give more control and\nvisiblity to blkcg core layer for proper layering.  Further patches\nwill add logic common to blkcg policies to the functions.\n\nWhile at it, collapse blk_throtl_release() into blk_throtl_exit().\nThere\u0027s no reason to keep them separate.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "7ee9c5620504906e98451dc9a1945b2b9e892cb8",
      "tree": "1daf4d9fc8d03ebbc88ceedb7abeec46d8c71df3",
      "parents": [
        "92616b5b3a7c7fa8148df82e7ff6183056f2bfc8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:11 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:23 2012 +0100"
      },
      "message": "blkcg: let blkio_group point to blkio_cgroup directly\n\nCurrently, blkg points to the associated blkcg via its css_id.  This\nunnecessarily complicates dereferencing blkcg.  Let blkg hold a\nreference to the associated blkcg and point directly to it and disable\ncss_id on blkio_subsys.\n\nThis change requires splitting blkiocg_destroy() into\nblkiocg_pre_destroy() and blkiocg_destroy() so that all blkg\u0027s can be\ndestroyed and all the blkcg references held by them dropped during\ncgroup removal.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "92616b5b3a7c7fa8148df82e7ff6183056f2bfc8",
      "tree": "b204b7df4753e9508cf15d278688dc9c307761fa",
      "parents": [
        "7a4dd281ec66224f802093962d1d903d86b09560"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Mar 05 13:15:10 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: skip blkg printing if q isn\u0027t associated with disk\n\nblk-cgroup printing code currently assumes that there is a device/disk\nassociated with every queue in the system, but modules like floppy,\ncan instantiate request queues without registering disk which can lead\nto oops.\n\nSkip the queue/blkg which don\u0027t have dev/disk associated with them.\n\n-tj: Factored out backing_dev_info check into blkg_dev_name().\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\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": "4bfd482e73b30284cb21e10834ce729fa81aa256",
      "tree": "2c39e09592113946e3545013199b0e00a21f60f2",
      "parents": [
        "e56da7e287967667474a58c4f60c286279e3f487"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:08 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: kill blkio_policy_node\n\nNow that blkcg configuration lives in blkg\u0027s, blkio_policy_node is no\nlonger necessary.  Kill it.\n\nblkio_policy_parse_and_set() now fails if invoked for missing device\nand functions to print out configurations are updated to print from\nblkg\u0027s.\n\ncftype_blkg_same_policy() is dropped along with other policy functions\nfor consistency.  Its one line is open coded in the only user -\nblkio_read_blkg_stats().\n\n-v2: Update to reflect the retry-on-bypass logic change of the\n     previous patch.\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": "035d10b2fa7e5f7e9bf9465dbc39c35affd5ac32",
      "tree": "6a712eb1b505e8163d28f8709980e581a08b572c",
      "parents": [
        "ca32aefc7f2539ed88d42763330d54ee3e61769a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:15:04 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:22 2012 +0100"
      },
      "message": "blkcg: add blkio_policy[] array and allow one policy per policy ID\n\nBlock cgroup policies are maintained in a linked list and,\ntheoretically, multiple policies sharing the same policy ID are\nallowed.\n\nThis patch temporarily restricts one policy per plid and adds\nblkio_policy[] array which indexes registered policy types by plid.\nBoth the restriction and blkio_policy[] array are transitional and\nwill be removed once API cleanup is complete.\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": "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": "32e380aedc3de454c06ce1c254fe3bea35a676e1",
      "tree": "ae48ced36af22f020451cb05ecca835ff561dc9d",
      "parents": [
        "b855b04a0b2213dbc1b59cf936056726e7ed97ad"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Mar 05 13:14:54 2012 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Mar 06 21:27:21 2012 +0100"
      },
      "message": "blkcg: make CONFIG_BLK_CGROUP bool\n\nBlock cgroup core can be built as module; however, it isn\u0027t too useful\nas blk-throttle can only be built-in and cfq-iosched is usually the\ndefault built-in scheduler.  Scheduled blkcg cleanup requires calling\ninto blkcg from block core.  To simplify that, disallow building blkcg\nas module by making CONFIG_BLK_CGROUP bool.\n\nIf building blkcg core as module really matters, which I doubt, we can\nrevisit it after blkcg API cleanup.\n\n-v2: Vivek pointed out that IOSCHED_CFQ was incorrectly updated to\n     depend on BLK_CGROUP.  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": "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": "761b3ef50e1c2649cffbfa67a4dcb2dcdb7982ed",
      "tree": "67ab6a9a2520811c9c0b4d70d1c19b4bfca16237",
      "parents": [
        "61d1d219c4c0761059236a46867bc49943c4d29d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jan 31 13:47:36 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 02 09:20:22 2012 -0800"
      },
      "message": "cgroup: remove cgroup_subsys argument from callbacks\n\nThe argument is not used at all, and it\u0027s not necessary, because\na specific callback handler of course knows which subsys it\nbelongs to.\n\nNow only -\u003epupulate() takes this argument, because the handlers of\nthis callback always call cgroup_add_file()/cgroup_add_files().\n\nSo we reduce a few lines of code, though the shrinking of object size\nis minimal.\n\n 16 files changed, 113 insertions(+), 162 deletions(-)\n\n   text    data     bss     dec     hex filename\n5486240  656987 7039960 13183187         c928d3 vmlinux.o.orig\n5486170  656987 7039960 13183117         c9288d vmlinux.o\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b3c9dd182ed3bdcdaf0e42625a35924b0497afdc",
      "tree": "ad48ad4d923fee147c736318d0fad35b3755f4f5",
      "parents": [
        "83c2f912b43c3a7babbb6cb7ae2a5276c1ed2a3e",
        "5d381efb3d1f1ef10535a31ca0dd9b22fe1e1922"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 15 12:24:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 15 12:24:45 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.3/core\u0027 of git://git.kernel.dk/linux-block: (37 commits)\n  Revert \"block: recursive merge requests\"\n  block: Stop using macro stubs for the bio data integrity calls\n  blockdev: convert some macros to static inlines\n  fs: remove unneeded plug in mpage_readpages()\n  block: Add BLKROTATIONAL ioctl\n  block: Introduce blk_set_stacking_limits function\n  block: remove WARN_ON_ONCE() in exit_io_context()\n  block: an exiting task should be allowed to create io_context\n  block: ioc_cgroup_changed() needs to be exported\n  block: recursive merge requests\n  block, cfq: fix empty queue crash caused by request merge\n  block, cfq: move icq creation and rq-\u003eelv.icq association to block core\n  block, cfq: restructure io_cq creation path for io_context interface cleanup\n  block, cfq: move io_cq exit/release to blk-ioc.c\n  block, cfq: move icq cache management to block core\n  block, cfq: move io_cq lookup to blk-ioc.c\n  block, cfq: move cfqd-\u003eicq_list to request_queue and add request-\u003eelv.icq\n  block, cfq: reorganize cfq_io_context into generic and cfq specific parts\n  block: remove elevator_queue-\u003eops\n  block: reorder elevator switch sequence\n  ...\n\nFix up conflicts in:\n - block/blk-cgroup.c\n\tSwitch from can_attach_task to can_attach\n - block/cfq-iosched.c\n\tconflict with now removed cic index changes (we now use q-\u003eid instead)\n"
    },
    {
      "commit": "b2efa05265d62bc29f3a64400fad4b44340eedb8",
      "tree": "4555f0b5f0025c099997b81f7b3f8bc48b44220d",
      "parents": [
        "f1a4f4d35ff30a328d5ea28f6cc826b2083111d2"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:39 2011 +0100"
      },
      "message": "block, cfq: unlink cfq_io_context\u0027s immediately\n\ncic is association between io_context and request_queue.  A cic is\nlinked from both ioc and q and should be destroyed when either one\ngoes away.  As ioc and q both have their own locks, locking becomes a\nbit complex - both orders work for removal from one but not from the\nother.\n\nCurrently, cfq tries to circumvent this locking order issue with RCU.\nioc-\u003elock nests inside queue_lock but the radix tree and cic\u0027s are\nalso protected by RCU allowing either side to walk their lists without\ngrabbing lock.\n\nThis rather unconventional use of RCU quickly devolves into extremely\nfragile convolution.  e.g. The following is from cfqd going away too\nsoon after ioc and q exits raced.\n\n general protection fault: 0000 [#1] PREEMPT SMP\n CPU 2\n Modules linked in:\n [   88.503444]\n Pid: 599, comm: hexdump Not tainted 3.1.0-rc10-work+ #158 Bochs Bochs\n RIP: 0010:[\u003cffffffff81397628\u003e]  [\u003cffffffff81397628\u003e] cfq_exit_single_io_context+0x58/0xf0\n ...\n Call Trace:\n  [\u003cffffffff81395a4a\u003e] call_for_each_cic+0x5a/0x90\n  [\u003cffffffff81395ab5\u003e] cfq_exit_io_context+0x15/0x20\n  [\u003cffffffff81389130\u003e] exit_io_context+0x100/0x140\n  [\u003cffffffff81098a29\u003e] do_exit+0x579/0x850\n  [\u003cffffffff81098d5b\u003e] do_group_exit+0x5b/0xd0\n  [\u003cffffffff81098de7\u003e] sys_exit_group+0x17/0x20\n  [\u003cffffffff81b02f2b\u003e] system_call_fastpath+0x16/0x1b\n\nThe only real hot path here is cic lookup during request\ninitialization and avoiding extra locking requires very confined use\nof RCU.  This patch makes cic removal from both ioc and request_queue\nperform double-locking and unlink immediately.\n\n* From q side, the change is almost trivial as ioc-\u003elock nests inside\n  queue_lock.  It just needs to grab each ioc-\u003elock as it walks\n  cic_list and unlink it.\n\n* From ioc side, it\u0027s a bit more difficult because of inversed lock\n  order.  ioc needs its lock to walk its cic_list but can\u0027t grab the\n  matching queue_lock and needs to perform unlock-relock dancing.\n\n  Unlinking is now wholly done from put_io_context() and fast path is\n  optimized by using the queue_lock the caller already holds, which is\n  by far the most common case.  If the ioc accessed multiple devices,\n  it tries with trylock.  In unlikely cases of fast path failure, it\n  falls back to full double-locking dance from workqueue.\n\nDouble-locking isn\u0027t the prettiest thing in the world but it\u0027s *far*\nsimpler and more understandable than RCU trick without adding any\nmeaningful overhead.\n\nThis still leaves a lot of now unnecessary RCU logics.  Future patches\nwill trim them.\n\n-v2: Vivek pointed out that cic-\u003eq was being dereferenced after\n     cic-\u003erelease() was called.  Updated to use local variable @this_q\n     instead.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "dc86900e0a8f665122de6faadd27fb4c6d2b3e4d",
      "tree": "ec24aa4b076f54fcfb0558d5113f5c5e0f4bc173",
      "parents": [
        "283287a52e3c3f7f8f9da747f4b8c5202740d776"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block, cfq: move ioc ioprio/cgroup changed handling to cic\n\nioprio/cgroup change was handled by marking the changed state in ioc\nand, on the following access to the ioc, performing RCU-protected\niteration through all cic\u0027s grabbing the matching queue_lock.\n\nThis patch moves the changed state to each cic.  When ioprio or cgroup\nchanges, the respective bit is set on all cic\u0027s of the ioc and when\neach of those cic (not ioc) is accessed, change is applied for that\nspecific ioc-queue pair.\n\nThis also fixes the following two race conditions between setting and\nclearing of changed states.\n\n* Missing barrier between assign/load of ioprio and ioprio_changed\n  allowed applying old ioprio.\n\n* Change requests could happen between application of change and\n  clearing of changed variables.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "6e736be7f282fff705db7c34a15313281b372a76",
      "tree": "1683e00e073ee4bd3027798f92ae2d368404d44b",
      "parents": [
        "42ec57a8f68311bbbf4ff96a5d33c8a2e90b9d05"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Dec 14 00:33:38 2011 +0100"
      },
      "message": "block: make ioc get/put interface more conventional and fix race on alloction\n\nIgnoring copy_io() during fork, io_context can be allocated from two\nplaces - current_io_context() and set_task_ioprio().  The former is\nalways called from local task while the latter can be called from\ndifferent task.  The synchornization between them are peculiar and\ndubious.\n\n* current_io_context() doesn\u0027t grab task_lock() and assumes that if it\n  saw %NULL -\u003eio_context, it would stay that way until allocation and\n  assignment is complete.  It has smp_wmb() between alloc/init and\n  assignment.\n\n* set_task_ioprio() grabs task_lock() for assignment and does\n  smp_read_barrier_depends() between \"ioc \u003d task-\u003eio_context\" and \"if\n  (ioc)\".  Unfortunately, this doesn\u0027t achieve anything - the latter\n  is not a dependent load of the former.  ie, if ioc itself were being\n  dereferenced \"ioc-\u003exxx\", it would mean something (not sure what tho)\n  but as the code currently stands, the dependent read barrier is\n  noop.\n\nAs only one of the the two test-assignment sequences is task_lock()\nprotected, the task_lock() can\u0027t do much about race between the two.\nNothing prevents current_io_context() and set_task_ioprio() allocating\nits own ioc for the same task and overwriting the other\u0027s.\n\nAlso, set_task_ioprio() can race with exiting task and create a new\nioc after exit_io_context() is finished.\n\nioc get/put doesn\u0027t have any reason to be complex.  The only hot path\nis accessing the existing ioc of %current, which is simple to achieve\ngiven that -\u003eio_context is never destroyed as long as the task is\nalive.  All other paths can happily go through task_lock() like all\nother task sub structures without impacting anything.\n\nThis patch updates ioc get/put so that it becomes more conventional.\n\n* alloc_io_context() is replaced with get_task_io_context().  This is\n  the only interface which can acquire access to ioc of another task.\n  On return, the caller has an explicit reference to the object which\n  should be put using put_io_context() afterwards.\n\n* The functionality of current_io_context() remains the same but when\n  creating a new ioc, it shares the code path with\n  get_task_io_context() and always goes through task_lock().\n\n* get_io_context() now means incrementing ref on an ioc which the\n  caller already has access to (be that an explicit refcnt or implicit\n  %current one).\n\n* PF_EXITING inhibits creation of new io_context and once\n  exit_io_context() is finished, it\u0027s guaranteed that both ioc\n  acquisition functions return %NULL.\n\n* All users are updated.  Most are trivial but\n  smp_read_barrier_depends() removal from cfq_get_io_context() needs a\n  bit of explanation.  I suppose the original intention was to ensure\n  ioc-\u003eioprio is visible when set_task_ioprio() allocates new\n  io_context and installs it; however, this wouldn\u0027t have worked\n  because set_task_ioprio() doesn\u0027t have wmb between init and install.\n  There are other problems with this which will be fixed in another\n  patch.\n\n* While at it, use NUMA_NO_NODE instead of -1 for wildcard node\n  specification.\n\n-v2: Vivek spotted contamination from debug patch.  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "bb9d97b6dffa10cec5e1ce9adbce60f3c2b5eabc",
      "tree": "fb8351518fcfb91927e9e138f48284c44553f011",
      "parents": [
        "2f7ee5691eecb67c8108b92001a85563ea336ac5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "message": "cgroup: don\u0027t use subsys-\u003ecan_attach_task() or -\u003eattach_task()\n\nNow that subsys-\u003ecan_attach() and attach() take @tset instead of\n@task, they can handle per-task operations.  Convert\n-\u003ecan_attach_task() and -\u003eattach_task() users to use -\u003ecan_attach()\nand attach() instead.  Most converions are straight-forward.\nNoteworthy changes are,\n\n* In cgroup_freezer, remove unnecessary NULL assignments to unused\n  methods.  It\u0027s useless and very prone to get out of sync, which\n  already happened.\n\n* In cpuset, PF_THREAD_BOUND test is checked for each task.  This\n  doesn\u0027t make any practical difference but is conceptually cleaner.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\n"
    }
  ],
  "next": "a38eb630fa224d6fba8c14a4063174bc5e0f63bb"
}
