/* Send the Data in a sequence of Data Out PDUs one by one. */
EFI_STATUS IScsiSendDataOutPduSequence(IN UINT8 *Data, IN UINT64 Lun, IN ISCSI_TCB *Tcb)
/* Send the Data in a sequence of Data Out PDUs one by one. */
EFI_STATUS IScsiSendDataOutPduSequence(IN UINT8 *Data, IN UINT64 Lun, IN ISCSI_TCB *Tcb)
{
  LIST_ENTRY  *DataOutPduList;
  LIST_ENTRY  *Entry;
  NET_BUF     *Pdu;
  EFI_STATUS  Status;
  DataOutPduList = IScsiGenerateDataOutPduSequence (Data, Tcb, Lun);
  if (DataOutPduList == NULL) {
    return EFI_OUT_OF_RESOURCES;
  }
  Status = EFI_SUCCESS;
  NET_LIST_FOR_EACH (Entry, DataOutPduList) {
    Pdu = NET_LIST_USER_STRUCT (Entry, NET_BUF, List);
    Status = TcpIoTransmit (&Tcb->Conn->TcpIo, Pdu);
    if (EFI_ERROR (Status)) {
      break;
    }
  }
  IScsiFreeNbufList (DataOutPduList);
  return Status;
}