mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
job: Move completion and cancellation to Job
This moves the top-level job completion and cancellation functions from BlockJob to Job. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
7eaa8fb57d
commit
3d70ff53b6
18 changed files with 171 additions and 209 deletions
|
@ -140,15 +140,6 @@ void block_job_remove_all_bdrv(BlockJob *job);
|
|||
*/
|
||||
void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp);
|
||||
|
||||
/**
|
||||
* block_job_cancel:
|
||||
* @job: The job to be canceled.
|
||||
* @force: Quit a job without waiting for data to be in sync.
|
||||
*
|
||||
* Asynchronously cancel the specified job.
|
||||
*/
|
||||
void block_job_cancel(BlockJob *job, bool force);
|
||||
|
||||
/**
|
||||
* block_job_dismiss:
|
||||
* @job: The job to be dismissed.
|
||||
|
@ -185,52 +176,6 @@ void block_job_progress_set_remaining(BlockJob *job, uint64_t remaining);
|
|||
*/
|
||||
BlockJobInfo *block_job_query(BlockJob *job, Error **errp);
|
||||
|
||||
/**
|
||||
* block_job_user_cancel:
|
||||
* @job: The job to be cancelled.
|
||||
* @force: Quit a job without waiting for data to be in sync.
|
||||
*
|
||||
* Cancels the specified job, but may refuse to do so if the
|
||||
* operation isn't currently meaningful.
|
||||
*/
|
||||
void block_job_user_cancel(BlockJob *job, bool force, Error **errp);
|
||||
|
||||
/**
|
||||
* block_job_cancel_sync:
|
||||
* @job: The job to be canceled.
|
||||
*
|
||||
* Synchronously cancel the job. The completion callback is called
|
||||
* before the function returns. The job may actually complete
|
||||
* instead of canceling itself; the circumstances under which this
|
||||
* happens depend on the kind of job that is active.
|
||||
*
|
||||
* Returns the return value from the job if the job actually completed
|
||||
* during the call, or -ECANCELED if it was canceled.
|
||||
*/
|
||||
int block_job_cancel_sync(BlockJob *job);
|
||||
|
||||
/**
|
||||
* block_job_cancel_sync_all:
|
||||
*
|
||||
* Synchronously cancels all jobs using block_job_cancel_sync().
|
||||
*/
|
||||
void block_job_cancel_sync_all(void);
|
||||
|
||||
/**
|
||||
* block_job_complete_sync:
|
||||
* @job: The job to be completed.
|
||||
* @errp: Error object which may be set by block_job_complete(); this is not
|
||||
* necessarily set on every error, the job return value has to be
|
||||
* checked as well.
|
||||
*
|
||||
* Synchronously complete the job. The completion callback is called before the
|
||||
* function returns, unless it is NULL (which is permissible when using this
|
||||
* function).
|
||||
*
|
||||
* Returns the return value from the job.
|
||||
*/
|
||||
int block_job_complete_sync(BlockJob *job, Error **errp);
|
||||
|
||||
/**
|
||||
* block_job_iostatus_reset:
|
||||
* @job: The job whose I/O status should be reset.
|
||||
|
|
|
@ -123,24 +123,6 @@ void block_job_yield(BlockJob *job);
|
|||
*/
|
||||
int64_t block_job_ratelimit_get_delay(BlockJob *job, uint64_t n);
|
||||
|
||||
/**
|
||||
* block_job_completed:
|
||||
* @job: The job being completed.
|
||||
* @ret: The status code.
|
||||
*
|
||||
* Call the completion function that was registered at creation time, and
|
||||
* free @job.
|
||||
*/
|
||||
void block_job_completed(BlockJob *job, int ret);
|
||||
|
||||
/**
|
||||
* block_job_enter:
|
||||
* @job: The job to enter.
|
||||
*
|
||||
* Continue the specified job by entering the coroutine.
|
||||
*/
|
||||
void block_job_enter(BlockJob *job);
|
||||
|
||||
/**
|
||||
* block_job_event_ready:
|
||||
* @job: The job which is now ready to be completed.
|
||||
|
|
|
@ -74,8 +74,8 @@ typedef struct Job {
|
|||
|
||||
/**
|
||||
* Set to false by the job while the coroutine has yielded and may be
|
||||
* re-entered by block_job_enter(). There may still be I/O or event loop
|
||||
* activity pending. Accessed under block_job_mutex (in blockjob.c).
|
||||
* re-entered by job_enter(). There may still be I/O or event loop activity
|
||||
* pending. Accessed under block_job_mutex (in blockjob.c).
|
||||
*/
|
||||
bool busy;
|
||||
|
||||
|
@ -114,7 +114,7 @@ typedef struct Job {
|
|||
/** True if this job should automatically dismiss itself */
|
||||
bool auto_dismiss;
|
||||
|
||||
/** ret code passed to block_job_completed. */
|
||||
/** ret code passed to job_completed. */
|
||||
int ret;
|
||||
|
||||
/** The completion function that will be called when the job completes. */
|
||||
|
@ -266,8 +266,8 @@ void job_txn_unref(JobTxn *txn);
|
|||
* @job: Job to add to the transaction
|
||||
*
|
||||
* Add @job to the transaction. The @job must not already be in a transaction.
|
||||
* The caller must call either job_txn_unref() or block_job_completed() to
|
||||
* release the reference that is automatically grabbed here.
|
||||
* The caller must call either job_txn_unref() or job_completed() to release
|
||||
* the reference that is automatically grabbed here.
|
||||
*
|
||||
* If @txn is NULL, the function does nothing.
|
||||
*/
|
||||
|
@ -416,8 +416,59 @@ int job_apply_verb(Job *job, JobVerb verb, Error **errp);
|
|||
/** The @job could not be started, free it. */
|
||||
void job_early_fail(Job *job);
|
||||
|
||||
/**
|
||||
* @job: The job being completed.
|
||||
* @ret: The status code.
|
||||
*
|
||||
* Marks @job as completed. If @ret is non-zero, the job transaction it is part
|
||||
* of is aborted. If @ret is zero, the job moves into the WAITING state. If it
|
||||
* is the last job to complete in its transaction, all jobs in the transaction
|
||||
* move from WAITING to PENDING.
|
||||
*/
|
||||
void job_completed(Job *job, int ret);
|
||||
|
||||
/** Asynchronously complete the specified @job. */
|
||||
void job_complete(Job *job, Error **errp);;
|
||||
void job_complete(Job *job, Error **errp);
|
||||
|
||||
/**
|
||||
* Asynchronously cancel the specified @job. If @force is true, the job should
|
||||
* be cancelled immediately without waiting for a consistent state.
|
||||
*/
|
||||
void job_cancel(Job *job, bool force);
|
||||
|
||||
/**
|
||||
* Cancels the specified job like job_cancel(), but may refuse to do so if the
|
||||
* operation isn't meaningful in the current state of the job.
|
||||
*/
|
||||
void job_user_cancel(Job *job, bool force, Error **errp);
|
||||
|
||||
/**
|
||||
* Synchronously cancel the @job. The completion callback is called
|
||||
* before the function returns. The job may actually complete
|
||||
* instead of canceling itself; the circumstances under which this
|
||||
* happens depend on the kind of job that is active.
|
||||
*
|
||||
* Returns the return value from the job if the job actually completed
|
||||
* during the call, or -ECANCELED if it was canceled.
|
||||
*/
|
||||
int job_cancel_sync(Job *job);
|
||||
|
||||
/** Synchronously cancels all jobs using job_cancel_sync(). */
|
||||
void job_cancel_sync_all(void);
|
||||
|
||||
/**
|
||||
* @job: The job to be completed.
|
||||
* @errp: Error object which may be set by job_complete(); this is not
|
||||
* necessarily set on every error, the job return value has to be
|
||||
* checked as well.
|
||||
*
|
||||
* Synchronously complete the job. The completion callback is called before the
|
||||
* function returns, unless it is NULL (which is permissible when using this
|
||||
* function).
|
||||
*
|
||||
* Returns the return value from the job.
|
||||
*/
|
||||
int job_complete_sync(Job *job, Error **errp);
|
||||
|
||||
/**
|
||||
* For a @job that has finished its work and is pending awaiting explicit
|
||||
|
@ -459,11 +510,6 @@ int job_finish_sync(Job *job, void (*finish)(Job *, Error **errp), Error **errp)
|
|||
void job_state_transition(Job *job, JobStatus s1);
|
||||
void coroutine_fn job_do_yield(Job *job, uint64_t ns);
|
||||
bool job_should_pause(Job *job);
|
||||
bool job_started(Job *job);
|
||||
void job_do_dismiss(Job *job);
|
||||
void job_update_rc(Job *job);
|
||||
void job_cancel_async(Job *job, bool force);
|
||||
void job_completed_txn_abort(Job *job);
|
||||
void job_completed_txn_success(Job *job);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue