mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
blockjob: Introduce reference count and fix reference to job->bs
Add reference count to block job, meanwhile move the ownership of the reference to job->bs from the caller (which is released in two completion callbacks) to the block job itself. It is necessary for block_job_complete_sync to work, because block job shouldn't live longer than its bs, as asserted in bdrv_delete. Now block_job_complete_sync can be simplified. Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com> Message-id: 1446765200-3054-6-git-send-email-jsnow@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
b976ea3cf5
commit
18930ba3d1
5 changed files with 32 additions and 44 deletions
|
@ -130,6 +130,9 @@ struct BlockJob {
|
|||
|
||||
/** The opaque value that is passed to the completion function. */
|
||||
void *opaque;
|
||||
|
||||
/** Reference count of the block job */
|
||||
int refcnt;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -174,12 +177,21 @@ void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns);
|
|||
void block_job_yield(BlockJob *job);
|
||||
|
||||
/**
|
||||
* block_job_release:
|
||||
* block_job_ref:
|
||||
* @bs: The block device.
|
||||
*
|
||||
* Release job resources when an error occurred or job completed.
|
||||
* Grab a reference to the block job. Should be paired with block_job_unref.
|
||||
*/
|
||||
void block_job_release(BlockDriverState *bs);
|
||||
void block_job_ref(BlockJob *job);
|
||||
|
||||
/**
|
||||
* block_job_unref:
|
||||
* @bs: The block device.
|
||||
*
|
||||
* Release reference to the block job and release resources if it is the last
|
||||
* reference.
|
||||
*/
|
||||
void block_job_unref(BlockJob *job);
|
||||
|
||||
/**
|
||||
* block_job_completed:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue