diff options
author | Eric Blake <eblake@redhat.com> | 2021-06-09 11:30:34 -0500 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2021-06-29 16:51:00 +0200 |
commit | 97efa8698e554769fc23e8120fe9c56ab45cddc5 (patch) | |
tree | 70e8dceaa51c84d1039ac5476d663624f2178791 /block | |
parent | 2d369d6e6e890a0204183e853604f8077329c4bc (diff) |
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')
-rw-r--r-- | block/io.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/block/io.c b/block/io.c index dd93364258..cf177a9d2d 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) { |