summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--block.c6
-rw-r--r--block/io.c12
2 files changed, 15 insertions, 3 deletions
diff --git a/block.c b/block.c
index 086a12df97..1fbbb8d606 100644
--- a/block.c
+++ b/block.c
@@ -3274,7 +3274,11 @@ int bdrv_truncate(BdrvChild *child, int64_t offset)
BlockDriver *drv = bs->drv;
int ret;
- assert(child->perm & BLK_PERM_RESIZE);
+ /* FIXME: Some format block drivers use this function instead of implicitly
+ * growing their file by writing beyond its end.
+ * See bdrv_aligned_pwritev() for an explanation why we currently
+ * cannot assert this permission in that case. */
+ // assert(child->perm & BLK_PERM_RESIZE);
if (!drv)
return -ENOMEDIUM;
diff --git a/block/io.c b/block/io.c
index bae6947032..8706bfa578 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1345,8 +1345,16 @@ static int coroutine_fn bdrv_aligned_pwritev(BdrvChild *child,
assert(!waited || !req->serialising);
assert(req->overlap_offset <= offset);
assert(offset + bytes <= req->overlap_offset + req->overlap_bytes);
- assert(child->perm & BLK_PERM_WRITE);
- assert(end_sector <= bs->total_sectors || child->perm & BLK_PERM_RESIZE);
+ /* FIXME: Block migration uses the BlockBackend of the guest device at a
+ * point when it has not yet taken write permissions. This will be
+ * fixed by a future patch, but for now we have to bypass this
+ * assertion for block migration to work. */
+ // assert(child->perm & BLK_PERM_WRITE);
+ /* FIXME: Because of the above, we also cannot guarantee that all format
+ * BDS take the BLK_PERM_RESIZE permission on their file BDS, since
+ * they are not obligated to do so if they do not have any parent
+ * that has taken the permission to write to them. */
+ // assert(end_sector <= bs->total_sectors || child->perm & BLK_PERM_RESIZE);
ret = notifier_with_return_list_notify(&bs->before_write_notifiers, req);