Pull request
Fiona's virtio-scsi TMF deadlock fix. Paolo: I merged the scsi fix in my block tree, but realize now that it belongs to the scsi subsystem. Sorry about that, I'll be more careful next time. Please reply if you want to handle this patch yourself. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmj/wl0ACgkQnKSrs4Gr c8ga0Qf/TaIXqp2xyFmKCmCxbruNvZZtD96qBmK694AXm8+exZcXkGTuFyBcxC6T 1bHaHNBCRw5mu0h6T88lHT5QQ7h7AvZnm6gOa+6MpkeAY59DP0zDGF4GyCC4enUz D9kAcC2UGKXDSTv8oyqpFq/ZOamW9T7XI+rjpN+kIr5/Z+vG+IuBFX9atIk5es41 vuoYCuXldZNcOYeA88L8F0O7ikwpGJk3RI8lJFVPGfGju94BpXiOcP7Csqvkjk8r F1p6Uy/GD7031em/sVxvezOpRsC62dtnItYFBwt8FGjtbCN7HNy9bCvoM6mIVK0n B2+Rh7oQeDRVAJIMHtSXtJtuA6pPDw== =P138 -----END PGP SIGNATURE----- Merge tag 'block-pull-request' of https://gitlab.com/stefanha/qemu into staging Pull request Fiona's virtio-scsi TMF deadlock fix. Paolo: I merged the scsi fix in my block tree, but realize now that it belongs to the scsi subsystem. Sorry about that, I'll be more careful next time. Please reply if you want to handle this patch yourself. # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmj/wl0ACgkQnKSrs4Gr # c8ga0Qf/TaIXqp2xyFmKCmCxbruNvZZtD96qBmK694AXm8+exZcXkGTuFyBcxC6T # 1bHaHNBCRw5mu0h6T88lHT5QQ7h7AvZnm6gOa+6MpkeAY59DP0zDGF4GyCC4enUz # D9kAcC2UGKXDSTv8oyqpFq/ZOamW9T7XI+rjpN+kIr5/Z+vG+IuBFX9atIk5es41 # vuoYCuXldZNcOYeA88L8F0O7ikwpGJk3RI8lJFVPGfGju94BpXiOcP7Csqvkjk8r # F1p6Uy/GD7031em/sVxvezOpRsC62dtnItYFBwt8FGjtbCN7HNy9bCvoM6mIVK0n # B2+Rh7oQeDRVAJIMHtSXtJtuA6pPDw== # =P138 # -----END PGP SIGNATURE----- # gpg: Signature made Mon 27 Oct 2025 08:05:01 PM CET # gpg: using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [unknown] # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * tag 'block-pull-request' of https://gitlab.com/stefanha/qemu: hw/scsi: avoid deadlock upon TMF request cancelling with VirtIO Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
e77134d4d4
1 changed files with 13 additions and 1 deletions
|
|
@ -339,6 +339,7 @@ static void virtio_scsi_do_tmf_aio_context(void *opaque)
|
|||
SCSIDevice *d = virtio_scsi_device_get(s, tmf->req.tmf.lun);
|
||||
SCSIRequest *r;
|
||||
bool match_tag;
|
||||
g_autoptr(GList) reqs = NULL;
|
||||
|
||||
if (!d) {
|
||||
tmf->resp.tmf.response = VIRTIO_SCSI_S_BAD_TARGET;
|
||||
|
|
@ -374,10 +375,21 @@ static void virtio_scsi_do_tmf_aio_context(void *opaque)
|
|||
if (match_tag && cmd_req->req.cmd.tag != tmf->req.tmf.tag) {
|
||||
continue;
|
||||
}
|
||||
virtio_scsi_tmf_cancel_req(tmf, r);
|
||||
/*
|
||||
* Cannot cancel directly, because scsi_req_dequeue() would deadlock
|
||||
* when attempting to acquire the request_lock a second time. Taking
|
||||
* a reference here is paired with an unref after cancelling below.
|
||||
*/
|
||||
scsi_req_ref(r);
|
||||
reqs = g_list_prepend(reqs, r);
|
||||
}
|
||||
}
|
||||
|
||||
for (GList *elem = g_list_first(reqs); elem; elem = g_list_next(elem)) {
|
||||
virtio_scsi_tmf_cancel_req(tmf, elem->data);
|
||||
scsi_req_unref(elem->data);
|
||||
}
|
||||
|
||||
/* Incremented by virtio_scsi_do_tmf() */
|
||||
virtio_scsi_tmf_dec_remaining(tmf);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue