mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-14 08:26:28 +00:00
qcow2: Enable dirty flag in qcow2_alloc_cluster_link_l2
This is closer to where the dirty flag is really needed, and it avoids having checks for special cases related to cluster allocation directly in the writev loop. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
f50f88b9fe
commit
280d373579
@ -668,11 +668,14 @@ int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Update L2 table. */
|
/* Update L2 table. */
|
||||||
|
if (s->compatible_features & QCOW2_COMPAT_LAZY_REFCOUNTS) {
|
||||||
|
qcow2_mark_dirty(bs);
|
||||||
|
}
|
||||||
if (qcow2_need_accurate_refcounts(s)) {
|
if (qcow2_need_accurate_refcounts(s)) {
|
||||||
qcow2_cache_set_dependency(bs, s->l2_table_cache,
|
qcow2_cache_set_dependency(bs, s->l2_table_cache,
|
||||||
s->refcount_block_cache);
|
s->refcount_block_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = get_cluster_table(bs, m->offset, &l2_table, &l2_index);
|
ret = get_cluster_table(bs, m->offset, &l2_table, &l2_index);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -222,7 +222,7 @@ static void report_unsupported_feature(BlockDriverState *bs,
|
|||||||
* updated successfully. Therefore it is not required to check the return
|
* updated successfully. Therefore it is not required to check the return
|
||||||
* value of this function.
|
* value of this function.
|
||||||
*/
|
*/
|
||||||
static int qcow2_mark_dirty(BlockDriverState *bs)
|
int qcow2_mark_dirty(BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
BDRVQcowState *s = bs->opaque;
|
BDRVQcowState *s = bs->opaque;
|
||||||
uint64_t val;
|
uint64_t val;
|
||||||
@ -803,11 +803,6 @@ static coroutine_fn int qcow2_co_writev(BlockDriverState *bs,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l2meta->nb_clusters > 0 &&
|
|
||||||
(s->compatible_features & QCOW2_COMPAT_LAZY_REFCOUNTS)) {
|
|
||||||
qcow2_mark_dirty(bs);
|
|
||||||
}
|
|
||||||
|
|
||||||
assert((cluster_offset & 511) == 0);
|
assert((cluster_offset & 511) == 0);
|
||||||
|
|
||||||
qemu_iovec_reset(&hd_qiov);
|
qemu_iovec_reset(&hd_qiov);
|
||||||
|
@ -303,6 +303,8 @@ static inline bool qcow2_need_accurate_refcounts(BDRVQcowState *s)
|
|||||||
/* qcow2.c functions */
|
/* qcow2.c functions */
|
||||||
int qcow2_backing_read1(BlockDriverState *bs, QEMUIOVector *qiov,
|
int qcow2_backing_read1(BlockDriverState *bs, QEMUIOVector *qiov,
|
||||||
int64_t sector_num, int nb_sectors);
|
int64_t sector_num, int nb_sectors);
|
||||||
|
|
||||||
|
int qcow2_mark_dirty(BlockDriverState *bs);
|
||||||
int qcow2_update_header(BlockDriverState *bs);
|
int qcow2_update_header(BlockDriverState *bs);
|
||||||
|
|
||||||
/* qcow2-refcount.c functions */
|
/* qcow2-refcount.c functions */
|
||||||
|
Loading…
Reference in New Issue
Block a user