[Stgt-devel] Adding iser_task object (was: dd fails with iSER)
Erez Zilber
erezz
Wed Aug 15 21:28:04 CEST 2007
>erezz at voltaire.com wrote on Wed, 15 Aug 2007 12:26 +0300:
>> At first, I thought that this will be easy to fix - just move the va &
>> stag from the conn object to the task object. However, when ep_read
>> (iscsi_iser_read in iSER's case) is called, the task isn't allocated
>> yet. iSER must save the data from the received iSER header in some task
>> object (e.g. iser_task).
>
> You could add a new transport call .ep_task_init and call that near
> the iscsi_alloc_task() in iscsi_scsi_cmd_rx_start(). It gets the
> newly allocated struct iscsi_task. The TCP case would be a noop.
> The RDMA case would take the cached rem_stag values from the
> connection structure and stick them in the task struct. This is all
> done synchronously while working on the single received PDU so
> should be safe. You only need to call ->ep_task_init(task) in the
> SCSI command case, not TM functions or other places that will not do
> RDMA data transfers.
Do you mean to say that after do_recv is called and the va & stag are saved on conn_info, we can be sure that no other new command will be received before iscsi_alloc task is called? If yes, it should be easy, and I already have some of the code for it.
Erez
More information about the stgt
mailing list