(1) We manually pick up a reference to the bitmap if present to allow
its cleanup to be delayed until after all drive_backup jobs launched
by the transaction have fully completed.
(2) We create a functional closure that envelops the original drive_backup
callback, to be able to intercept the completion status and return code
for the job.
(3) We add the drive_backup_cb method for the drive_backup action, which
unpacks the completion information and invokes the final cleanup.
(4) backup_transaction_complete will perform the final cleanup on the
backup job.
(5) In the case of transaction cancellation, drive_backup_cb is still
responsible for cleaning up the mess we may have already made.
Signed-off-by: John Snow <address@hidden>
---
block/backup.c | 9 ++++++++
blockdev.c | 52 ++++++++++++++++++++++++++++++++++++++++++++---
include/block/block_int.h | 8 ++++++++
3 files changed, 66 insertions(+), 3 deletions(-)