#include "qemu/main-loop.h"
#include "system/replay.h"
#include "qemu/units.h"
+#include "qemu/atomic.h"
/* Maximum bounce buffer for copy-on-read and write zeroes, in bytes */
#define MAX_BOUNCE_BUFFER (32768 << BDRV_SECTOR_BITS)
if (req->bytes) {
switch (req->type) {
case BDRV_TRACKED_WRITE:
- stat64_max(&bs->wr_highest_offset, offset + bytes);
+ {
+ uint64_t new = offset + bytes;
+ uint64_t old = qatomic_read(&bs->wr_highest_offset);
+
+ while (old < new) {
+ old = qatomic_cmpxchg(&bs->wr_highest_offset, old, new);
+ }
+ }
/* fall through, to set dirty bits */
case BDRV_TRACKED_DISCARD:
bdrv_set_dirty(bs, offset, bytes);
s->node_name = g_strdup(bdrv_get_node_name(bs));
}
- s->stats->wr_highest_offset = stat64_get(&bs->wr_highest_offset);
+ s->stats->wr_highest_offset = qatomic_read(&bs->wr_highest_offset);
s->driver_specific = bdrv_get_specific_stats(bs);
#include "qemu/aiocb.h"
#include "qemu/iov.h"
#include "qemu/rcu.h"
-#include "qemu/stats64.h"
#define BLOCK_FLAG_LAZY_REFCOUNTS 8
QLIST_HEAD(, BdrvDirtyBitmap) dirty_bitmaps;
/* Offset after the highest byte written to */
- Stat64 wr_highest_offset;
+ uint64_t wr_highest_offset;
/*
* If true, copy read backing sectors into image. Can be >1 if more