Searched hist:"533 ac412fdb4cbc8ce282b1ee1991e03b2717625" (Results 1 – 1 of 1) sorted by relevance
/linux/drivers/scsi/ |
H A D | libiscsi.c | diff 533ac412fdb4cbc8ce282b1ee1991e03b2717625 Fri Jun 17 00:45:54 CEST 2022 Mike Christie <michael.christie@oracle.com> scsi: iscsi: Remove unneeded task state check
Commit 5923d64b7ab6 ("scsi: libiscsi: Drop taskqueuelock") added an extra task->state because for commit 6f8830f5bbab ("scsi: libiscsi: add lock around task lists to fix list corruption regression") we didn't know why we ended up with cmds on the list and thought it might have been a bad target sending a response while we were still sending the cmd. We were never able to get a target to send us a response early, because it turns out the bug was just a race in libiscsi/libiscsi_tcp where:
1. iscsi_tcp_r2t_rsp() queues a r2t to tcp_task->r2tqueue.
2. iscsi_tcp_task_xmit() runs iscsi_tcp_get_curr_r2t() and sees we have a r2t. It dequeues it and iscsi_tcp_task_xmit() starts to process it.
3. iscsi_tcp_r2t_rsp() runs iscsi_requeue_task() and puts the task on the requeue list.
4. iscsi_tcp_task_xmit() sends the data for r2t. This is the final chunk of data, so the cmd is done.
5. target sends the response.
6. On a different CPU from #3, iscsi_complete_task() processes the response. Since there was no common lock for the list, the lists/tasks pointers are not fully in sync, so could end up with list corruption.
Since it was just a race on our side, remove the extra check and fix up the comments.
Link: https://lore.kernel.org/r/20220616224557.115234-7-michael.christie@oracle.com Reviewed-by: Wu Bo <wubo40@huawei.com> Reviewed-by: Lee Duncan <lduncan@suse.com> Signed-off-by: Mike Christie <michael.christie@oracle.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|