)]}'
{
  "commit": "67da1dc5ce696c7b309b1db100da7d94292847b7",
  "tree": "c28226815e2d495cee3106dcf557667751adec10",
  "parents": [
    "83c98d7b924eab36a0a2c7813731dbef439a91d3"
  ],
  "author": {
    "name": "Fam Zheng",
    "email": "famz@redhat.com",
    "time": "Mon Nov 09 18:16:53 2015 +0800"
  },
  "committer": {
    "name": "Kevin Wolf",
    "email": "kwolf@redhat.com",
    "time": "Thu Nov 12 16:22:43 2015 +0100"
  },
  "message": "block: Introduce BlockDriver.bdrv_drain callback\n\nDrivers can have internal request sources that generate IO, like the\nneed_check_timer in QED. Since we want quiesced periods that contain\nnested event loops in block layer, we need to have a way to disable such\nevent sources.\n\nBlock drivers must implement the \"bdrv_drain\" callback if it has any\ninternal sources that can generate I/O activity, like a timer or a\nworker thread (even in a library) that can schedule QEMUBH in an\nasynchronous callback.\n\nUpdate the comments of bdrv_drain and bdrv_drained_begin accordingly.\n\nLike bdrv_requests_pending(), we should consider all the children of bs.\nBefore, the while loop just works, as bdrv_requests_pending() already\ntracks its children; now we mustn\u0027t miss the callback, so recurse down\nexplicitly.\n\nSigned-off-by: Fam Zheng \u003cfamz@redhat.com\u003e\nReviewed-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\nMessage-id: 1447064214-29930-9-git-send-email-famz@redhat.com\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@redhat.com\u003e\nSigned-off-by: Kevin Wolf \u003ckwolf@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4ecb17134b180a19bfab5625f31fdeaec5633c0b",
      "old_mode": 33188,
      "old_path": "block/io.c",
      "new_id": "adc1eabef0773bc58cae04a99497c6f0d7e43145",
      "new_mode": 33188,
      "new_path": "block/io.c"
    },
    {
      "type": "modify",
      "old_id": "84991d9973043ffb18d771868d9d2d3e33a8e800",
      "old_mode": 33188,
      "old_path": "include/block/block_int.h",
      "new_id": "3a24913a7e44cc11d565a208a714db78024ebbf9",
      "new_mode": 33188,
      "new_path": "include/block/block_int.h"
    }
  ]
}
