qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@suse.de>
To: Laurent Vivier <Laurent.Vivier@bull.net>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [patch 2/5][v2] Divide get_cluster_offset()
Date: Tue, 05 Aug 2008 17:13:56 +0200	[thread overview]
Message-ID: <48986E34.203@suse.de> (raw)
In-Reply-To: <20080729141447.315247848@bull.net>

Laurent Vivier schrieb:
> -    if (allocate == 1) {
> -        /* allocate a new cluster */
> -        cluster_offset = alloc_clusters(bs, s->cluster_size);
> -
> -        /* we must initialize the cluster content which won't be
> -           written */
> -        if ((n_end - n_start) < s->cluster_sectors) {
> -            uint64_t start_sect;
> -
> -            start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
> -            ret = copy_sectors(bs, start_sect,
> -                               cluster_offset, 0, n_start);
> -            if (ret < 0)
> -                return 0;
> -            ret = copy_sectors(bs, start_sect,
> -                               cluster_offset, n_end, s->cluster_sectors);
> -            if (ret < 0)
> -                return 0;
> -        }
> -        tmp = cpu_to_be64(cluster_offset | QCOW_OFLAG_COPIED);
> -    } else {
> +
> +    if (compressed_size) {
>          int nb_csectors;
>          cluster_offset = alloc_bytes(bs, compressed_size);
>          nb_csectors = ((cluster_offset + compressed_size - 1) >> 9) -
>              (cluster_offset >> 9);
>          cluster_offset |= QCOW_OFLAG_COMPRESSED |
>              ((uint64_t)nb_csectors << s->csize_shift);
> -        /* compressed clusters never have the copied flag */
> -        tmp = cpu_to_be64(cluster_offset);
> +
> +        /* update L2 table
> +         * compressed clusters never have the copied flag
> +         */
> +
> +        l2_table[l2_index] = cpu_to_be64(cluster_offset);
> +        if (bdrv_pwrite(s->hd,
> +                        l2_offset + l2_index * sizeof(uint64_t),
> +                        l2_table + l2_index,
> +                        sizeof(uint64_t)) != sizeof(uint64_t))
> +            return 0;
> +
> +        return cluster_offset;
>      }
> +
> +    /* allocate a new cluster */
> +
> +    cluster_offset = alloc_clusters(bs, s->cluster_size);
> +
> +    /* we must initialize the cluster content which won't be
> +       written */
> +
> +    if ((n_end - n_start) < s->cluster_sectors) {
> +        uint64_t start_sect;
> +
> +        start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
> +        ret = copy_sectors(bs, start_sect, cluster_offset, 0, n_start);
> +        if (ret < 0)
> +            return 0;
> +        ret = copy_sectors(bs, start_sect,
> +                           cluster_offset, n_end, s->cluster_sectors);
> +        if (ret < 0)
> +            return 0;
> +    }
> +
>      /* update L2 table */
> -    l2_table[l2_index] = tmp;
> +
> +    l2_table[l2_index] = cpu_to_be64(cluster_offset | QCOW_OFLAG_COPIED);
>      if (bdrv_pwrite(s->hd,
> -                    l2_offset + l2_index * sizeof(tmp), &tmp, sizeof(tmp)) != sizeof(tmp))
> +                    l2_offset + l2_index * sizeof(uint64_t),
> +                    l2_table + l2_index,
> +                    sizeof(uint64_t)) != sizeof(uint64_t))
>          return 0;
> +
>      return cluster_offset;
>  }


Why are you moving that code around? I don't think it's needed for the
get_cluster_offset/allocate_cluster_offset split. You're just
duplicating the write and return.

Otherwise, the patch looks fine and makes the whole thing much cleaner.

Kevin

  reply	other threads:[~2008-08-05 15:15 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-29 14:13 [Qemu-devel] [patch 0/5][v2] qcow2: improve I/O performance with cache=off Laurent Vivier
2008-07-29 14:13 ` [Qemu-devel] [patch 1/5][v2] Extract code from get_cluster_offset() Laurent Vivier
2008-08-05 14:15   ` Kevin Wolf
2008-08-05 14:28     ` Laurent Vivier
2008-08-05 14:34       ` Kevin Wolf
2008-08-05 14:45         ` Laurent Vivier
2008-07-29 14:13 ` [Qemu-devel] [patch 2/5][v2] Divide get_cluster_offset() Laurent Vivier
2008-08-05 15:13   ` Kevin Wolf [this message]
2008-08-05 15:25     ` Laurent Vivier
2008-08-05 15:41       ` Kevin Wolf
2008-07-29 14:13 ` [Qemu-devel] [patch 3/5][v2] Extract compressing part from alloc_cluster_offset() Laurent Vivier
2008-08-06 14:20   ` Kevin Wolf
2008-08-06 14:41     ` Laurent Vivier
2008-08-06 14:56       ` Kevin Wolf
2008-08-06 15:03         ` Laurent Vivier
2008-07-29 14:13 ` [Qemu-devel] [patch 4/5][v2] Aggregate same type clusters Laurent Vivier
2008-08-11 12:10   ` Kevin Wolf
2008-08-11 12:39     ` Laurent Vivier
2008-07-29 14:13 ` [Qemu-devel] [patch 5/5][v2] Try to aggregate free clusters and freed clusters Laurent Vivier
2008-08-11 13:13   ` Kevin Wolf
2008-08-11 14:04     ` Laurent Vivier
2008-08-11 14:42       ` Laurent Vivier
2008-08-11 15:03       ` Kevin Wolf
2008-07-29 19:15 ` [Qemu-devel] [patch 0/5][v2] qcow2: improve I/O performance with cache=off Anthony Liguori
2008-07-29 21:35   ` Laurent Vivier
2008-07-29 21:49     ` Anthony Liguori
2008-07-29 21:59       ` Laurent Vivier
2008-08-01 14:54         ` Anthony Liguori
2008-08-01 15:05           ` Laurent Vivier

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=48986E34.203@suse.de \
    --to=kwolf@suse.de \
    --cc=Laurent.Vivier@bull.net \
    --cc=qemu-devel@nongnu.org \
    /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).