Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69ef68ce authored by Li Dongyang's avatar Li Dongyang Committed by Konrad Rzeszutek Wilk
Browse files

xen-blkfront: fix a deadlock while handling discard response



When we get -EOPNOTSUPP response for a discard request, we will clear
the discard flag on the request queue so we won't attempt to send discard
requests to backend again, and this should be protected under rq->queue_lock.
However, when we setup the request queue, we pass blkif_io_lock to
blk_init_queue so rq->queue_lock is blkif_io_lock indeed, and this lock
is already taken when we are in blkif_interrpt, so remove the
spin_lock/spin_unlock when we clear the discard flag or we will end up
with deadlock here

Signed-off-by: default avatarLi Dongyang <lidongyang@novell.com>
[v1: Updated description a bit and removed comment from source]
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent ed30bf31
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -747,9 +747,7 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
					   info->gd->disk_name);
				error = -EOPNOTSUPP;
				info->feature_discard = 0;
				spin_lock(rq->queue_lock);
				queue_flag_clear(QUEUE_FLAG_DISCARD, rq);
				spin_unlock(rq->queue_lock);
			}
			__blk_end_request_all(req, error);
			break;