qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <famz@redhat.com>,
	qemu-devel@nongnu.org, dietmar@proxmox.com, imain@redhat.com,
	xiawenc@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH v3 2/8] block: add basic backup support to block driver
Date: Mon, 20 May 2013 13:30:37 +0200	[thread overview]
Message-ID: <519A095D.4070808@redhat.com> (raw)
In-Reply-To: <1368628476-19622-3-git-send-email-stefanha@redhat.com>

Il 15/05/2013 16:34, Stefan Hajnoczi ha scritto:
> +    wait_for_overlapping_requests(job, start, end);
> +    cow_request_begin(&cow_request, job, start, end);
> +
> +    for (; start < end; start++) {
> +        if (hbitmap_get(job->bitmap, start)) {
> +            DPRINTF("brdv_co_backup_cow skip C%" PRId64 "\n", start);
> +            continue; /* already copied */
> +        }
> +
> +        /* immediately set bitmap (avoid coroutine race) */
> +        hbitmap_set(job->bitmap, start, 1);
> +

HBitmap already has code for finding the next set bit, but you're not
using it.

If you reverse the direction of the bitmap, you can use an HBitmapIter here:

> 
> +    start = 0;
> +    end = DIV_ROUND_UP(bdrv_getlength(bs) / BDRV_SECTOR_SIZE,
> +                       BACKUP_BLOCKS_PER_CLUSTER);
> +
> +    job->bitmap = hbitmap_alloc(end, 0);
> +
> +    before_write = bdrv_add_before_write_cb(bs, backup_before_write);
> +
> +    DPRINTF("backup_run start %s %" PRId64 " %" PRId64 "\n",
> +            bdrv_get_device_name(bs), start, end);
> +
> +    for (; start < end; start++) {

... instead of iterating through each item manually.

Paolo

> +        if (block_job_is_cancelled(&job->common)) {
> +            break;
> +        }
> +
> +        /* we need to yield so that qemu_aio_flush() returns.
> +         * (without, VM does not reboot)
> +         */
> +        if (job->common.speed) {
> +            uint64_t delay_ns = ratelimit_calculate_delay(
> +                &job->limit, job->sectors_read);
> +            job->sectors_read = 0;
> +            block_job_sleep_ns(&job->common, rt_clock, delay_ns);
> +        } else {
> +            block_job_sleep_ns(&job->common, rt_clock, 0);
> +        }
> +
> +        if (block_job_is_cancelled(&job->common)) {
> +            break;
> +        }
> +
> +        DPRINTF("backup_run loop C%" PRId64 "\n", start);
> +
> +        ret = backup_do_cow(bs, start * BACKUP_BLOCKS_PER_CLUSTER, 1);
> +        if (ret < 0) {
> +            break;
> +        }
> +
> +        /* Publish progress */
> +        job->common.offset += BACKUP_CLUSTER_SIZE;
> +    }

  parent reply	other threads:[~2013-05-20 11:30 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-15 14:34 [Qemu-devel] [PATCH v3 0/8] block: drive-backup live backup command Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 1/8] block: add bdrv_add_before_write_cb() Stefan Hajnoczi
2013-05-15 14:42   ` Paolo Bonzini
2013-05-16  2:42     ` Wenchao Xia
2013-05-16  8:11     ` Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 2/8] block: add basic backup support to block driver Stefan Hajnoczi
2013-05-16  3:27   ` Wenchao Xia
2013-05-16  7:30     ` Stefan Hajnoczi
2013-05-20 11:30   ` Paolo Bonzini [this message]
2013-05-21 13:34     ` Stefan Hajnoczi
2013-05-21 15:11       ` Paolo Bonzini
2013-05-21 15:25         ` Dietmar Maurer
2013-05-21 15:35           ` Paolo Bonzini
2013-05-21 15:54             ` Dietmar Maurer
2013-05-21 16:03               ` Paolo Bonzini
2013-05-21 16:15                 ` Dietmar Maurer
2013-05-21 16:26         ` Dietmar Maurer
2013-05-21 16:46           ` Paolo Bonzini
2013-05-22 13:37             ` Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 3/8] block: add drive-backup QMP command Stefan Hajnoczi
2013-05-15 19:04   ` Eric Blake
2013-05-16  7:31     ` Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 4/8] qemu-iotests: add 055 drive-backup test case Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 5/8] blockdev: rename BlkTransactionStates to singular Stefan Hajnoczi
2013-05-15 19:09   ` Eric Blake
2013-05-16  2:28   ` Wenchao Xia
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 6/8] blockdev: add DriveBackup transaction Stefan Hajnoczi
2013-05-15 19:13   ` Eric Blake
2013-05-16  7:36     ` Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 7/8] blockdev: add Abort transaction Stefan Hajnoczi
2013-05-15 19:01   ` Eric Blake
2013-05-16  2:26     ` Wenchao Xia
2013-05-16  7:37     ` Stefan Hajnoczi
2013-05-15 14:34 ` [Qemu-devel] [PATCH v3 8/8] qemu-iotests: test 'drive-backup' transaction in 055 Stefan Hajnoczi
2013-05-16  6:16 ` [Qemu-devel] [PATCH v3 0/8] block: drive-backup live backup command Wenchao Xia
2013-05-16  7:47   ` Stefan Hajnoczi
2013-05-17  6:58     ` Wenchao Xia
2013-05-17  9:14       ` Stefan Hajnoczi
2013-05-21  3:25         ` Wenchao Xia
2013-05-21  7:34           ` Stefan Hajnoczi
2013-05-17 10:17     ` Paolo Bonzini
2013-05-20  6:24       ` Stefan Hajnoczi
2013-05-20  7:23         ` Paolo Bonzini
2013-05-21  7:31           ` Stefan Hajnoczi
2013-05-21  8:30             ` Paolo Bonzini
2013-05-21 10:34               ` Stefan Hajnoczi
2013-05-21 10:36                 ` Paolo Bonzini
2013-05-21 10:58                   ` Dietmar Maurer
2013-05-22 13:43                     ` Stefan Hajnoczi
2013-05-22 15:10                       ` Dietmar Maurer
2013-05-22 15:34                       ` Dietmar Maurer
2013-05-23  8:04                         ` Stefan Hajnoczi
2013-05-23  8:11                           ` Dietmar Maurer
2013-05-24  8:38                             ` Stefan Hajnoczi
2013-05-24  9:53                               ` Dietmar Maurer

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=519A095D.4070808@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=dietmar@proxmox.com \
    --cc=famz@redhat.com \
    --cc=imain@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=xiawenc@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).