- In the iSCSI CPL handlers, do not rely on the ulpcb/icl_conn when in
the middle of assembling a PDU. This is so we don't have to grab
various locks and evaluate the kernel state of the connection multiple
times. Instead, the state is evaluated once after the entire PDU is
received. This requires another ULP specific item in toepcb (ulpcb2).
- If there is data in the so_rcv sockbuf of a connection in iSCSI ULP
mode it must be from before the connection got promoted to ULP mode.
Convert the contents of the sockbuf to PDUs and deliver them to ICL.
Do this before delivering the PDUs received on the "normal" ULP path.
- The receive path within ICL is allowed to sleep so it's not
appropriate to deliver PDUs to ICL from the driver's ithread, or from
any other thread with any mutex held. Use worker threads (created
back in r285650 but unused till now) to dispatch received PDUs to ICL.
Assign a worker thread to each connection. For now everything goes to
the first thread.
- Prevent various bad races that are possible when more than one of
a) rx ithread, b) worker thread, and c) icl_conn_close are active at
the same time.