aboutsummaryrefslogtreecommitdiff
path: root/block/io.c
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2021-06-09 11:30:34 -0500
committerKevin Wolf <kwolf@redhat.com>2021-06-29 16:51:00 +0200
commit97efa8698e554769fc23e8120fe9c56ab45cddc5 (patch)
tree70e8dceaa51c84d1039ac5476d663624f2178791 /block/io.c
parent2d369d6e6e890a0204183e853604f8077329c4bc (diff)
downloadqemu-97efa8698e554769fc23e8120fe9c56ab45cddc5.zip
qemu-97efa8698e554769fc23e8120fe9c56ab45cddc5.tar.gz
qemu-97efa8698e554769fc23e8120fe9c56ab45cddc5.tar.bz2
block: Move read-only check during truncation earlier
No need to start a tracked request that will always fail. The choice to check read-only after bdrv_inc_in_flight() predates 1bc5f09f2e (block: Use tracked request for truncate), but waiting for serializing requests can make the effect more noticeable. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20210609163034.997943-1-eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block/io.c')
-rw-r--r--block/io.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/block/io.c b/block/io.c
index dd93364..cf177a9 100644
--- a/block/io.c
+++ b/block/io.c
@@ -3392,6 +3392,11 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool exact,
return old_size;
}
+ if (bdrv_is_read_only(bs)) {
+ error_setg(errp, "Image is read-only");
+ return -EACCES;
+ }
+
if (offset > old_size) {
new_bytes = offset - old_size;
} else {
@@ -3408,11 +3413,6 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool exact,
if (new_bytes) {
bdrv_make_request_serialising(&req, 1);
}
- if (bdrv_is_read_only(bs)) {
- error_setg(errp, "Image is read-only");
- ret = -EACCES;
- goto out;
- }
ret = bdrv_co_write_req_prepare(child, offset - new_bytes, new_bytes, &req,
0);
if (ret < 0) {