-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 iQEcBAABAgAGBQJXpFtSAAoJEJykq7OBq3PIQGcIAIhYEhWlP1Ju3N4fupPi/YIW MyIZm0QfUtuxaOgxWtqPXBcAhx2T6MmZMNT3x3EcnHBPjuW8GA+CLYNTcn76L1z6 UuC53WVIhuzVnHvb0FikFVjtL9jZIvP9qLQN1K/+C6sOizD8qx3Hs4VEGIFME0Zt RwD/8DOV8rCrbcAyaPVY0oIM83HCFCoXSFth4oIQHjZ40ixzUgtjOdVgmgYCISiw fmCDt78scyGzrVU/i3e0OjMUZHy3TVJ8eXGVq/uXA/F8PoVg3b1RgJDpvykAvwKO /dX7pd6dr5zAc4y0pKDnOF2Fm4Jkxjibjt0+yZkD9KaQ55HLjlVckB1CimRIIUY= =9poP -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging # gpg: Signature made Fri 05 Aug 2016 10:24:34 BST # gpg: using RSA key 0x9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * remotes/stefanha/tags/block-pull-request: virtio-blk: Remove stale comment about draining virtio-blk: Release s->rq queue at system_reset throttle: Test burst limits lower than the normal limits throttle: Don't allow burst limits to be lower than the normal limits block/parallels: check new image size Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
8bfa87a231
@ -43,6 +43,7 @@
|
|||||||
#define HEADER_MAGIC2 "WithouFreSpacExt"
|
#define HEADER_MAGIC2 "WithouFreSpacExt"
|
||||||
#define HEADER_VERSION 2
|
#define HEADER_VERSION 2
|
||||||
#define HEADER_INUSE_MAGIC (0x746F6E59)
|
#define HEADER_INUSE_MAGIC (0x746F6E59)
|
||||||
|
#define MAX_PARALLELS_IMAGE_FACTOR (1ull << 32)
|
||||||
|
|
||||||
#define DEFAULT_CLUSTER_SIZE 1048576 /* 1 MiB */
|
#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);
|
BDRV_SECTOR_SIZE);
|
||||||
cl_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_CLUSTER_SIZE,
|
cl_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_CLUSTER_SIZE,
|
||||||
DEFAULT_CLUSTER_SIZE), BDRV_SECTOR_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);
|
ret = bdrv_create_file(filename, opts, &local_err);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -654,15 +654,20 @@ static void virtio_blk_reset(VirtIODevice *vdev)
|
|||||||
{
|
{
|
||||||
VirtIOBlock *s = VIRTIO_BLK(vdev);
|
VirtIOBlock *s = VIRTIO_BLK(vdev);
|
||||||
AioContext *ctx;
|
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);
|
ctx = blk_get_aio_context(s->blk);
|
||||||
aio_context_acquire(ctx);
|
aio_context_acquire(ctx);
|
||||||
blk_drain(s->blk);
|
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) {
|
if (s->dataplane) {
|
||||||
virtio_blk_data_plane_stop(s->dataplane);
|
virtio_blk_data_plane_stop(s->dataplane);
|
||||||
}
|
}
|
||||||
|
@ -394,6 +394,14 @@ static void test_max_is_missing_limit(void)
|
|||||||
cfg.buckets[i].max = 0;
|
cfg.buckets[i].max = 0;
|
||||||
cfg.buckets[i].avg = 100;
|
cfg.buckets[i].avg = 100;
|
||||||
g_assert(throttle_is_valid(&cfg, NULL));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,6 +348,11 @@ bool throttle_is_valid(ThrottleConfig *cfg, Error **errp)
|
|||||||
" bps/iops values");
|
" bps/iops values");
|
||||||
return false;
|
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;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user