)]}'
{
  "commit": "621032ad6eaabf2fe771c4fa0d8f58e1fcfcdba6",
  "tree": "903f4b1ae7dc9aa4f0538b606b1c7deb1542e704",
  "parents": [
    "2274b029f640cd652ab59c363e5beebf5f50e609"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Wed Feb 15 09:45:53 2012 +0100"
  },
  "committer": {
    "name": "Jens Axboe",
    "email": "axboe@kernel.dk",
    "time": "Wed Feb 15 09:45:53 2012 +0100"
  },
  "message": "block: exit_io_context() should call elevator_exit_icq_fn()\n\nWhile updating locking, b2efa05265 \"block, cfq: unlink\ncfq_io_context\u0027s immediately\" moved elevator_exit_icq_fn() invocation\nfrom exit_io_context() to the final ioc put.  While this doesn\u0027t cause\ncatastrophic failure, it effectively removes task exit notification to\nelevator and cause noticeable IO performance degradation with CFQ.\n\nOn task exit, CFQ used to immediately expire the slice if it was being\nused by the exiting task as no more IO would be issued by the task;\nhowever, after b2efa05265, the notification is lost and disk could sit\nidle needlessly, leading to noticeable IO performance degradation for\ncertain workloads.\n\nThis patch renames ioc_exit_icq() to ioc_destroy_icq(), separates\nelevator_exit_icq_fn() invocation into ioc_exit_icq() and invokes it\nfrom exit_io_context().  ICQ_EXITED flag is added to avoid invoking\nthe callback more than once for the same icq.\n\nWalking icq_list from ioc side and invoking elevator callback requires\nreverse double locking.  This may be better implemented using RCU;\nunfortunately, using RCU isn\u0027t trivial.  e.g. RCU protection would\nneed to cover request_queue and queue_lock switch on cleanup makes\ngrabbing queue_lock from RCU unsafe.  Reverse double locking should\ndo, at least for now.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-and-bisected-by: Shaohua Li \u003cshli@kernel.org\u003e\nLKML-Reference: \u003cCANejiEVzs\u003dpUhQSTvUppkDcc2TNZyfohBRLygW5zFmXyk5A-xQ@mail.gmail.com\u003e\nTested-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f53c80ecaf076c69367b371a334c15bc76473d10",
      "old_mode": 33188,
      "old_path": "block/blk-ioc.c",
      "new_id": "92bf55540d87b25f6a73e5d115e7e76431831103",
      "new_mode": 33188,
      "new_path": "block/blk-ioc.c"
    },
    {
      "type": "modify",
      "old_id": "17839c7b9614ff38b71e738adfe0d2ce4a8055f9",
      "old_mode": 33188,
      "old_path": "include/linux/iocontext.h",
      "new_id": "1a30180630343dabd49aa886fc7621964912afdf",
      "new_mode": 33188,
      "new_path": "include/linux/iocontext.h"
    }
  ]
}
