Blame SOURCES/kvm-blockjob-Remove-the-job-from-the-list-earlier-in-blo.patch

9bac43
From f64ca42ce16a0df89d4abba838d00ea7bc7e4da9 Mon Sep 17 00:00:00 2001
9bac43
From: Jeffrey Cody <jcody@redhat.com>
9bac43
Date: Thu, 30 Nov 2017 22:49:11 +0100
9bac43
Subject: [PATCH 07/21] blockjob: Remove the job from the list earlier in
9bac43
 block_job_unref()
9bac43
9bac43
RH-Author: Jeffrey Cody <jcody@redhat.com>
9bac43
Message-id: <8fc0c61d51c41fdde7d809502e5025371f89c4c7.1511985875.git.jcody@redhat.com>
9bac43
Patchwork-id: 78045
9bac43
O-Subject: [RHV7.5 qemu-kvm-rhev PATCH 07/11] blockjob: Remove the job from the list earlier in block_job_unref()
9bac43
Bugzilla: 1506531
9bac43
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
9bac43
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
9bac43
RH-Acked-by: John Snow <jsnow@redhat.com>
9bac43
9bac43
From: Alberto Garcia <berto@igalia.com>
9bac43
9bac43
When destroying a block job in block_job_unref() we should remove it
9bac43
from the job list before calling block_job_remove_all_bdrv().
9bac43
9bac43
This is because removing the BDSs can trigger an aio_poll() and wake
9bac43
up other jobs that might attempt to use the block job list. If that
9bac43
happens the job we're currently destroying should not be in that list
9bac43
anymore.
9bac43
9bac43
Signed-off-by: Alberto Garcia <berto@igalia.com>
9bac43
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
9bac43
(cherry picked from commit 0a3e155f3f5ec9b6f12d00894c7701b3cbb66590)
9bac43
Signed-off-by: Jeff Cody <jcody@redhat.com>
9bac43
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
9bac43
---
9bac43
 blockjob.c | 2 +-
9bac43
 1 file changed, 1 insertion(+), 1 deletion(-)
9bac43
9bac43
diff --git a/blockjob.c b/blockjob.c
9bac43
index c3cf9a2..2509bba 100644
9bac43
--- a/blockjob.c
9bac43
+++ b/blockjob.c
9bac43
@@ -152,6 +152,7 @@ void block_job_unref(BlockJob *job)
9bac43
 {
9bac43
     if (--job->refcnt == 0) {
9bac43
         BlockDriverState *bs = blk_bs(job->blk);
9bac43
+        QLIST_REMOVE(job, job_list);
9bac43
         bs->job = NULL;
9bac43
         block_job_remove_all_bdrv(job);
9bac43
         blk_remove_aio_context_notifier(job->blk,
9bac43
@@ -160,7 +161,6 @@ void block_job_unref(BlockJob *job)
9bac43
         blk_unref(job->blk);
9bac43
         error_free(job->blocker);
9bac43
         g_free(job->id);
9bac43
-        QLIST_REMOVE(job, job_list);
9bac43
         g_free(job);
9bac43
     }
9bac43
 }
9bac43
-- 
9bac43
1.8.3.1
9bac43