Commit 8164102f authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by Kevin Wolf
Browse files

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: default avatarKevin Wolf <kwolf@redhat.com>
Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 68d00e42
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -140,23 +140,22 @@ 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);
    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);
        }
    }

    dinfo->auto_del = 1;
}
+14 −0
Original line number Diff line number Diff line
@@ -198,6 +198,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)
{
+9 −0
Original line number Diff line number Diff line
@@ -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.