)]}'
{
  "commit": "5a7e7a0bad17c96e03f55ed7019e2d7545e21a96",
  "tree": "d84566a65af84c20617ae6d288c3e876bfe3b6a2",
  "parents": [
    "f3e69beb942103ccd5248273e4d95e76b64ab64c"
  ],
  "author": {
    "name": "Stefan Hajnoczi",
    "email": "stefanha@redhat.com",
    "time": "Tue Oct 21 12:03:58 2014 +0100"
  },
  "committer": {
    "name": "Stefan Hajnoczi",
    "email": "stefanha@redhat.com",
    "time": "Mon Nov 03 11:41:49 2014 +0000"
  },
  "message": "block: let mirror blockjob run in BDS AioContext\n\nThe mirror block job must run in the BlockDriverState AioContext so that\nit works with dataplane.\n\nAcquire the AioContext in blockdev.c so starting the block job is safe.\n\nNote that to_replace is treated separately from other BlockDriverStates\nin that it does not need to be in the same AioContext.  Explicitly\nacquire/release to_replace\u0027s AioContext when accessing it.\n\nThe completion code in block/mirror.c must perform BDS graph\nmanipulation and bdrv_reopen() from the main loop.  Use\nblock_job_defer_to_main_loop() to achieve that.\n\nThe bdrv_drain_all() call is not allowed outside the main loop since it\ncould lead to lock ordering problems.  Use bdrv_drain(bs) instead\nbecause we have acquired the AioContext so nothing else can sneak in\nI/O.\n\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@redhat.com\u003e\nReviewed-by: Max Reitz \u003cmreitz@redhat.com\u003e\nMessage-id: 1413889440-32577-10-git-send-email-stefanha@redhat.com\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a909b9d749b82982b50f2a4fa47d4ed6d8f8803d",
      "old_mode": 33188,
      "old_path": "block.c",
      "new_id": "dacd8815d31899e918f89cee5e2e6588ed763511",
      "new_mode": 33188,
      "new_path": "block.c"
    },
    {
      "type": "modify",
      "old_id": "2a1acfe26fd979ed01adcaab4793bbde21914ec2",
      "old_mode": 33188,
      "old_path": "block/mirror.c",
      "new_id": "2c6dd2a4c178bb01a427bd2a73e36032d78ea8d2",
      "new_mode": 33188,
      "new_path": "block/mirror.c"
    },
    {
      "type": "modify",
      "old_id": "6e43d2e3a8048594e4cb9a1fb85f050bd435010c",
      "old_mode": 33188,
      "old_path": "blockdev.c",
      "new_id": "13763225ee8e5dc32ada143e40beee32f1ee1813",
      "new_mode": 33188,
      "new_path": "blockdev.c"
    }
  ]
}
