On Fri, 2013-03-22 at 10:23 -0700, Andy Grover wrote:
> On 03/07/2013 05:45 PM, Nicholas A. Bellinger wrote:
> > From: Nicholas Bellinger <[email protected]>
> >
> > This patch refactors existing traditional iscsi RX side PDU handling
> > to use iscsit_transport, and exports the necessary logic for external
> > transport modules.
> >
> > This includes:
> >
> > - Refactor iscsit_handle_scsi_cmd() into PDU setup / processing
> > - Add updated iscsit_handle_scsi_cmd() for tradtional iscsi code
> > - Add iscsit_set_unsoliticed_dataout() wrapper
> > - Refactor iscsit_handle_data_out() into PDU check / processing
> > - Add updated iscsit_handle_data_out() for tradtional iscsi code
> > - Add iscsit_handle_nop_out() + iscsit_handle_task_mgt_cmd() to
> >    accept pre-allocated struct iscsi_cmd
> > - Add iscsit_build_r2ts_for_cmd() RDMAExtentions check to
> >    post ISTATE_SEND_R2T to TX immediate queue to start RDMA READ
> > - Refactor main traditional iscsi iscsi_target_rx_thread() PDU switch
> >    into iscsi_target_rx_opcode() using iscsit_allocate_cmd()
> > - Turn iscsi_target_rx_thread() process context into NOP for
> >    ib_isert side work-queue.
> >
> > Signed-off-by: Nicholas Bellinger <[email protected]>
> > ---
> >   drivers/target/iscsi/iscsi_target.c      |  463 
> > +++++++++++++++++++-----------
> >   drivers/target/iscsi/iscsi_target.h      |    1 +
> >   drivers/target/iscsi/iscsi_target_erl1.c |    8 +-
> >   drivers/target/iscsi/iscsi_target_util.c |    1 +
> >   4 files changed, 295 insertions(+), 178 deletions(-)
> >
> > diff --git a/drivers/target/iscsi/iscsi_target.c 
> > b/drivers/target/iscsi/iscsi_target.c
> > index 9cd7b7b..fbdc75a 100644
> > --- a/drivers/target/iscsi/iscsi_target.c
> > +++ b/drivers/target/iscsi/iscsi_target.c
> > @@ -703,6 +703,7 @@ int iscsit_add_reject_from_cmd(
> >
> >     return (!fail_conn) ? 0 : -1;
> >   }
> > +EXPORT_SYMBOL(iscsit_add_reject_from_cmd);
> >
> >   /*
> >    * Map some portion of the allocated scatterlist to an iovec, suitable for
> > @@ -793,12 +794,10 @@ static int iscsit_allocate_iovecs(struct iscsi_cmd 
> > *cmd)
> >     return 0;
> >   }
> >
> > -static int iscsit_handle_scsi_cmd(
> > -   struct iscsi_conn *conn,
> > -   unsigned char *buf)
> > +int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
> > +                     unsigned char *buf)
> >   {
> > -   int data_direction, payload_length, cmdsn_ret = 0, immed_ret;
> > -   struct iscsi_cmd *cmd = NULL;
> > +   int data_direction, payload_length;
> >     struct iscsi_scsi_req *hdr;
> >     int iscsi_task_attr;
> >     int sam_task_attr;
> > @@ -821,8 +820,8 @@ static int iscsit_handle_scsi_cmd(
> >         !(hdr->flags & ISCSI_FLAG_CMD_FINAL)) {
> >             pr_err("ISCSI_FLAG_CMD_WRITE & ISCSI_FLAG_CMD_FINAL"
> >                             " not set. Bad iSCSI Initiator.\n");
> > -           return iscsit_add_reject(ISCSI_REASON_BOOKMARK_INVALID, 1,
> > -                           buf, conn);
> > +           return iscsit_add_reject_from_cmd(ISCSI_REASON_BOOKMARK_INVALID,
> > +                           1, 1, buf, cmd);
> 
> Add #defines to give more meaning to these "1" parameters?
> 

These should all become bool.  Changing these in this particular patch
is going to be messy, so i'd prefer this done in a separate patch.

<SNIP>

> > @@ -1065,21 +1067,33 @@ attach_cmd:
> >      * thread.  They are processed in CmdSN order by
> >      * iscsit_check_received_cmdsn() below.
> >      */
> > -   if (cmd->sense_reason) {
> > -           immed_ret = IMMEDIATE_DATA_NORMAL_OPERATION;
> > -           goto after_immediate_data;
> > -   }
> > +   if (cmd->sense_reason)
> > +           return 1;
> >     /*
> >      * Call directly into transport_generic_new_cmd() to perform
> >      * the backend memory allocation.
> >      */
> >     cmd->sense_reason = transport_generic_new_cmd(&cmd->se_cmd);
> > -   if (cmd->sense_reason) {
> > -           immed_ret = IMMEDIATE_DATA_NORMAL_OPERATION;
> > +   if (cmd->sense_reason)
> > +           return 1;
> > +
> > +   return 0;
> > +}
> > +EXPORT_SYMBOL(iscsit_process_scsi_cmd);
> 
> Unneeded? not used outside iscsi_target.c afact.
> 

It's used by isert_core.c:isert_handle_scsi_cmd() for iscsi_cmd
submission.

<SNIP>

> > +int iscsit_handle_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
> > +                      unsigned char *buf)
> > +{
> > +   struct iscsi_scsi_req *hdr = (struct iscsi_scsi_req *)buf;
> > +   int rc, immed_data;
> > +   bool dump_payload = false;
> > +
> > +   rc = iscsit_setup_scsi_cmd(conn, cmd, buf);
> > +   if (rc < 0)
> > +           return rc;
> > +   /*
> > +    * Allocation iovecs needed for struct socket operations for
> > +    * traditional iSCSI block I/O.
> > +    */
> > +   if (iscsit_allocate_iovecs(cmd) < 0) {
> > +           return iscsit_add_reject_from_cmd(
> > +                           ISCSI_REASON_BOOKMARK_NO_RESOURCES,
> > +                           1, 0, buf, cmd);
> > +   }
> > +   immed_data = cmd->immediate_data;
> > +
> > +   rc = iscsit_process_scsi_cmd(conn, cmd, hdr);
> > +   if (rc < 0)
> > +           return rc;
> > +   else if (rc > 0)
> > +           dump_payload = true;
> 
> iscsit_process_scsi_cmd() returning 1 is debugging code?
> 

No, this is to signal to when to dump the immediate data payload
(dump_payload = true).

However, dump_payload was not being passed correct to
iscsit_get_immediate_data(), so fixing that now with the following.

Thanks,

--nab

diff --git a/drivers/target/iscsi/iscsi_target.c 
b/drivers/target/iscsi/iscsi_target.c
index 4a79a6c..cc0ecba 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1184,7 +1184,7 @@ int iscsit_handle_scsi_cmd(struct iscsi_conn *conn, 
struct iscsi_cmd *cmd,
        if (!immed_data)
                return 0;
 
-       return iscsit_get_immediate_data(cmd, hdr, cmd->first_burst_len);
+       return iscsit_get_immediate_data(cmd, hdr, dump_payload);
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to