On Wed, Feb 06, 2013 at 01:31:45PM +0100, Benoît Canet wrote: > --- > block/qcow2-cluster.c | 8 ++++++-- > block/qcow2-dedup.c | 7 +++++++ > block/qcow2.h | 3 +++ > 3 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c > index dbcb6d2..ef91216 100644 > --- a/block/qcow2-cluster.c > +++ b/block/qcow2-cluster.c > @@ -709,6 +709,7 @@ int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, > QCowL2Meta *m) > qcow2_cache_entry_mark_dirty(s->l2_table_cache, l2_table); > > for (i = 0; i < m->nb_clusters; i++) { > + uint64_t flags = 0; > /* if two concurrent writes happen to the same unallocated cluster > * each write allocates separate cluster and writes data concurrently. > * The first one to complete updates l2 table with pointer to its > @@ -718,9 +719,11 @@ int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, > QCowL2Meta *m) > if(l2_table[l2_index + i] != 0) > old_cluster[j++] = l2_table[l2_index + i]; > > + flags = m->oflag_copied ? QCOW_OFLAG_COPIED : 0; > + flags |= m->to_deduplicate ? QCOW_OFLAG_TO_DEDUP : 0;
It would be easier to have a m->l2_entry_flags field that is ORed in. Then we don't need separate fields for QCOW_OFLAG_COPIED and QCOW_OFLAG_TO_DEDUP, or code to check them and build flags.