diff options
| -rw-r--r-- | block/parallels.c | 5 | ||||
| -rw-r--r-- | hw/block/virtio-blk.c | 13 | ||||
| -rw-r--r-- | hw/xen/xen_pt.c | 2 | ||||
| -rw-r--r-- | tests/docker/Makefile.include | 5 | ||||
| -rwxr-xr-x | tests/docker/common.rc | 1 | ||||
| -rw-r--r-- | tests/test-throttle.c | 8 | ||||
| -rw-r--r-- | util/throttle.c | 5 |
7 files changed, 31 insertions, 8 deletions
diff --git a/block/parallels.c b/block/parallels.c index 807a80169f..2ccefa7d85 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -43,6 +43,7 @@ #define HEADER_MAGIC2 "WithouFreSpacExt" #define HEADER_VERSION 2 #define HEADER_INUSE_MAGIC (0x746F6E59) +#define MAX_PARALLELS_IMAGE_FACTOR (1ull << 32) #define DEFAULT_CLUSTER_SIZE 1048576 /* 1 MiB */ @@ -475,6 +476,10 @@ static int parallels_create(const char *filename, QemuOpts *opts, Error **errp) BDRV_SECTOR_SIZE); cl_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_CLUSTER_SIZE, DEFAULT_CLUSTER_SIZE), BDRV_SECTOR_SIZE); + if (total_size >= MAX_PARALLELS_IMAGE_FACTOR * cl_size) { + error_propagate(errp, local_err); + return -E2BIG; + } ret = bdrv_create_file(filename, opts, &local_err); if (ret < 0) { diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index 475a822f5a..331d7667ec 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -654,15 +654,20 @@ static void virtio_blk_reset(VirtIODevice *vdev) { VirtIOBlock *s = VIRTIO_BLK(vdev); AioContext *ctx; + VirtIOBlockReq *req; - /* - * This should cancel pending requests, but can't do nicely until there - * are per-device request lists. - */ ctx = blk_get_aio_context(s->blk); aio_context_acquire(ctx); blk_drain(s->blk); + /* We drop queued requests after blk_drain() because blk_drain() itself can + * produce them. */ + while (s->rq) { + req = s->rq; + s->rq = req->next; + virtio_blk_free_request(req); + } + if (s->dataplane) { virtio_blk_data_plane_stop(s->dataplane); } diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index f593b046e5..b6d71bb52a 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -842,7 +842,7 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) goto err_out; } if (!scratch) { - error_setg(errp, "no pin interrupt"); + XEN_PT_LOG(d, "no pin interrupt\n"); goto out; } diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 78af46837b..4f4707dae0 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -107,9 +107,8 @@ docker-run-%: docker-qemu-src fi $(if $(filter $(TESTS),$(CMD)),$(if $(filter $(IMAGES),$(IMAGE)), \ $(call quiet-command,\ - if $(SRC_PATH)/tests/docker/docker.py images \ - --format={{.Repository}}:{{.Tag}} | \ - grep -qx qemu:$(IMAGE); then \ + if $(SRC_PATH)/tests/docker/docker.py images | \ + awk '$$1=="qemu" && $$2=="$(IMAGE)"{found=1} END{exit(!found)}'; then \ $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ -t \ $(if $(DEBUG),-i,--net=none) \ diff --git a/tests/docker/common.rc b/tests/docker/common.rc index 77069e1285..0c6d8d5ece 100755 --- a/tests/docker/common.rc +++ b/tests/docker/common.rc @@ -24,6 +24,7 @@ requires() build_qemu() { $QEMU_SRC/configure \ + --enable-werror \ ${TARGET_LIST:+"--target-list=${TARGET_LIST}"} \ --prefix="$PWD/install" \ $EXTRA_CONFIGURE_OPTS \ diff --git a/tests/test-throttle.c b/tests/test-throttle.c index afe094bcc4..363b59a38f 100644 --- a/tests/test-throttle.c +++ b/tests/test-throttle.c @@ -394,6 +394,14 @@ static void test_max_is_missing_limit(void) cfg.buckets[i].max = 0; cfg.buckets[i].avg = 100; g_assert(throttle_is_valid(&cfg, NULL)); + + cfg.buckets[i].max = 30; + cfg.buckets[i].avg = 100; + g_assert(!throttle_is_valid(&cfg, NULL)); + + cfg.buckets[i].max = 100; + cfg.buckets[i].avg = 100; + g_assert(throttle_is_valid(&cfg, NULL)); } } diff --git a/util/throttle.c b/util/throttle.c index 654f95caf2..3817d9b904 100644 --- a/util/throttle.c +++ b/util/throttle.c @@ -348,6 +348,11 @@ bool throttle_is_valid(ThrottleConfig *cfg, Error **errp) " bps/iops values"); return false; } + + if (cfg->buckets[i].max && cfg->buckets[i].max < cfg->buckets[i].avg) { + error_setg(errp, "bps_max/iops_max cannot be lower than bps/iops"); + return false; + } } return true; |