All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ting Wang <kathy.wangting@huawei.com>
To: jcody@redhat.com, kwolf@redhat.com
Cc: famz@redhat.com, qemu-devel@nongnu.org, wu.wubin@huawei.com
Subject: Re: [Qemu-devel] [PATCH] blockjob: add block_job_release function
Date: Mon, 6 Jul 2015 10:32:44 +0800	[thread overview]
Message-ID: <5599E8CC.8000001@huawei.com> (raw)
In-Reply-To: <1435311455-56048-1-git-send-email-kathy.wangting@huawei.com>

Ping?

Regards,
Ting

On 2015-6-26 17:37, Ting Wang wrote:
> There is job resource leak in function mirror_start_job, 
> although bdrv_create_dirty_bitmap is unlikely failed.
> Add block_job_release for each release when needed.
>
> Signed-off-by: Ting Wang <kathy.wangting@huawei.com>
> ---
>  block/mirror.c           |  2 ++
>  blockjob.c               | 20 ++++++++++++--------
>  include/block/blockjob.h |  8 ++++++++
>  3 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/block/mirror.c b/block/mirror.c
> index 048e452..05034a8 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -689,6 +689,8 @@ static void mirror_start_job(BlockDriverState *bs, BlockDriverState *target,
>  
>      s->dirty_bitmap = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
>      if (!s->dirty_bitmap) {
> +        g_free(s->replaces);
> +        block_job_release(bs);
>          return;
>      }
>      bdrv_set_enable_write_cache(s->target, true);
> diff --git a/blockjob.c b/blockjob.c
> index ec46fad..62bb906 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -66,10 +66,7 @@ void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs,
>  
>          block_job_set_speed(job, speed, &local_err);
>          if (local_err) {
> -            bs->job = NULL;
> -            bdrv_op_unblock_all(bs, job->blocker);
> -            error_free(job->blocker);
> -            g_free(job);
> +            block_job_release(bs);
>              error_propagate(errp, local_err);
>              return NULL;
>          }
> @@ -77,18 +74,25 @@ void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs,
>      return job;
>  }
>  
> -void block_job_completed(BlockJob *job, int ret)
> +void block_job_release(BlockDriverState *bs)
>  {
> -    BlockDriverState *bs = job->bs;
> +    BlockJob *job = bs->job;
>  
> -    assert(bs->job == job);
> -    job->cb(job->opaque, ret);
>      bs->job = NULL;
>      bdrv_op_unblock_all(bs, job->blocker);
>      error_free(job->blocker);
>      g_free(job);
>  }
>  
> +void block_job_completed(BlockJob *job, int ret)
> +{
> +    BlockDriverState *bs = job->bs;
> +
> +    assert(bs->job == job);
> +    job->cb(job->opaque, ret);
> +    block_job_release(bs);
> +}
> +
>  void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp)
>  {
>      Error *local_err = NULL;
> diff --git a/include/block/blockjob.h b/include/block/blockjob.h
> index 57d8ef1..dd9d5e6 100644
> --- a/include/block/blockjob.h
> +++ b/include/block/blockjob.h
> @@ -166,6 +166,14 @@ void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns);
>  void block_job_yield(BlockJob *job);
>  
>  /**
> + * block_job_release:
> + * @bs: The block device.
> + *
> + * Release job resources when an error occurred or job completed.
> + */
> +void block_job_release(BlockDriverState *bs);
> +
> +/**
>   * block_job_completed:
>   * @job: The job being completed.
>   * @ret: The status code.

  parent reply	other threads:[~2015-07-06  2:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-26  9:37 [Qemu-devel] [PATCH] blockjob: add block_job_release function Ting Wang
2015-06-26 19:48 ` John Snow
2015-07-06  2:32 ` Ting Wang [this message]
2015-07-07 11:53 ` Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5599E8CC.8000001@huawei.com \
    --to=kathy.wangting@huawei.com \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wu.wubin@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.