On 6/7/22 8:19 AM, Dmitry Bogdanov wrote: > In function iscsi_data_xmit (TX worker) there is walking through the > queue of new SCSI commands that is replenished in parallell. And only > after that queue got emptied the function will start sending pending > DataOut PDUs. That lead to DataOut timer time out on target side and > to connection reinstatment. > > This patch swaps walking through the new commands queue and the pending > DataOut queue. To make a preference to ongoing commands over new ones. > ... > task = list_entry(conn->cmdqueue.next, struct iscsi_task, > @@ -1594,28 +1616,10 @@ static int iscsi_data_xmit(struct iscsi_conn *conn) > */ > if (!list_empty(&conn->mgmtqueue)) > goto check_mgmt; > + if (!list_empty(&conn->requeue)) > + goto check_requeue; Hey, I've been posting a similar patch: https://www.spinics.net/lists/linux-scsi/msg156939.html A problem I hit is a possible pref regression so I tried to allow us to start up a burst of cmds in parallel. It's pretty simple where we allow up to a queue's worth of cmds to start. It doesn't try to check that all cmds are from the same queue or anything fancy to try and keep the code simple. Mostly just assuming users might try to bunch cmds together during submission or they might hit the queue plugging code. What do you think?