[{"id":1769853,"web_url":"http://patchwork.ozlabs.org/comment/1769853/","msgid":"<20170918034825.GC15551@lemon.lan>","list_archive_url":null,"date":"2017-09-18T03:48:25","subject":"Re: [Qemu-devel] [PATCH 04/18] block/mirror: Pull out\n\tmirror_perform()","submitter":{"id":24872,"url":"http://patchwork.ozlabs.org/api/people/24872/","name":"Fam Zheng","email":"famz@redhat.com"},"content":"On Wed, 09/13 20:18, Max Reitz wrote:\n> When converting mirror's I/O to coroutines, we are going to need a point\n> where these coroutines are created.  mirror_perform() is going to be\n> that point.\n> \n> Signed-off-by: Max Reitz <mreitz@redhat.com>\n> ---\n>  block/mirror.c | 53 ++++++++++++++++++++++++++++++-----------------------\n>  1 file changed, 30 insertions(+), 23 deletions(-)\n> \n> diff --git a/block/mirror.c b/block/mirror.c\n> index 6531652d73..4664b0516f 100644\n> --- a/block/mirror.c\n> +++ b/block/mirror.c\n> @@ -82,6 +82,12 @@ typedef struct MirrorOp {\n>      uint64_t bytes;\n>  } MirrorOp;\n>  \n> +typedef enum MirrorMethod {\n> +    MIRROR_METHOD_COPY,\n> +    MIRROR_METHOD_ZERO,\n> +    MIRROR_METHOD_DISCARD,\n> +} MirrorMethod;\n> +\n>  static BlockErrorAction mirror_error_action(MirrorBlockJob *s, bool read,\n>                                              int error)\n>  {\n> @@ -324,6 +330,22 @@ static void mirror_do_zero_or_discard(MirrorBlockJob *s,\n>      }\n>  }\n>  \n> +static unsigned mirror_perform(MirrorBlockJob *s, int64_t offset,\n> +                               unsigned bytes, MirrorMethod mirror_method)\n> +{\n> +    switch (mirror_method) {\n> +    case MIRROR_METHOD_COPY:\n> +        return mirror_do_read(s, offset, bytes);\n> +    case MIRROR_METHOD_ZERO:\n> +    case MIRROR_METHOD_DISCARD:\n> +        mirror_do_zero_or_discard(s, offset, bytes,\n> +                                  mirror_method == MIRROR_METHOD_DISCARD);\n> +        return bytes;\n> +    default:\n> +        abort();\n> +    }\n> +}\n> +\n>  static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)\n>  {\n>      BlockDriverState *source = s->source;\n> @@ -395,11 +417,7 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)\n>          unsigned int io_bytes;\n>          int64_t io_bytes_acct;\n>          BlockDriverState *file;\n> -        enum MirrorMethod {\n> -            MIRROR_METHOD_COPY,\n> -            MIRROR_METHOD_ZERO,\n> -            MIRROR_METHOD_DISCARD\n> -        } mirror_method = MIRROR_METHOD_COPY;\n> +        MirrorMethod mirror_method = MIRROR_METHOD_COPY;\n>  \n>          assert(!(offset % s->granularity));\n>          ret = bdrv_get_block_status_above(source, NULL,\n> @@ -439,22 +457,11 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)\n>          }\n>  \n>          io_bytes = mirror_clip_bytes(s, offset, io_bytes);\n> -        switch (mirror_method) {\n> -        case MIRROR_METHOD_COPY:\n> -            io_bytes = io_bytes_acct = mirror_do_read(s, offset, io_bytes);\n> -            break;\n> -        case MIRROR_METHOD_ZERO:\n> -        case MIRROR_METHOD_DISCARD:\n> -            mirror_do_zero_or_discard(s, offset, io_bytes,\n> -                                      mirror_method == MIRROR_METHOD_DISCARD);\n> -            if (write_zeroes_ok) {\n> -                io_bytes_acct = 0;\n> -            } else {\n> -                io_bytes_acct = io_bytes;\n> -            }\n> -            break;\n> -        default:\n> -            abort();\n> +        io_bytes = mirror_perform(s, offset, io_bytes, mirror_method);\n> +        if (mirror_method != MIRROR_METHOD_COPY && write_zeroes_ok) {\n> +            io_bytes_acct = 0;\n> +        } else {\n> +            io_bytes_acct = io_bytes;\n>          }\n>          assert(io_bytes);\n>          offset += io_bytes;\n> @@ -650,8 +657,8 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)\n>                  continue;\n>              }\n>  \n> -            mirror_do_zero_or_discard(s, sector_num * BDRV_SECTOR_SIZE,\n> -                                      nb_sectors * BDRV_SECTOR_SIZE, false);\n> +            mirror_perform(s, sector_num * BDRV_SECTOR_SIZE,\n> +                           nb_sectors * BDRV_SECTOR_SIZE, MIRROR_METHOD_ZERO);\n>              sector_num += nb_sectors;\n>          }\n>  \n> -- \n> 2.13.5\n> \n\nReviewed-by: Fam Zheng <famz@redhat.com>","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-mx04.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx04.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=famz@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 3xwX720hNgz9rxj\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 18 Sep 2017 13:48:59 +1000 (AEST)","from localhost ([::1]:34523 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 1dtn3I-00024w-Ps\n\tfor incoming@patchwork.ozlabs.org; Sun, 17 Sep 2017 23:48:56 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:50133)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dtn2x-00023q-BJ\n\tfor qemu-devel@nongnu.org; Sun, 17 Sep 2017 23:48:36 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dtn2w-0003fE-CR\n\tfor qemu-devel@nongnu.org; Sun, 17 Sep 2017 23:48:35 -0400","from mx1.redhat.com ([209.132.183.28]:36200)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <famz@redhat.com>)\n\tid 1dtn2t-0003dd-Sm; Sun, 17 Sep 2017 23:48:32 -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 DDA428553F;\n\tMon, 18 Sep 2017 03:48:30 +0000 (UTC)","from localhost (ovpn-12-141.pek2.redhat.com [10.72.12.141])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id B0F325D9CB;\n\tMon, 18 Sep 2017 03:48:26 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com DDA428553F","Date":"Mon, 18 Sep 2017 11:48:25 +0800","From":"Fam Zheng <famz@redhat.com>","To":"Max Reitz <mreitz@redhat.com>","Message-ID":"<20170918034825.GC15551@lemon.lan>","References":"<20170913181910.29688-1-mreitz@redhat.com>\n\t<20170913181910.29688-5-mreitz@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20170913181910.29688-5-mreitz@redhat.com>","User-Agent":"Mutt/1.8.3 (2017-05-23)","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.28]);\n\tMon, 18 Sep 2017 03:48:31 +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","Subject":"Re: [Qemu-devel] [PATCH 04/18] block/mirror: Pull out\n\tmirror_perform()","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\tStefan Hajnoczi <stefanha@redhat.com>, qemu-devel@nongnu.org,\n\tqemu-block@nongnu.org","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":1774582,"web_url":"http://patchwork.ozlabs.org/comment/1774582/","msgid":"<8ac33a2c-1d1a-85fd-9e0e-bcf4054b2876@virtuozzo.com>","list_archive_url":null,"date":"2017-09-25T09:38:11","subject":"Re: [Qemu-devel] [PATCH 04/18] block/mirror: Pull out\n\tmirror_perform()","submitter":{"id":66592,"url":"http://patchwork.ozlabs.org/api/people/66592/","name":"Vladimir Sementsov-Ogievskiy","email":"vsementsov@virtuozzo.com"},"content":"13.09.2017 21:18, Max Reitz wrote:\n> When converting mirror's I/O to coroutines, we are going to need a point\n> where these coroutines are created.  mirror_perform() is going to be\n> that point.\n>\n> Signed-off-by: Max Reitz <mreitz@redhat.com>\n\n\nReviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>\n\n> ---\n>   block/mirror.c | 53 ++++++++++++++++++++++++++++++-----------------------\n>   1 file changed, 30 insertions(+), 23 deletions(-)\n>\n> diff --git a/block/mirror.c b/block/mirror.c\n> index 6531652d73..4664b0516f 100644\n> --- a/block/mirror.c\n> +++ b/block/mirror.c\n> @@ -82,6 +82,12 @@ typedef struct MirrorOp {\n>       uint64_t bytes;\n>   } MirrorOp;\n>   \n> +typedef enum MirrorMethod {\n> +    MIRROR_METHOD_COPY,\n> +    MIRROR_METHOD_ZERO,\n> +    MIRROR_METHOD_DISCARD,\n> +} MirrorMethod;\n> +\n>   static BlockErrorAction mirror_error_action(MirrorBlockJob *s, bool read,\n>                                               int error)\n>   {\n> @@ -324,6 +330,22 @@ static void mirror_do_zero_or_discard(MirrorBlockJob *s,\n>       }\n>   }\n>   \n> +static unsigned mirror_perform(MirrorBlockJob *s, int64_t offset,\n> +                               unsigned bytes, MirrorMethod mirror_method)\n> +{\n> +    switch (mirror_method) {\n> +    case MIRROR_METHOD_COPY:\n> +        return mirror_do_read(s, offset, bytes);\n> +    case MIRROR_METHOD_ZERO:\n> +    case MIRROR_METHOD_DISCARD:\n> +        mirror_do_zero_or_discard(s, offset, bytes,\n> +                                  mirror_method == MIRROR_METHOD_DISCARD);\n> +        return bytes;\n> +    default:\n> +        abort();\n> +    }\n> +}\n> +\n>   static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)\n>   {\n>       BlockDriverState *source = s->source;\n> @@ -395,11 +417,7 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)\n>           unsigned int io_bytes;\n>           int64_t io_bytes_acct;\n>           BlockDriverState *file;\n> -        enum MirrorMethod {\n> -            MIRROR_METHOD_COPY,\n> -            MIRROR_METHOD_ZERO,\n> -            MIRROR_METHOD_DISCARD\n> -        } mirror_method = MIRROR_METHOD_COPY;\n> +        MirrorMethod mirror_method = MIRROR_METHOD_COPY;\n>   \n>           assert(!(offset % s->granularity));\n>           ret = bdrv_get_block_status_above(source, NULL,\n> @@ -439,22 +457,11 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)\n>           }\n>   \n>           io_bytes = mirror_clip_bytes(s, offset, io_bytes);\n> -        switch (mirror_method) {\n> -        case MIRROR_METHOD_COPY:\n> -            io_bytes = io_bytes_acct = mirror_do_read(s, offset, io_bytes);\n> -            break;\n> -        case MIRROR_METHOD_ZERO:\n> -        case MIRROR_METHOD_DISCARD:\n> -            mirror_do_zero_or_discard(s, offset, io_bytes,\n> -                                      mirror_method == MIRROR_METHOD_DISCARD);\n> -            if (write_zeroes_ok) {\n> -                io_bytes_acct = 0;\n> -            } else {\n> -                io_bytes_acct = io_bytes;\n> -            }\n> -            break;\n> -        default:\n> -            abort();\n> +        io_bytes = mirror_perform(s, offset, io_bytes, mirror_method);\n> +        if (mirror_method != MIRROR_METHOD_COPY && write_zeroes_ok) {\n> +            io_bytes_acct = 0;\n> +        } else {\n> +            io_bytes_acct = io_bytes;\n>           }\n>           assert(io_bytes);\n>           offset += io_bytes;\n> @@ -650,8 +657,8 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)\n>                   continue;\n>               }\n>   \n> -            mirror_do_zero_or_discard(s, sector_num * BDRV_SECTOR_SIZE,\n> -                                      nb_sectors * BDRV_SECTOR_SIZE, false);\n> +            mirror_perform(s, sector_num * BDRV_SECTOR_SIZE,\n> +                           nb_sectors * BDRV_SECTOR_SIZE, MIRROR_METHOD_ZERO);\n>               sector_num += nb_sectors;\n>           }\n>","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 3y0zYk2Q6Hz9t3R\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 25 Sep 2017 19:39:05 +1000 (AEST)","from localhost ([::1]:41494 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 1dwPqx-0006ZW-WB\n\tfor incoming@patchwork.ozlabs.org; Mon, 25 Sep 2017 05:39:04 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:36543)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <vsementsov@virtuozzo.com>) id 1dwPqR-0006Y8-VA\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 05:38:32 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <vsementsov@virtuozzo.com>) id 1dwPqR-0000Q7-1u\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 05:38:32 -0400","from mailhub.sw.ru ([195.214.232.25]:31637 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 1dwPqQ-0000Pj-MH\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 05:38:30 -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 v8P9cB1S000657;\n\tMon, 25 Sep 2017 12:38:12 +0300 (MSK)"],"To":"Max Reitz <mreitz@redhat.com>, qemu-block@nongnu.org","References":"<20170913181910.29688-1-mreitz@redhat.com>\n\t<20170913181910.29688-5-mreitz@redhat.com>","From":"Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>","Message-ID":"<8ac33a2c-1d1a-85fd-9e0e-bcf4054b2876@virtuozzo.com>","Date":"Mon, 25 Sep 2017 12:38:11 +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-5-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 04/18] block/mirror: Pull out\n\tmirror_perform()","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>"}}]