Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 Jul 2013 19:57:19 +0000 (12:57 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 Jul 2013 19:57:19 +0000 (12:57 -0700)
Pull SCSI target updates from Nicholas Bellinger:
 "Lots of activity this round on performance improvements in target-core
  while benchmarking the prototype scsi-mq initiator code with
  vhost-scsi fabric ports, along with a number of iscsi/iser-target
  improvements and hardening fixes for exception path cases post v3.10
  merge.

  The highlights include:

   - Make persistent reservations APTPL buffer allocated on-demand, and
     drop per t10_reservation buffer.  (grover)
   - Make virtual LUN=0 a NULLIO device, and skip allocation of NULLIO
     device pages (grover)
   - Add transport_cmd_check_stop write_pending bit to avoid extra
     access of ->t_state_lock is WRITE I/O submission fast-path.  (nab)
   - Drop unnecessary CMD_T_DEV_ACTIVE check from
     transport_lun_remove_cmd to avoid extra access of ->t_state_lock in
     release fast-path.  (nab)
   - Avoid extra t_state_lock access in __target_execute_cmd fast-path
     (nab)
   - Drop unnecessary vhost-scsi wait_for_tasks=true usage +
     ->t_state_lock access in release fast-path.  (nab)
   - Convert vhost-scsi to use modern se_cmd->cmd_kref
     TARGET_SCF_ACK_KREF usage (nab)
   - Add tracepoints for SCSI commands being processed (roland)
   - Refactoring of iscsi-target handling of ISCSI_OP_NOOP +
     ISCSI_OP_TEXT to be transport independent (nab)
   - Add iscsi-target SendTargets=$IQN support for in-band discovery
     (nab)
   - Add iser-target support for in-band discovery (nab + Or)
   - Add iscsi-target demo-mode TPG authentication context support (nab)
   - Fix isert_put_reject payload buffer post (nab)
   - Fix iscsit_add_reject* usage for iser (nab)
   - Fix iscsit_sequence_cmd reject handling for iser (nab)
   - Fix ISCSI_OP_SCSI_TMFUNC handling for iser (nab)
   - Fix session reset bug with RDMA_CM_EVENT_DISCONNECTED (nab)

  The last five iscsi/iser-target items are CC'ed to stable, as they do
  address issues present in v3.10 code.  They are certainly larger than
  I'd like for stable patch set, but are important to ensure proper
  REJECT exception handling in iser-target for 3.10.y"

* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (51 commits)
  iser-target: Ignore non TEXT + LOGOUT opcodes for discovery
  target: make queue_tm_rsp() return void
  target: remove unused codes from enum tcm_tmrsp_table
  iscsi-target: kstrtou* configfs attribute parameter cleanups
  iscsi-target: Fix tfc_tpg_auth_cit configfs length overflow
  iscsi-target: Fix tfc_tpg_nacl_auth_cit configfs length overflow
  iser-target: Add support for ISCSI_OP_TEXT opcode + payload handling
  iser-target: Rename sense_buf_[dma,len] to pdu_[dma,len]
  iser-target: Add vendor_err debug output
  target: Add (obsolete) checking for PMI/LBA fields in READ CAPACITY(10)
  target: Return correct sense data for IO past the end of a device
  target: Add tracepoints for SCSI commands being processed
  iser-target: Fix session reset bug with RDMA_CM_EVENT_DISCONNECTED
  iscsi-target: Fix ISCSI_OP_SCSI_TMFUNC handling for iser
  iscsi-target: Fix iscsit_sequence_cmd reject handling for iser
  iscsi-target: Fix iscsit_add_reject* usage for iser
  iser-target: Fix isert_put_reject payload buffer post
  iscsi-target: missing kfree() on error path
  iscsi-target: Drop left-over iscsi_conn->bad_hdr
  target: Make core_scsi3_update_and_write_aptpl return sense_reason_t
  ...

1  2 
drivers/infiniband/ulp/isert/ib_isert.c
drivers/scsi/qla2xxx/tcm_qla2xxx.c
drivers/target/iscsi/iscsi_target_configfs.c
drivers/target/iscsi/iscsi_target_erl0.c
drivers/target/iscsi/iscsi_target_nego.c
drivers/vhost/scsi.c

Simple merge
@@@ -555,28 -564,22 +567,22 @@@ tcm_vhost_allocate_evt(struct vhost_scs
        return evt;
  }
  
 -static void vhost_scsi_free_cmd(struct tcm_vhost_cmd *tv_cmd)
 +static void vhost_scsi_free_cmd(struct tcm_vhost_cmd *cmd)
  {
 -      struct se_cmd *se_cmd = &tv_cmd->tvc_se_cmd;
 +      struct se_cmd *se_cmd = &cmd->tvc_se_cmd;
  
        /* TODO locking against target/backend threads? */
-       transport_generic_free_cmd(se_cmd, 1);
+       transport_generic_free_cmd(se_cmd, 0);
  
-       if (cmd->tvc_sgl_count) {
-               u32 i;
-               for (i = 0; i < cmd->tvc_sgl_count; i++)
-                       put_page(sg_page(&cmd->tvc_sgl[i]));
-               kfree(cmd->tvc_sgl);
-       }
-       tcm_vhost_put_inflight(cmd->inflight);
+ }
  
-       kfree(cmd);
+ static int vhost_scsi_check_stop_free(struct se_cmd *se_cmd)
+ {
+       return target_put_sess_cmd(se_cmd->se_sess, se_cmd);
  }
  
 -static void tcm_vhost_do_evt_work(struct vhost_scsi *vs,
 -      struct tcm_vhost_evt *evt)
 +static void
 +tcm_vhost_do_evt_work(struct vhost_scsi *vs, struct tcm_vhost_evt *evt)
  {
        struct vhost_virtqueue *vq = &vs->vqs[VHOST_SCSI_VQ_EVT].vq;
        struct virtio_scsi_event *event = &evt->event;
@@@ -850,13 -847,13 +856,13 @@@ static void tcm_vhost_submission_work(s
        } else {
                sg_ptr = NULL;
        }
 -      tv_nexus = tv_cmd->tvc_nexus;
 +      tv_nexus = cmd->tvc_nexus;
  
        rc = target_submit_cmd_map_sgls(se_cmd, tv_nexus->tvn_se_sess,
 -                      tv_cmd->tvc_cdb, &tv_cmd->tvc_sense_buf[0],
 -                      tv_cmd->tvc_lun, tv_cmd->tvc_exp_data_len,
 -                      tv_cmd->tvc_task_attr, tv_cmd->tvc_data_direction,
 -                      TARGET_SCF_ACK_KREF, sg_ptr, tv_cmd->tvc_sgl_count,
 +                      cmd->tvc_cdb, &cmd->tvc_sense_buf[0],
 +                      cmd->tvc_lun, cmd->tvc_exp_data_len,
 +                      cmd->tvc_task_attr, cmd->tvc_data_direction,
-                       0, sg_ptr, cmd->tvc_sgl_count,
++                      TARGET_SCF_ACK_KREF, sg_ptr, cmd->tvc_sgl_count,
                        sg_bidi_ptr, sg_no_bidi);
        if (rc < 0) {
                transport_send_check_condition_and_sense(se_cmd,