When the permissions could not be changed as would be necessary for updating the keys, reset updating_keys to false so block_crypto_child_perms() will not continue to try claiming these permissions.
Signed-off-by: Hanna Reitz <[email protected]> --- block/crypto.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/block/crypto.c b/block/crypto.c index 5225a68a54..9d5fecbef8 100644 --- a/block/crypto.c +++ b/block/crypto.c @@ -781,10 +781,16 @@ static int block_crypto_amend_prepare(BlockDriverState *bs, Error **errp) { BlockCrypto *crypto = bs->opaque; + int ret; /* apply for exclusive read/write permissions to the underlying file */ crypto->updating_keys = true; - return bdrv_child_refresh_perms(bs, bs->file, errp); + ret = bdrv_child_refresh_perms(bs, bs->file, errp); + if (ret < 0) { + /* Well, in this case we will not be updating any keys */ + crypto->updating_keys = false; + } + return ret; } static void -- 2.34.1
