diff options
author | Keith Busch <[email protected]> | 2021-05-17 15:36:43 -0700 |
---|---|---|
committer | Christoph Hellwig <[email protected]> | 2021-05-19 08:33:42 +0200 |
commit | a0fdd1418007f83565d3f2e04b47923ba93a9b8c (patch) | |
tree | f605ad8eb9589ecf11e75d8c1b0853b99ba74749 /drivers/usb/cdns3/cdns3-debug.h | |
parent | 825619b09ad351894d2c6fb6705f5b3711d145c7 (diff) |
nvme-tcp: rerun io_work if req_list is not empty
A possible race condition exists where the request to send data is
enqueued from nvme_tcp_handle_r2t()'s will not be observed by
nvme_tcp_send_all() if it happens to be running. The driver relies on
io_work to send the enqueued request when it is runs again, but the
concurrently running nvme_tcp_send_all() may not have released the
send_mutex at that time. If no future commands are enqueued to re-kick
the io_work, the request will timeout in the SEND_H2C state, resulting
in a timeout error like:
nvme nvme0: queue 1: timeout request 0x3 type 6
Ensure the io_work continues to run as long as the req_list is not empty.
Fixes: db5ad6b7f8cdd ("nvme-tcp: try to send request in queue_rq context")
Signed-off-by: Keith Busch <[email protected]>
Reviewed-by: Sagi Grimberg <[email protected]>
Signed-off-by: Christoph Hellwig <[email protected]>
Diffstat (limited to 'drivers/usb/cdns3/cdns3-debug.h')
0 files changed, 0 insertions, 0 deletions