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
next prev parent 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).