Commit 9ebbfe4
nvme-tcp: avoid request double completion for concurrent nvme_tcp_timeout
Each name space has a request queue, if complete request long time,
multi request queues may have time out requests at the same time,
nvme_tcp_timeout will execute concurrently. Multi requests in different
request queues may be queued in the same tcp queue, multi
nvme_tcp_timeout may call nvme_tcp_stop_queue at the same time.
The first nvme_tcp_stop_queue will clear NVME_TCP_Q_LIVE and continue
stopping the tcp queue(cancel io_work), but the others check
NVME_TCP_Q_LIVE is already cleared, and then directly complete the
requests, complete request before the io work is completely canceled may
lead to a use-after-free condition.
Add a multex lock to serialize nvme_tcp_stop_queue.
Signed-off-by: Chao Leng <lengchao@huawei.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>1 parent 7674073 commit 9ebbfe4
1 file changed
Lines changed: 10 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
79 | 80 | | |
80 | 81 | | |
81 | 82 | | |
| |||
1219 | 1220 | | |
1220 | 1221 | | |
1221 | 1222 | | |
| 1223 | + | |
1222 | 1224 | | |
1223 | 1225 | | |
1224 | 1226 | | |
| |||
1380 | 1382 | | |
1381 | 1383 | | |
1382 | 1384 | | |
| 1385 | + | |
1383 | 1386 | | |
1384 | 1387 | | |
1385 | 1388 | | |
| |||
1398 | 1401 | | |
1399 | 1402 | | |
1400 | 1403 | | |
1401 | | - | |
| 1404 | + | |
1402 | 1405 | | |
1403 | 1406 | | |
1404 | 1407 | | |
| |||
1507 | 1510 | | |
1508 | 1511 | | |
1509 | 1512 | | |
| 1513 | + | |
| 1514 | + | |
1510 | 1515 | | |
1511 | 1516 | | |
1512 | 1517 | | |
| |||
1534 | 1539 | | |
1535 | 1540 | | |
1536 | 1541 | | |
1537 | | - | |
1538 | | - | |
1539 | | - | |
| 1542 | + | |
| 1543 | + | |
| 1544 | + | |
| 1545 | + | |
1540 | 1546 | | |
1541 | 1547 | | |
1542 | 1548 | | |
| |||
0 commit comments