qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

blockdev: blockdev_mark_auto_del: drop usage of bs->job

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>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>

authored by

Vladimir Sementsov-Ogievskiy and committed by
Kevin Wolf
8164102f 68d00e42

+31 -9
+8 -9
blockdev.c
··· 140 140 void blockdev_mark_auto_del(BlockBackend *blk) 141 141 { 142 142 DriveInfo *dinfo = blk_legacy_dinfo(blk); 143 - BlockDriverState *bs = blk_bs(blk); 144 - AioContext *aio_context; 143 + BlockJob *job; 145 144 146 145 if (!dinfo) { 147 146 return; 148 147 } 149 148 150 - if (bs) { 151 - aio_context = bdrv_get_aio_context(bs); 152 - aio_context_acquire(aio_context); 149 + for (job = block_job_next(NULL); job; job = block_job_next(job)) { 150 + if (block_job_has_bdrv(job, blk_bs(blk))) { 151 + AioContext *aio_context = job->job.aio_context; 152 + aio_context_acquire(aio_context); 153 + 154 + job_cancel(&job->job, false); 153 155 154 - if (bs->job) { 155 - job_cancel(&bs->job->job, false); 156 + aio_context_release(aio_context); 156 157 } 157 - 158 - aio_context_release(aio_context); 159 158 } 160 159 161 160 dinfo->auto_del = 1;
+14
blockjob.c
··· 198 198 job->nodes = NULL; 199 199 } 200 200 201 + bool block_job_has_bdrv(BlockJob *job, BlockDriverState *bs) 202 + { 203 + GSList *el; 204 + 205 + for (el = job->nodes; el; el = el->next) { 206 + BdrvChild *c = el->data; 207 + if (c->bs == bs) { 208 + return true; 209 + } 210 + } 211 + 212 + return false; 213 + } 214 + 201 215 int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs, 202 216 uint64_t perm, uint64_t shared_perm, Error **errp) 203 217 {
+9
include/block/blockjob.h
··· 122 122 void block_job_remove_all_bdrv(BlockJob *job); 123 123 124 124 /** 125 + * block_job_has_bdrv: 126 + * @job: The block job 127 + * 128 + * Searches for @bs in the list of nodes that are involved in the 129 + * job. 130 + */ 131 + bool block_job_has_bdrv(BlockJob *job, BlockDriverState *bs); 132 + 133 + /** 125 134 * block_job_set_speed: 126 135 * @job: The job to set the speed for. 127 136 * @speed: The new value