+static void io_write(BlockDriverState *bs, long pattern, int64_t pattern_count,
+ int64_t offset, int64_t count, bool expect_failed)
+{
+ void *pattern_buf;
+ int ret;
+
+ /* 1. alloc pattern buffer */
+ if (pattern) {
+ pattern_buf = g_malloc(pattern_count);
+ memset(pattern_buf, pattern, pattern_count);
+ }
+
+ /* 2. do write */
+ if (pattern) {
+ ret = bdrv_write(bs, offset >> 9, (uint8_t *)pattern_buf, count >> 9);
+ } else {
+ ret = bdrv_write_zeroes(bs, offset >> 9, count >> 9, 0);
+ }
+
+ /* 3. assert */
+ if (expect_failed) {
+ g_assert(ret < 0);
+ } else {
+ g_assert(ret >= 0);
+ g_free(pattern_buf);
+ }
+}