[{"id":1774818,"web_url":"http://patchwork.ozlabs.org/comment/1774818/","msgid":"<042b7c75-96a8-a695-5702-289eb68b5f54@virtuozzo.com>","list_archive_url":null,"date":"2017-09-25T15:49:35","subject":"Re: [Qemu-devel] [PATCH 12/18] block/dirty-bitmap: Add\n\tbdrv_dirty_iter_next_area","submitter":{"id":66592,"url":"http://patchwork.ozlabs.org/api/people/66592/","name":"Vladimir Sementsov-Ogievskiy","email":"vsementsov@virtuozzo.com"},"content":"I have a patch on list, which adds hbitmap_next_zero function, it may help\nhttps://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg00809.html\n\n13.09.2017 21:19, Max Reitz wrote:\n> This new function allows to look for a consecutively dirty area in a\n> dirty bitmap.\n>\n> Signed-off-by: Max Reitz <mreitz@redhat.com>\n> ---\n>   include/block/dirty-bitmap.h |  2 ++\n>   block/dirty-bitmap.c         | 52 ++++++++++++++++++++++++++++++++++++++++++++\n>   2 files changed, 54 insertions(+)\n>\n> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h\n> index a79a58d2c3..7654748700 100644\n> --- a/include/block/dirty-bitmap.h\n> +++ b/include/block/dirty-bitmap.h\n> @@ -90,6 +90,8 @@ void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,\n>   void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,\n>                                       int64_t cur_sector, int64_t nr_sectors);\n>   int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);\n> +bool bdrv_dirty_iter_next_area(BdrvDirtyBitmapIter *iter, uint64_t max_offset,\n> +                               uint64_t *offset, int *bytes);\n>   void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t sector_num);\n>   int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);\n>   int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap);\n> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c\n> index aee57cf8c8..81b2f78016 100644\n> --- a/block/dirty-bitmap.c\n> +++ b/block/dirty-bitmap.c\n> @@ -550,6 +550,58 @@ int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter)\n>       return hbitmap_iter_next(&iter->hbi, true);\n>   }\n>   \n> +/**\n> + * Return the next consecutively dirty area in the dirty bitmap\n> + * belonging to the given iterator @iter.\n> + *\n> + * @max_offset: Maximum value that may be returned for\n> + *              *offset + *bytes\n> + * @offset:     Will contain the start offset of the next dirty area\n> + * @bytes:      Will contain the length of the next dirty area\n> + *\n> + * Returns: True if a dirty area could be found before max_offset\n> + *          (which means that *offset and *bytes then contain valid\n> + *          values), false otherwise.\n> + */\n> +bool bdrv_dirty_iter_next_area(BdrvDirtyBitmapIter *iter, uint64_t max_offset,\n> +                               uint64_t *offset, int *bytes)\n> +{\n> +    uint32_t granularity = bdrv_dirty_bitmap_granularity(iter->bitmap);\n> +    uint64_t gran_max_offset;\n> +    int sector_gran = granularity >> BDRV_SECTOR_BITS;\n> +    int64_t ret;\n> +    int size;\n> +\n> +    if (DIV_ROUND_UP(max_offset, BDRV_SECTOR_SIZE) == iter->bitmap->size) {\n> +        /* If max_offset points to the image end, round it up by the\n> +         * bitmap granularity */\n> +        gran_max_offset = ROUND_UP(max_offset, granularity);\n> +    } else {\n> +        gran_max_offset = max_offset;\n> +    }\n> +\n> +    ret = hbitmap_iter_next(&iter->hbi, false);\n> +    if (ret < 0 || (ret << BDRV_SECTOR_BITS) + granularity > gran_max_offset) {\n> +        return false;\n> +    }\n> +\n> +    *offset = ret << BDRV_SECTOR_BITS;\n> +    size = 0;\n> +\n> +    assert(granularity <= INT_MAX);\n> +\n> +    do {\n> +        /* Advance iterator */\n> +        ret = hbitmap_iter_next(&iter->hbi, true);\n> +        size += granularity;\n> +    } while ((ret << BDRV_SECTOR_BITS) + granularity <= gran_max_offset &&\n> +             hbitmap_iter_next(&iter->hbi, false) == ret + sector_gran &&\n> +             size <= INT_MAX - granularity);\n> +\n> +    *bytes = MIN(size, max_offset - *offset);\n> +    return true;\n> +}\n> +\n>   /* Called within bdrv_dirty_bitmap_lock..unlock */\n>   void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,\n>                                     int64_t cur_sector, int64_t nr_sectors)","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y17p62XpFz9sP1\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 26 Sep 2017 01:50:22 +1000 (AEST)","from localhost ([::1]:43128 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dwVeG-0007xE-H7\n\tfor incoming@patchwork.ozlabs.org; Mon, 25 Sep 2017 11:50:20 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:43823)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <vsementsov@virtuozzo.com>) id 1dwVdj-0007w3-Aw\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 11:49:48 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <vsementsov@virtuozzo.com>) id 1dwVdg-0000wh-U6\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 11:49:47 -0400","from mailhub.sw.ru ([195.214.232.25]:33093 helo=relay.sw.ru)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <vsementsov@virtuozzo.com>)\n\tid 1dwVdg-0000vd-Id\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 11:49:44 -0400","from [172.16.24.243] (msk-vpn.virtuozzo.com [195.214.232.6])\n\tby relay.sw.ru (8.13.4/8.13.4) with ESMTP id v8PFnZHn008021;\n\tMon, 25 Sep 2017 18:49:35 +0300 (MSK)"],"To":"Max Reitz <mreitz@redhat.com>, qemu-block@nongnu.org","References":"<20170913181910.29688-1-mreitz@redhat.com>\n\t<20170913181910.29688-13-mreitz@redhat.com>","From":"Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>","Message-ID":"<042b7c75-96a8-a695-5702-289eb68b5f54@virtuozzo.com>","Date":"Mon, 25 Sep 2017 18:49:35 +0300","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<20170913181910.29688-13-mreitz@redhat.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","X-detected-operating-system":"by eggs.gnu.org: OpenBSD 3.x [fuzzy]","X-Received-From":"195.214.232.25","Subject":"Re: [Qemu-devel] [PATCH 12/18] block/dirty-bitmap: Add\n\tbdrv_dirty_iter_next_area","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Kevin Wolf <kwolf@redhat.com>, John Snow <jsnow@redhat.com>,\n\tFam Zheng <famz@redhat.com>, qemu-devel@nongnu.org,\n\tStefan Hajnoczi <stefanha@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1774968,"web_url":"http://patchwork.ozlabs.org/comment/1774968/","msgid":"<abdf37da-0c63-c05a-74eb-764aebc14e53@redhat.com>","list_archive_url":null,"date":"2017-09-25T20:43:28","subject":"Re: [Qemu-devel] [PATCH 12/18] block/dirty-bitmap: Add\n\tbdrv_dirty_iter_next_area","submitter":{"id":36836,"url":"http://patchwork.ozlabs.org/api/people/36836/","name":"Max Reitz","email":"mreitz@redhat.com"},"content":"On 2017-09-25 17:49, Vladimir Sementsov-Ogievskiy wrote:\n> I have a patch on list, which adds hbitmap_next_zero function, it may help\n> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg00809.html\n\nHmmm.  Sounds good, but (1) I would need to directly access the bitmap\ninstead of the iterator, and (2) I would still need to clear the whole\nin the iterator...\n\nIt does sound tempting because I could drop the previous patch, then\n(and thus wouldn't have to worry about concurrent resetting), but I\ndon't think the whole implementation would be simpler.\n\nI'll think about it, but thanks for pointing it out in any case!\n\nMax","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=mreitz@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y1GK75hF5z9t2Q\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 26 Sep 2017 06:44:11 +1000 (AEST)","from localhost ([::1]:44207 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dwaEb-000684-Vs\n\tfor incoming@patchwork.ozlabs.org; Mon, 25 Sep 2017 16:44:10 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:60961)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <mreitz@redhat.com>) id 1dwaEE-00065B-D4\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 16:43:47 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <mreitz@redhat.com>) id 1dwaED-0008DC-Fl\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 16:43:46 -0400","from mx1.redhat.com ([209.132.183.28]:51408)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <mreitz@redhat.com>)\n\tid 1dwaE7-0008Bo-W0; Mon, 25 Sep 2017 16:43:40 -0400","from smtp.corp.redhat.com\n\t(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id EC8FC806BE;\n\tMon, 25 Sep 2017 20:43:38 +0000 (UTC)","from dresden.str.redhat.com (ovpn-204-55.brq.redhat.com\n\t[10.40.204.55])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id E26716C519;\n\tMon, 25 Sep 2017 20:43:30 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com EC8FC806BE","To":"Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,\n\tqemu-block@nongnu.org","References":"<20170913181910.29688-1-mreitz@redhat.com>\n\t<20170913181910.29688-13-mreitz@redhat.com>\n\t<042b7c75-96a8-a695-5702-289eb68b5f54@virtuozzo.com>","From":"Max Reitz <mreitz@redhat.com>","Message-ID":"<abdf37da-0c63-c05a-74eb-764aebc14e53@redhat.com>","Date":"Mon, 25 Sep 2017 22:43:28 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<042b7c75-96a8-a695-5702-289eb68b5f54@virtuozzo.com>","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\";\n\tboundary=\"fwtk2FpUeEHbhMtcf5PLDoXeqHdKX3fRL\"","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.14","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.26]);\n\tMon, 25 Sep 2017 20:43:39 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","X-Content-Filtered-By":"Mailman/MimeDel 2.1.21","Subject":"Re: [Qemu-devel] [PATCH 12/18] block/dirty-bitmap: Add\n\tbdrv_dirty_iter_next_area","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Kevin Wolf <kwolf@redhat.com>, John Snow <jsnow@redhat.com>,\n\tFam Zheng <famz@redhat.com>, qemu-devel@nongnu.org,\n\tStefan Hajnoczi <stefanha@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1778328,"web_url":"http://patchwork.ozlabs.org/comment/1778328/","msgid":"<b426238f-30d4-8617-6c86-3c312e4f6fd2@virtuozzo.com>","list_archive_url":null,"date":"2017-10-02T13:32:00","subject":"Re: [Qemu-devel] [PATCH 12/18] block/dirty-bitmap: Add\n\tbdrv_dirty_iter_next_area","submitter":{"id":66592,"url":"http://patchwork.ozlabs.org/api/people/66592/","name":"Vladimir Sementsov-Ogievskiy","email":"vsementsov@virtuozzo.com"},"content":"25.09.2017 18:49, Vladimir Sementsov-Ogievskiy wrote:\r\n> I have a patch on list, which adds hbitmap_next_zero function, it may \r\n> help\r\n> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg00809.html\r\n\r\nthere is a mistake in this hbitmap_next_zero, I'll send today corrected \r\nversion as part of small backup-related series.\r\n\r\n\r\n>\r\n> 13.09.2017 21:19, Max Reitz wrote:\r\n>> This new function allows to look for a consecutively dirty area in a\r\n>> dirty bitmap.\r\n>>\r\n>> Signed-off-by: Max Reitz <mreitz@redhat.com>\r\n>> ---\r\n>>   include/block/dirty-bitmap.h |  2 ++\r\n>>   block/dirty-bitmap.c         | 52 \r\n>> ++++++++++++++++++++++++++++++++++++++++++++\r\n>>   2 files changed, 54 insertions(+)\r\n>>\r\n>> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h\r\n>> index a79a58d2c3..7654748700 100644\r\n>> --- a/include/block/dirty-bitmap.h\r\n>> +++ b/include/block/dirty-bitmap.h\r\n>> @@ -90,6 +90,8 @@ void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap \r\n>> *bitmap,\r\n>>   void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,\r\n>>                                       int64_t cur_sector, int64_t \r\n>> nr_sectors);\r\n>>   int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);\r\n>> +bool bdrv_dirty_iter_next_area(BdrvDirtyBitmapIter *iter, uint64_t \r\n>> max_offset,\r\n>> +                               uint64_t *offset, int *bytes);\r\n>>   void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t \r\n>> sector_num);\r\n>>   int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);\r\n>>   int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap);\r\n>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c\r\n>> index aee57cf8c8..81b2f78016 100644\r\n>> --- a/block/dirty-bitmap.c\r\n>> +++ b/block/dirty-bitmap.c\r\n>> @@ -550,6 +550,58 @@ int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter \r\n>> *iter)\r\n>>       return hbitmap_iter_next(&iter->hbi, true);\r\n>>   }\r\n>>   +/**\r\n>> + * Return the next consecutively dirty area in the dirty bitmap\r\n>> + * belonging to the given iterator @iter.\r\n>> + *\r\n>> + * @max_offset: Maximum value that may be returned for\r\n>> + *              *offset + *bytes\r\n>> + * @offset:     Will contain the start offset of the next dirty area\r\n>> + * @bytes:      Will contain the length of the next dirty area\r\n>> + *\r\n>> + * Returns: True if a dirty area could be found before max_offset\r\n>> + *          (which means that *offset and *bytes then contain valid\r\n>> + *          values), false otherwise.\r\n>> + */\r\n>> +bool bdrv_dirty_iter_next_area(BdrvDirtyBitmapIter *iter, uint64_t \r\n>> max_offset,\r\n>> +                               uint64_t *offset, int *bytes)\r\n>> +{\r\n>> +    uint32_t granularity = bdrv_dirty_bitmap_granularity(iter->bitmap);\r\n>> +    uint64_t gran_max_offset;\r\n>> +    int sector_gran = granularity >> BDRV_SECTOR_BITS;\r\n>> +    int64_t ret;\r\n>> +    int size;\r\n>> +\r\n>> +    if (DIV_ROUND_UP(max_offset, BDRV_SECTOR_SIZE) == \r\n>> iter->bitmap->size) {\r\n>> +        /* If max_offset points to the image end, round it up by the\r\n>> +         * bitmap granularity */\r\n>> +        gran_max_offset = ROUND_UP(max_offset, granularity);\r\n>> +    } else {\r\n>> +        gran_max_offset = max_offset;\r\n>> +    }\r\n>> +\r\n>> +    ret = hbitmap_iter_next(&iter->hbi, false);\r\n>> +    if (ret < 0 || (ret << BDRV_SECTOR_BITS) + granularity > \r\n>> gran_max_offset) {\r\n>> +        return false;\r\n>> +    }\r\n>> +\r\n>> +    *offset = ret << BDRV_SECTOR_BITS;\r\n>> +    size = 0;\r\n>> +\r\n>> +    assert(granularity <= INT_MAX);\r\n>> +\r\n>> +    do {\r\n>> +        /* Advance iterator */\r\n>> +        ret = hbitmap_iter_next(&iter->hbi, true);\r\n>> +        size += granularity;\r\n>> +    } while ((ret << BDRV_SECTOR_BITS) + granularity <= \r\n>> gran_max_offset &&\r\n>> +             hbitmap_iter_next(&iter->hbi, false) == ret + \r\n>> sector_gran &&\r\n>> +             size <= INT_MAX - granularity);\r\n>> +\r\n>> +    *bytes = MIN(size, max_offset - *offset);\r\n>> +    return true;\r\n>> +}\r\n>> +\r\n>>   /* Called within bdrv_dirty_bitmap_lock..unlock */\r\n>>   void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,\r\n>>                                     int64_t cur_sector, int64_t \r\n>> nr_sectors)\r\n>\r\n>\r\n\r\n\r\n-- \r\nBest regards,\r\nVladimir","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@gnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y5NQG3dZ1z9t50\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue,  3 Oct 2017 00:32:53 +1100 (AEDT)","from localhost ([::1]:52316 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@gnu.org>)\n\tid 1dz0q2-0006Dt-NQ\n\tfor incoming@patchwork.ozlabs.org; Mon, 02 Oct 2017 09:32:50 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:58062)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <vsementsov@virtuozzo.com>) id 1dz0pa-0006AW-UD\n\tfor qemu-devel@nongnu.org; Mon, 02 Oct 2017 09:32:27 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <vsementsov@virtuozzo.com>) id 1dz0pZ-0002U0-HQ\n\tfor qemu-devel@nongnu.org; Mon, 02 Oct 2017 09:32:22 -0400","from mailhub.sw.ru ([195.214.232.25]:26577 helo=relay.sw.ru)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <vsementsov@virtuozzo.com>)\n\tid 1dz0pZ-0002S5-0R\n\tfor qemu-devel@nongnu.org; Mon, 02 Oct 2017 09:32:21 -0400","from [172.16.24.243] (msk-vpn.virtuozzo.com [195.214.232.6])\n\tby relay.sw.ru (8.13.4/8.13.4) with ESMTP id v92DVxcN007833;\n\tMon, 2 Oct 2017 16:32:00 +0300 (MSK)"],"From":"Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>","To":"Max Reitz <mreitz@redhat.com>, qemu-block@nongnu.org","References":"<20170913181910.29688-1-mreitz@redhat.com>\n\t<20170913181910.29688-13-mreitz@redhat.com>\n\t<042b7c75-96a8-a695-5702-289eb68b5f54@virtuozzo.com>","Message-ID":"<b426238f-30d4-8617-6c86-3c312e4f6fd2@virtuozzo.com>","Date":"Mon, 2 Oct 2017 16:32:00 +0300","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<042b7c75-96a8-a695-5702-289eb68b5f54@virtuozzo.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Language":"en-US","Content-Transfer-Encoding":"base64","X-MIME-Autoconverted":"from 8bit to base64 by relay.sw.ru id v92DVxcN007833","X-detected-operating-system":"by eggs.gnu.org: OpenBSD 3.x [fuzzy]","X-Received-From":"195.214.232.25","Subject":"Re: [Qemu-devel] [PATCH 12/18] block/dirty-bitmap: Add\n\tbdrv_dirty_iter_next_area","X-BeenThere":"qemu-devel@gnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.gnu.org>","List-Unsubscribe":"<https://lists.gnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@gnu.org?subject=unsubscribe>","List-Archive":"<http://lists.gnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@gnu.org>","List-Help":"<mailto:qemu-devel-request@gnu.org?subject=help>","List-Subscribe":"<https://lists.gnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@gnu.org?subject=subscribe>","Cc":"Kevin Wolf <kwolf@redhat.com>, John Snow <jsnow@redhat.com>,\n\tFam Zheng <famz@redhat.com>, qemu-devel@nongnu.org,\n\tStefan Hajnoczi <stefanha@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@gnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@gnu.org>"}}]