From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 17/24] block: Use BdrvChild to discard
Date: Tue, 10 Jul 2018 17:42:57 +0200 [thread overview]
Message-ID: <20180710154304.18304-18-kwolf@redhat.com> (raw)
In-Reply-To: <20180710154304.18304-1-kwolf@redhat.com>
From: Fam Zheng <famz@redhat.com>
Other I/O functions are already using a BdrvChild pointer in the API, so
make discard do the same. It makes it possible to initiate the same
permission checks before doing I/O, and much easier to share the
helper functions for this, which will be added and used by write,
truncate and copy range paths.
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
include/block/block.h | 4 ++--
block/blkdebug.c | 2 +-
block/blklogwrites.c | 2 +-
block/blkreplay.c | 2 +-
block/block-backend.c | 2 +-
block/copy-on-read.c | 2 +-
block/io.c | 18 +++++++++---------
block/mirror.c | 2 +-
block/qcow2-refcount.c | 2 +-
block/raw-format.c | 2 +-
block/throttle.c | 2 +-
11 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/include/block/block.h b/include/block/block.h
index a91f37bedf..f85e3a6ed3 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -418,8 +418,8 @@ AioWait *bdrv_get_aio_wait(BlockDriverState *bs);
bdrv_get_aio_context(bs_), \
cond); })
-int bdrv_pdiscard(BlockDriverState *bs, int64_t offset, int bytes);
-int bdrv_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes);
+int bdrv_pdiscard(BdrvChild *child, int64_t offset, int bytes);
+int bdrv_co_pdiscard(BdrvChild *child, int64_t offset, int bytes);
int bdrv_has_zero_init_1(BlockDriverState *bs);
int bdrv_has_zero_init(BlockDriverState *bs);
bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs);
diff --git a/block/blkdebug.c b/block/blkdebug.c
index 526af2a808..0457bf5b66 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -625,7 +625,7 @@ static int coroutine_fn blkdebug_co_pdiscard(BlockDriverState *bs,
return err;
}
- return bdrv_co_pdiscard(bs->file->bs, offset, bytes);
+ return bdrv_co_pdiscard(bs->file, offset, bytes);
}
static int coroutine_fn blkdebug_co_block_status(BlockDriverState *bs,
diff --git a/block/blklogwrites.c b/block/blklogwrites.c
index efa2c7a66a..ff98cd5533 100644
--- a/block/blklogwrites.c
+++ b/block/blklogwrites.c
@@ -486,7 +486,7 @@ static int coroutine_fn blk_log_writes_co_do_file_flush(BlkLogWritesFileReq *fr)
static int coroutine_fn
blk_log_writes_co_do_file_pdiscard(BlkLogWritesFileReq *fr)
{
- return bdrv_co_pdiscard(fr->bs->file->bs, fr->offset, fr->bytes);
+ return bdrv_co_pdiscard(fr->bs->file, fr->offset, fr->bytes);
}
static int coroutine_fn
diff --git a/block/blkreplay.c b/block/blkreplay.c
index b016dbeee7..766150ade6 100755
--- a/block/blkreplay.c
+++ b/block/blkreplay.c
@@ -113,7 +113,7 @@ static int coroutine_fn blkreplay_co_pdiscard(BlockDriverState *bs,
int64_t offset, int bytes)
{
uint64_t reqid = blkreplay_next_id();
- int ret = bdrv_co_pdiscard(bs->file->bs, offset, bytes);
+ int ret = bdrv_co_pdiscard(bs->file, offset, bytes);
block_request_create(reqid, bs, qemu_coroutine_self());
qemu_coroutine_yield();
diff --git a/block/block-backend.c b/block/block-backend.c
index e94e3d5929..f2f75a977d 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1560,7 +1560,7 @@ int blk_co_pdiscard(BlockBackend *blk, int64_t offset, int bytes)
return ret;
}
- return bdrv_co_pdiscard(blk_bs(blk), offset, bytes);
+ return bdrv_co_pdiscard(blk->root, offset, bytes);
}
int blk_co_flush(BlockBackend *blk)
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
index 1dcdaeed69..a19164f9eb 100644
--- a/block/copy-on-read.c
+++ b/block/copy-on-read.c
@@ -116,7 +116,7 @@ static int coroutine_fn cor_co_pwrite_zeroes(BlockDriverState *bs,
static int coroutine_fn cor_co_pdiscard(BlockDriverState *bs,
int64_t offset, int bytes)
{
- return bdrv_co_pdiscard(bs->file->bs, offset, bytes);
+ return bdrv_co_pdiscard(bs->file, offset, bytes);
}
diff --git a/block/io.c b/block/io.c
index 9b2aa04010..fbcd93304b 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2633,7 +2633,7 @@ int bdrv_flush(BlockDriverState *bs)
}
typedef struct DiscardCo {
- BlockDriverState *bs;
+ BdrvChild *child;
int64_t offset;
int bytes;
int ret;
@@ -2642,17 +2642,17 @@ static void coroutine_fn bdrv_pdiscard_co_entry(void *opaque)
{
DiscardCo *rwco = opaque;
- rwco->ret = bdrv_co_pdiscard(rwco->bs, rwco->offset, rwco->bytes);
+ rwco->ret = bdrv_co_pdiscard(rwco->child, rwco->offset, rwco->bytes);
}
-int coroutine_fn bdrv_co_pdiscard(BlockDriverState *bs, int64_t offset,
- int bytes)
+int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset, int bytes)
{
BdrvTrackedRequest req;
int max_pdiscard, ret;
int head, tail, align;
+ BlockDriverState *bs = child->bs;
- if (!bs->drv) {
+ if (!bs || !bs->drv) {
return -ENOMEDIUM;
}
@@ -2763,11 +2763,11 @@ out:
return ret;
}
-int bdrv_pdiscard(BlockDriverState *bs, int64_t offset, int bytes)
+int bdrv_pdiscard(BdrvChild *child, int64_t offset, int bytes)
{
Coroutine *co;
DiscardCo rwco = {
- .bs = bs,
+ .child = child,
.offset = offset,
.bytes = bytes,
.ret = NOT_DONE,
@@ -2778,8 +2778,8 @@ int bdrv_pdiscard(BlockDriverState *bs, int64_t offset, int bytes)
bdrv_pdiscard_co_entry(&rwco);
} else {
co = qemu_coroutine_create(bdrv_pdiscard_co_entry, &rwco);
- bdrv_coroutine_enter(bs, co);
- BDRV_POLL_WHILE(bs, rwco.ret == NOT_DONE);
+ bdrv_coroutine_enter(child->bs, co);
+ BDRV_POLL_WHILE(child->bs, rwco.ret == NOT_DONE);
}
return rwco.ret;
diff --git a/block/mirror.c b/block/mirror.c
index 61bd9f3cf1..b48c3f8cf5 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1333,7 +1333,7 @@ static int coroutine_fn bdrv_mirror_top_do_write(BlockDriverState *bs,
break;
case MIRROR_METHOD_DISCARD:
- ret = bdrv_co_pdiscard(bs->backing->bs, offset, bytes);
+ ret = bdrv_co_pdiscard(bs->backing, offset, bytes);
break;
default:
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index 18c729aa27..4e1589ad7a 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -734,7 +734,7 @@ void qcow2_process_discards(BlockDriverState *bs, int ret)
/* Discard is optional, ignore the return value */
if (ret >= 0) {
- bdrv_pdiscard(bs->file->bs, d->offset, d->bytes);
+ bdrv_pdiscard(bs->file, d->offset, d->bytes);
}
g_free(d);
diff --git a/block/raw-format.c b/block/raw-format.c
index a3591985f6..dee262875a 100644
--- a/block/raw-format.c
+++ b/block/raw-format.c
@@ -297,7 +297,7 @@ static int coroutine_fn raw_co_pdiscard(BlockDriverState *bs,
if (ret) {
return ret;
}
- return bdrv_co_pdiscard(bs->file->bs, offset, bytes);
+ return bdrv_co_pdiscard(bs->file, offset, bytes);
}
static int64_t raw_getlength(BlockDriverState *bs)
diff --git a/block/throttle.c b/block/throttle.c
index f617f23a12..636c9764aa 100644
--- a/block/throttle.c
+++ b/block/throttle.c
@@ -149,7 +149,7 @@ static int coroutine_fn throttle_co_pdiscard(BlockDriverState *bs,
ThrottleGroupMember *tgm = bs->opaque;
throttle_group_co_io_limits_intercept(tgm, bytes, true);
- return bdrv_co_pdiscard(bs->file->bs, offset, bytes);
+ return bdrv_co_pdiscard(bs->file, offset, bytes);
}
static int throttle_co_flush(BlockDriverState *bs)
--
2.13.6
next prev parent reply other threads:[~2018-07-10 15:43 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-10 15:42 [Qemu-devel] [PULL 00/24] Block layer patches Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 01/24] block: Poll after drain on attaching a node Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 02/24] test-bdrv-drain: Test bdrv_append() to drained node Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 03/24] block: Fix copy-on-read crash with partial final cluster Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 04/24] iotests: 222: Don't run with luks Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 05/24] block/io: fix copy_range Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 06/24] block: split flags in copy_range Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 07/24] block: add BDRV_REQ_SERIALISING flag Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 08/24] block/backup: fix fleecing scheme: use serialized writes Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 09/24] qapi/block-core.json: Add missing documentation for blklogwrites log-append option Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 10/24] block/blklogwrites: Make sure the log sector size is not too small Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 11/24] Revert "block: Remove dead deprecation warning code" Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 12/24] Revert "block: Remove deprecated -drive option serial" Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 13/24] Revert "block: Remove deprecated -drive option addr" Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 14/24] Revert "block: Remove deprecated -drive geometry options" Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 15/24] block: Prefix file driver trace points with "file_" Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 16/24] block: Add copy offloading trace points Kevin Wolf
2018-07-10 15:42 ` Kevin Wolf [this message]
2018-07-10 15:42 ` [Qemu-devel] [PULL 18/24] block: Use uint64_t for BdrvTrackedRequest byte fields Kevin Wolf
2018-07-10 15:42 ` [Qemu-devel] [PULL 19/24] block: Extract common write req handling Kevin Wolf
2018-07-10 15:43 ` [Qemu-devel] [PULL 20/24] block: Fix handling of image enlarging write Kevin Wolf
2018-07-10 15:43 ` [Qemu-devel] [PULL 21/24] block: Use common req handling for discard Kevin Wolf
2018-07-10 15:43 ` [Qemu-devel] [PULL 22/24] block: Use common req handling in copy offloading Kevin Wolf
2018-07-10 15:43 ` [Qemu-devel] [PULL 23/24] block: Fix bdrv_co_truncate overlap check Kevin Wolf
2018-07-10 15:43 ` [Qemu-devel] [PULL 24/24] block: Use common write req handling in truncate Kevin Wolf
2018-07-10 17:19 ` [Qemu-devel] [PULL 00/24] 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=20180710154304.18304-18-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.