From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-devel@nongnu.org, qemu-block@nongnu.org
Cc: kwolf@redhat.com, vsementsov@virtuozzo.com,
wencongyang2@huawei.com, xiechanglong.d@gmail.com,
armbru@redhat.com, mreitz@redhat.com, den@openvz.org,
jsnow@redhat.com
Subject: [Qemu-devel] [PATCH 3/4] blockdev: blockdev_mark_auto_del: drop usage of bs->job
Date: Thu, 6 Jun 2019 18:41:31 +0300 [thread overview]
Message-ID: <20190606154132.153330-4-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20190606154132.153330-1-vsementsov@virtuozzo.com>
We are going to remove bs->job pointer. Drop it's usage in
blockdev_mark_auto_del: instead of looking at bs->job let's check all
jobs for references to bs.
Suggested-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/block/blockjob.h | 9 +++++++++
blockdev.c | 17 ++++++++---------
blockjob.c | 14 ++++++++++++++
3 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/include/block/blockjob.h b/include/block/blockjob.h
index ede0bd8dcb..35faa3aa26 100644
--- a/include/block/blockjob.h
+++ b/include/block/blockjob.h
@@ -121,6 +121,15 @@ int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs,
*/
void block_job_remove_all_bdrv(BlockJob *job);
+/**
+ * block_job_has_bdrv:
+ * @job: The block job
+ *
+ * Searches for @bs in the list of nodes that are involved in the
+ * job.
+ */
+bool block_job_has_bdrv(BlockJob *job, BlockDriverState *bs);
+
/**
* block_job_set_speed:
* @job: The job to set the speed for.
diff --git a/blockdev.c b/blockdev.c
index 3f44b891eb..58aa1369a4 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -140,22 +140,21 @@ void override_max_devs(BlockInterfaceType type, int max_devs)
void blockdev_mark_auto_del(BlockBackend *blk)
{
DriveInfo *dinfo = blk_legacy_dinfo(blk);
- BlockDriverState *bs = blk_bs(blk);
- AioContext *aio_context;
+ BlockJob *job;
if (!dinfo) {
return;
}
- if (bs) {
- aio_context = bdrv_get_aio_context(bs);
- aio_context_acquire(aio_context);
+ for (job = block_job_next(NULL); job; job = block_job_next(job)) {
+ if (block_job_has_bdrv(job, blk_bs(blk))) {
+ AioContext *aio_context = job->job.aio_context;
+ aio_context_acquire(aio_context);
- if (bs->job) {
- job_cancel(&bs->job->job, false);
- }
+ job_cancel(&job->job, false);
- aio_context_release(aio_context);
+ aio_context_release(aio_context);
+ }
}
dinfo->auto_del = 1;
diff --git a/blockjob.c b/blockjob.c
index 931d675c0c..7b6737adde 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -199,6 +199,20 @@ void block_job_remove_all_bdrv(BlockJob *job)
job->nodes = NULL;
}
+bool block_job_has_bdrv(BlockJob *job, BlockDriverState *bs)
+{
+ GSList *el;
+
+ for (el = job->nodes; el; el = el->next) {
+ BdrvChild *c = el->data;
+ if (c->bs == bs) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs,
uint64_t perm, uint64_t shared_perm, Error **errp)
{
--
2.18.0
next prev parent reply other threads:[~2019-06-06 15:45 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-06 15:41 [Qemu-devel] [PATCH 0/4] block: drop bs->job Vladimir Sementsov-Ogievskiy
2019-06-06 15:41 ` [Qemu-devel] [PATCH 1/4] block/replication: drop usage of bs->job Vladimir Sementsov-Ogievskiy
2019-06-06 15:41 ` [Qemu-devel] [PATCH 2/4] block/block-backend: blk_iostatus_reset: " Vladimir Sementsov-Ogievskiy
2019-06-06 15:41 ` Vladimir Sementsov-Ogievskiy [this message]
2019-06-06 15:41 ` [Qemu-devel] [PATCH 4/4] block: drop bs->job Vladimir Sementsov-Ogievskiy
2019-06-17 16:58 ` Kevin Wolf
2019-06-18 6:53 ` Vladimir Sementsov-Ogievskiy
2019-06-06 16:37 ` [Qemu-devel] [PATCH 0/4] " no-reply
2019-06-14 10:17 ` Kevin Wolf
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=20190606154132.153330-4-vsementsov@virtuozzo.com \
--to=vsementsov@virtuozzo.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=wencongyang2@huawei.com \
--cc=xiechanglong.d@gmail.com \
/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.