|
@@ -306,18 +306,23 @@ int64_t block_job_ratelimit_get_delay(BlockJob *job, uint64_t n)
|
|
BlockJobInfo *block_job_query(BlockJob *job, Error **errp)
|
|
BlockJobInfo *block_job_query(BlockJob *job, Error **errp)
|
|
{
|
|
{
|
|
BlockJobInfo *info;
|
|
BlockJobInfo *info;
|
|
|
|
+ uint64_t progress_current, progress_total;
|
|
|
|
|
|
if (block_job_is_internal(job)) {
|
|
if (block_job_is_internal(job)) {
|
|
error_setg(errp, "Cannot query QEMU internal jobs");
|
|
error_setg(errp, "Cannot query QEMU internal jobs");
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ progress_get_snapshot(&job->job.progress, &progress_current,
|
|
|
|
+ &progress_total);
|
|
|
|
+
|
|
info = g_new0(BlockJobInfo, 1);
|
|
info = g_new0(BlockJobInfo, 1);
|
|
info->type = g_strdup(job_type_str(&job->job));
|
|
info->type = g_strdup(job_type_str(&job->job));
|
|
info->device = g_strdup(job->job.id);
|
|
info->device = g_strdup(job->job.id);
|
|
info->busy = qatomic_read(&job->job.busy);
|
|
info->busy = qatomic_read(&job->job.busy);
|
|
info->paused = job->job.pause_count > 0;
|
|
info->paused = job->job.pause_count > 0;
|
|
- info->offset = job->job.progress.current;
|
|
|
|
- info->len = job->job.progress.total;
|
|
|
|
|
|
+ info->offset = progress_current;
|
|
|
|
+ info->len = progress_total;
|
|
info->speed = job->speed;
|
|
info->speed = job->speed;
|
|
info->io_status = job->iostatus;
|
|
info->io_status = job->iostatus;
|
|
info->ready = job_is_ready(&job->job),
|
|
info->ready = job_is_ready(&job->job),
|
|
@@ -344,15 +349,19 @@ static void block_job_iostatus_set_err(BlockJob *job, int error)
|
|
static void block_job_event_cancelled(Notifier *n, void *opaque)
|
|
static void block_job_event_cancelled(Notifier *n, void *opaque)
|
|
{
|
|
{
|
|
BlockJob *job = opaque;
|
|
BlockJob *job = opaque;
|
|
|
|
+ uint64_t progress_current, progress_total;
|
|
|
|
|
|
if (block_job_is_internal(job)) {
|
|
if (block_job_is_internal(job)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ progress_get_snapshot(&job->job.progress, &progress_current,
|
|
|
|
+ &progress_total);
|
|
|
|
+
|
|
qapi_event_send_block_job_cancelled(job_type(&job->job),
|
|
qapi_event_send_block_job_cancelled(job_type(&job->job),
|
|
job->job.id,
|
|
job->job.id,
|
|
- job->job.progress.total,
|
|
|
|
- job->job.progress.current,
|
|
|
|
|
|
+ progress_total,
|
|
|
|
+ progress_current,
|
|
job->speed);
|
|
job->speed);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -360,6 +369,7 @@ static void block_job_event_completed(Notifier *n, void *opaque)
|
|
{
|
|
{
|
|
BlockJob *job = opaque;
|
|
BlockJob *job = opaque;
|
|
const char *msg = NULL;
|
|
const char *msg = NULL;
|
|
|
|
+ uint64_t progress_current, progress_total;
|
|
|
|
|
|
if (block_job_is_internal(job)) {
|
|
if (block_job_is_internal(job)) {
|
|
return;
|
|
return;
|
|
@@ -369,10 +379,13 @@ static void block_job_event_completed(Notifier *n, void *opaque)
|
|
msg = error_get_pretty(job->job.err);
|
|
msg = error_get_pretty(job->job.err);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ progress_get_snapshot(&job->job.progress, &progress_current,
|
|
|
|
+ &progress_total);
|
|
|
|
+
|
|
qapi_event_send_block_job_completed(job_type(&job->job),
|
|
qapi_event_send_block_job_completed(job_type(&job->job),
|
|
job->job.id,
|
|
job->job.id,
|
|
- job->job.progress.total,
|
|
|
|
- job->job.progress.current,
|
|
|
|
|
|
+ progress_total,
|
|
|
|
+ progress_current,
|
|
job->speed,
|
|
job->speed,
|
|
!!msg,
|
|
!!msg,
|
|
msg);
|
|
msg);
|
|
@@ -393,15 +406,19 @@ static void block_job_event_pending(Notifier *n, void *opaque)
|
|
static void block_job_event_ready(Notifier *n, void *opaque)
|
|
static void block_job_event_ready(Notifier *n, void *opaque)
|
|
{
|
|
{
|
|
BlockJob *job = opaque;
|
|
BlockJob *job = opaque;
|
|
|
|
+ uint64_t progress_current, progress_total;
|
|
|
|
|
|
if (block_job_is_internal(job)) {
|
|
if (block_job_is_internal(job)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ progress_get_snapshot(&job->job.progress, &progress_current,
|
|
|
|
+ &progress_total);
|
|
|
|
+
|
|
qapi_event_send_block_job_ready(job_type(&job->job),
|
|
qapi_event_send_block_job_ready(job_type(&job->job),
|
|
job->job.id,
|
|
job->job.id,
|
|
- job->job.progress.total,
|
|
|
|
- job->job.progress.current,
|
|
|
|
|
|
+ progress_total,
|
|
|
|
+ progress_current,
|
|
job->speed);
|
|
job->speed);
|
|
}
|
|
}
|
|
|
|
|