Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into s…
Browse files Browse the repository at this point in the history
…taging

Block layer patches for 2.6

# gpg: Signature made Tue 05 Apr 2016 16:32:25 BST using RSA key ID C88F2FD6
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"

* remotes/kevin/tags/for-upstream:
  crypto: Avoid memory leak on failure
  qemu-iotests: 149: Use "/usr/bin/env python"
  block: Forbid I/O throttling on nodes with multiple parents for 2.6
  block: forbid x-blockdev-del from acting on DriveInfo

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pm215 committed Apr 5, 2016
2 parents a226f76 + 6a5c357 commit 31370db
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 7 deletions.
7 changes: 7 additions & 0 deletions block.c
Expand Up @@ -1526,6 +1526,13 @@ static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
if (!bs) {
return -ENODEV;
}

if (bs->throttle_state) {
error_setg(errp, "Cannot reference an existing block device for "
"which I/O throttling is enabled");
return -EINVAL;
}

bdrv_ref(bs);
*pbs = bs;
return 0;
Expand Down
12 changes: 6 additions & 6 deletions block/crypto.c
Expand Up @@ -196,6 +196,7 @@ block_crypto_open_opts_init(QCryptoBlockFormat format,
OptsVisitor *ov;
QCryptoBlockOpenOptions *ret = NULL;
Error *local_err = NULL;
Error *end_err = NULL;

ret = g_new0(QCryptoBlockOpenOptions, 1);
ret->format = format;
Expand All @@ -218,10 +219,9 @@ block_crypto_open_opts_init(QCryptoBlockFormat format,
error_setg(&local_err, "Unsupported block format %d", format);
break;
}
error_propagate(errp, local_err);
local_err = NULL;

visit_end_struct(opts_get_visitor(ov), &local_err);
visit_end_struct(opts_get_visitor(ov), &end_err);
error_propagate(&local_err, end_err);

out:
if (local_err) {
Expand All @@ -242,6 +242,7 @@ block_crypto_create_opts_init(QCryptoBlockFormat format,
OptsVisitor *ov;
QCryptoBlockCreateOptions *ret = NULL;
Error *local_err = NULL;
Error *end_err = NULL;

ret = g_new0(QCryptoBlockCreateOptions, 1);
ret->format = format;
Expand All @@ -264,10 +265,9 @@ block_crypto_create_opts_init(QCryptoBlockFormat format,
error_setg(&local_err, "Unsupported block format %d", format);
break;
}
error_propagate(errp, local_err);
local_err = NULL;

visit_end_struct(opts_get_visitor(ov), &local_err);
visit_end_struct(opts_get_visitor(ov), &end_err);
error_propagate(&local_err, end_err);

out:
if (local_err) {
Expand Down
12 changes: 12 additions & 0 deletions blockdev.c
Expand Up @@ -2661,6 +2661,13 @@ void qmp_block_set_io_throttle(const char *device, int64_t bps, int64_t bps_rd,
goto out;
}

/* The BlockBackend must be the only parent */
assert(QLIST_FIRST(&bs->parents));
if (QLIST_NEXT(QLIST_FIRST(&bs->parents), next_parent)) {
error_setg(errp, "Cannot throttle device with multiple parents");
goto out;
}

throttle_config_init(&cfg);
cfg.buckets[THROTTLE_BPS_TOTAL].avg = bps;
cfg.buckets[THROTTLE_BPS_READ].avg = bps_rd;
Expand Down Expand Up @@ -4027,6 +4034,11 @@ void qmp_x_blockdev_del(bool has_id, const char *id,
error_setg(errp, "Cannot find block backend %s", id);
return;
}
if (blk_legacy_dinfo(blk)) {
error_setg(errp, "Deleting block backend added with drive-add"
" is not supported");
return;
}
if (blk_get_refcnt(blk) > 1) {
error_setg(errp, "Block backend %s is in use", id);
return;
Expand Down
2 changes: 1 addition & 1 deletion tests/qemu-iotests/149
@@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/env python
#
# Copyright (C) 2016 Red Hat, Inc.
#
Expand Down

0 comments on commit 31370db

Please sign in to comment.