qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org
Subject: [PULL 30/34] block/io: bdrv_check_byte_request(): drop bdrv_is_inserted()
Date: Fri, 11 Dec 2020 18:08:08 +0100	[thread overview]
Message-ID: <20201211170812.228643-31-kwolf@redhat.com> (raw)
In-Reply-To: <20201211170812.228643-1-kwolf@redhat.com>

From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

Move bdrv_is_inserted() calls into callers.

We are going to make bdrv_check_byte_request() a clean thing.
bdrv_is_inserted() is not about checking the request, it's about
checking the bs. So, it should be separate.

With this patch we probably change error path for some failure
scenarios. But depending on the fact that querying too big request on
empty cdrom (or corrupted qcow2 node with no drv) will result in EIO
and not ENOMEDIUM would be very strange. More over, we are going to
move to 64bit requests, so larger requests will be allowed anyway.

More over, keeping in mind that cdrom is the only driver that has
.bdrv_is_inserted() handler it's strange that we should care so much
about it in generic block layer, intuitively we should just do read and
write, and cdrom driver should return correct errors if it is not
inserted. But it's a work for another series.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20201203222713.13507-4-vsementsov@virtuozzo.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block/io.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/block/io.c b/block/io.c
index 3e91074c9f..ef75a5abb4 100644
--- a/block/io.c
+++ b/block/io.c
@@ -884,17 +884,12 @@ static bool coroutine_fn bdrv_wait_serialising_requests(BdrvTrackedRequest *self
     return waited;
 }
 
-static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset,
-                                   size_t size)
+static int bdrv_check_byte_request(int64_t offset, size_t size)
 {
     if (size > BDRV_REQUEST_MAX_BYTES) {
         return -EIO;
     }
 
-    if (!bdrv_is_inserted(bs)) {
-        return -ENOMEDIUM;
-    }
-
     if (offset < 0) {
         return -EIO;
     }
@@ -1642,7 +1637,11 @@ int coroutine_fn bdrv_co_preadv_part(BdrvChild *child,
 
     trace_bdrv_co_preadv(bs, offset, bytes, flags);
 
-    ret = bdrv_check_byte_request(bs, offset, bytes);
+    if (!bdrv_is_inserted(bs)) {
+        return -ENOMEDIUM;
+    }
+
+    ret = bdrv_check_byte_request(offset, bytes);
     if (ret < 0) {
         return ret;
     }
@@ -2054,11 +2053,11 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child,
 
     trace_bdrv_co_pwritev(child->bs, offset, bytes, flags);
 
-    if (!bs->drv) {
+    if (!bdrv_is_inserted(bs)) {
         return -ENOMEDIUM;
     }
 
-    ret = bdrv_check_byte_request(bs, offset, bytes);
+    ret = bdrv_check_byte_request(offset, bytes);
     if (ret < 0) {
         return ret;
     }
@@ -3045,10 +3044,10 @@ static int coroutine_fn bdrv_co_copy_range_internal(
     assert(!(read_flags & BDRV_REQ_NO_FALLBACK));
     assert(!(write_flags & BDRV_REQ_NO_FALLBACK));
 
-    if (!dst || !dst->bs) {
+    if (!dst || !dst->bs || !bdrv_is_inserted(dst->bs)) {
         return -ENOMEDIUM;
     }
-    ret = bdrv_check_byte_request(dst->bs, dst_offset, bytes);
+    ret = bdrv_check_byte_request(dst_offset, bytes);
     if (ret) {
         return ret;
     }
@@ -3056,10 +3055,10 @@ static int coroutine_fn bdrv_co_copy_range_internal(
         return bdrv_co_pwrite_zeroes(dst, dst_offset, bytes, write_flags);
     }
 
-    if (!src || !src->bs) {
+    if (!src || !src->bs || !bdrv_is_inserted(src->bs)) {
         return -ENOMEDIUM;
     }
-    ret = bdrv_check_byte_request(src->bs, src_offset, bytes);
+    ret = bdrv_check_byte_request(src_offset, bytes);
     if (ret) {
         return ret;
     }
-- 
2.29.2



  parent reply	other threads:[~2020-12-11 17:45 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-11 17:07 [PULL 00/34] Block layer patches Kevin Wolf
2020-12-11 17:07 ` [PULL 01/34] block/accounting: Use lock guard macros Kevin Wolf
2020-12-11 17:07 ` [PULL 02/34] block/curl: " Kevin Wolf
2020-12-11 17:07 ` [PULL 03/34] block/throttle-groups: " Kevin Wolf
2020-12-11 17:07 ` [PULL 04/34] block/iscsi: " Kevin Wolf
2020-12-11 17:07 ` [PULL 05/34] meson: Detect libfuse Kevin Wolf
2020-12-11 17:07 ` [PULL 06/34] fuse: Allow exporting BDSs via FUSE Kevin Wolf
2020-12-11 17:07 ` [PULL 07/34] fuse: Implement standard FUSE operations Kevin Wolf
2020-12-11 17:07 ` [PULL 08/34] fuse: Allow growable exports Kevin Wolf
2020-12-11 17:07 ` [PULL 09/34] fuse: (Partially) implement fallocate() Kevin Wolf
2020-12-11 17:07 ` [PULL 10/34] fuse: Implement hole detection through lseek Kevin Wolf
2020-12-11 17:07 ` [PULL 11/34] iotests: Do not needlessly filter _make_test_img Kevin Wolf
2020-12-11 17:07 ` [PULL 12/34] iotests: Do not pipe _make_test_img Kevin Wolf
2020-12-11 17:07 ` [PULL 13/34] iotests: Use convert -n in some cases Kevin Wolf
2020-12-11 17:07 ` [PULL 14/34] iotests/046: Avoid renaming images Kevin Wolf
2020-12-11 17:07 ` [PULL 15/34] iotests: Derive image names from $TEST_IMG Kevin Wolf
2020-12-11 17:07 ` [PULL 16/34] iotests/091: Use _cleanup_qemu instad of "wait" Kevin Wolf
2020-12-11 17:07 ` [PULL 17/34] iotests: Restrict some Python tests to file Kevin Wolf
2020-12-11 17:07 ` [PULL 18/34] iotests: Let _make_test_img guess $TEST_IMG_FILE Kevin Wolf
2020-12-11 17:07 ` [PULL 19/34] iotests/287: Clean up subshell test image Kevin Wolf
2020-12-11 17:07 ` [PULL 20/34] storage-daemon: Call bdrv_close_all() on exit Kevin Wolf
2020-12-11 17:07 ` [PULL 21/34] iotests: Give access to the qemu-storage-daemon Kevin Wolf
2020-12-11 17:08 ` [PULL 22/34] iotests: Allow testing FUSE exports Kevin Wolf
2020-12-11 17:08 ` [PULL 23/34] iotests: Enable fuse for many tests Kevin Wolf
2020-12-11 17:08 ` [PULL 24/34] iotests/308: Add test for FUSE exports Kevin Wolf
2020-12-11 17:08 ` [PULL 25/34] file-posix: check the use_lock before setting the file lock Kevin Wolf
2020-12-11 17:08 ` [PULL 26/34] iotests/221: Discard image before qemu-img map Kevin Wolf
2020-12-11 17:08 ` [PULL 27/34] can-host: Fix crash when 'canbus' property is not set Kevin Wolf
2020-12-11 17:08 ` [PULL 28/34] block/file-posix: fix workaround in raw_do_pwrite_zeroes() Kevin Wolf
2020-12-11 17:08 ` [PULL 29/34] block/io: bdrv_refresh_limits(): use ERRP_GUARD Kevin Wolf
2020-12-11 17:08 ` Kevin Wolf [this message]
2020-12-11 17:08 ` [PULL 31/34] block: introduce BDRV_MAX_LENGTH Kevin Wolf
2020-12-11 17:08 ` [PULL 32/34] block: Simplify qmp_block_resize() error paths Kevin Wolf
2020-12-11 17:08 ` [PULL 33/34] block: Fix locking in qmp_block_resize() Kevin Wolf
2020-12-11 17:08 ` [PULL 34/34] block: Fix deadlock in bdrv_co_yield_to_drain() Kevin Wolf
2020-12-12 16:06 ` [PULL 00/34] Block layer patches Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201211170812.228643-31-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).