* optimize queue->lock, use atomic operations if possible * do we need ctask->sg_count? can we use ctask->sg instead? * optimize HEAD + SENDBUF logic, no need to have two "if" statements: } ctask->r2t = r2t; ctask->in_progress = IN_PROGRESS_SOLICIT_WRITE; /* can goto to fixme */ } if (ctask->in_progress == IN_PROGRESS_SOLICIT_WRITE) { r2t = ctask->r2t; _solicit_again: /* * send Data-Out's payload whitnin this R2T sequence. */ if (r2t->data_count) { fixme: len = r2t->sendbuf.size - r2t->sendbuf.sent; if (len > r2t->data_count) { len = r2t->data_count; * data_xmit(): recover sendpage() error. * make sense to split data_recv() and exctract data-in processing into separated function. Call it from header processing context directly if there is an iSCSI data and from data_recv() later on conn state machine processing. * restructure header processing code into set of small functions. * prefetch in tcp_copy_bits(). * support residual_count in case of scatter-gather Data-In. As of today, only non-sg Scsi_Cmnd's are working. But I can amazing some target which will send residual_count in the middle of scatter-gather Data-In. * daemon should manage its own ITT-space * send_pdu() should use new "anon" poll of mtasks. the anon-mtask will be freed right after its xmited * make InitiatorAlias configurable: see get_iscsi_initiatorname() * Ming> ./usr/iscsiadm -m discovery -t st -p littleboy.iplink.net iscsiadm: cannot resolve host name littleboy.iplink