1. 07 4月, 2014 4 次提交
    • N
      target: Add TFO->abort_task for aborted task resources release · 131e6abc
      Nicholas Bellinger 提交于
      Now that TASK_ABORTED status is not generated for all cases by
      TMR ABORT_TASK + LUN_RESET, a new TFO->abort_task() caller is
      necessary in order to give fabric drivers a chance to unmap
      hardware / software resources before the se_cmd descriptor is
      released via the normal TFO->release_cmd() codepath.
      
      This patch adds TFO->aborted_task() in core_tmr_abort_task()
      in place of the original transport_send_task_abort(), and
      also updates all fabric drivers to implement this caller.
      
      The fabric drivers that include changes to perform cleanup
      via ->aborted_task() are:
      
        - iscsi-target
        - iser-target
        - srpt
        - tcm_qla2xxx
      
      The fabric drivers that currently set ->aborted_task() to
      NOPs are:
      
        - loopback
        - tcm_fc
        - usb-gadget
        - sbp-target
        - vhost-scsi
      
      For the latter five, there appears to be no additional cleanup
      required before invoking TFO->release_cmd() to release the
      se_cmd descriptor.
      
      v2 changes:
        - Move ->aborted_task() call into transport_cmd_finish_abort (Alex)
      
      Cc: Alex Leung <amleung21@yahoo.com>
      Cc: Mark Rustad <mark.d.rustad@intel.com>
      Cc: Roland Dreier <roland@kernel.org>
      Cc: Vu Pham <vu@mellanox.com>
      Cc: Chris Boot <bootc@bootc.net>
      Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
      Cc: Saurav Kashyap <saurav.kashyap@qlogic.com>
      Cc: Quinn Tran <quinn.tran@qlogic.com>
      Cc: Sagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      131e6abc
    • A
      iscsi-target: Add missing NopOUT->flag (LMB) sanity check · a3662605
      Arshad Hussain 提交于
      This patch adds check for NopOUT->flag (LMB) which is a mandatory
      as per RFC 3720 Section 10.18.
      
      (Fix up context changes for v3.14-rc code - nab)
      Signed-off-by: NArshad Hussain <arshad.hussain@calsoftinc.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      a3662605
    • S
      Target/configfs: Expose iSCSI network portal group T10-PI support · 8085176f
      Sagi Grimberg 提交于
      User may enable T10-PI support per network portal group. any connection
      established on top of it, will be required to serve protected transactions.
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      8085176f
    • S
      Target/iscsi: Add T10-PI indication for iscsi_portal_group · 5b168dcd
      Sagi Grimberg 提交于
      In case an iscsi portal group will be defined as t10_pi enabled,
      all connections on top of it will support protected transactions.
      
      T10-PI support may require extra reource allocation and maintenance by
      the transport layer, so we don't want to apply them on non-t10_pi network
      portals. This is a hook for the iscsi target layer to signal the transport
      at connection establishment that this connection will carry protected
      transactions.
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      5b168dcd
  2. 05 3月, 2014 3 次提交
    • N
      iscsi/iser-target: Fix isert_conn->state hung shutdown issues · defd8848
      Nicholas Bellinger 提交于
      This patch addresses a couple of different hug shutdown issues
      related to wait_event() + isert_conn->state.  First, it changes
      isert_conn->conn_wait + isert_conn->conn_wait_comp_err from
      waitqueues to completions, and sets ISER_CONN_TERMINATING from
      within isert_disconnect_work().
      
      Second, it splits isert_free_conn() into isert_wait_conn() that
      is called earlier in iscsit_close_connection() to ensure that
      all outstanding commands have completed before continuing.
      
      Finally, it breaks isert_cq_comp_err() into seperate TX / RX
      related code, and adds logic in isert_cq_rx_comp_err() to wait
      for outstanding commands to complete before setting ISER_CONN_DOWN
      and calling complete(&isert_conn->conn_wait_comp_err).
      Acked-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: <stable@vger.kernel.org> #3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      defd8848
    • N
      iscsi/iser-target: Use list_del_init for ->i_conn_node · 5159d763
      Nicholas Bellinger 提交于
      There are a handful of uses of list_empty() for cmd->i_conn_node
      within iser-target code that expect to return false once a cmd
      has been removed from the per connect list.
      
      This patch changes all uses of list_del -> list_del_init in order
      to ensure that list_empty() returns false as expected.
      Acked-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: <stable@vger.kernel.org> #3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      5159d763
    • N
      iscsi-target: Fix iscsit_get_tpg_from_np tpg_state bug · a2a99cea
      Nicholas Bellinger 提交于
      This patch fixes a bug in iscsit_get_tpg_from_np() where the
      tpg->tpg_state sanity check was looking for TPG_STATE_FREE,
      instead of != TPG_STATE_ACTIVE.
      
      The latter is expected during a normal TPG shutdown once the
      tpg_state goes into TPG_STATE_INACTIVE in order to reject any
      new incoming login attempts.
      
      Cc: <stable@vger.kernel.org> #3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      a2a99cea
  3. 13 2月, 2014 1 次提交
  4. 30 1月, 2014 1 次提交
    • A
      target/iscsi: Fix network portal creation race · ee291e63
      Andy Grover 提交于
      When creating network portals rapidly, such as when restoring a
      configuration, LIO's code to reuse existing portals can return a false
      negative if the thread hasn't run yet and set np_thread_state to
      ISCSI_NP_THREAD_ACTIVE. This causes an error in the network stack
      when attempting to bind to the same address/port.
      
      This patch sets NP_THREAD_ACTIVE before the np is placed on g_np_list,
      so even if the thread hasn't run yet, iscsit_get_np will return the
      existing np.
      
      Also, convert np_lock -> np_mutex + hold across adding new net portal
      to g_np_list to prevent a race where two threads may attempt to create
      the same network portal, resulting in one of them failing.
      
      (nab: Add missing mutex_unlocks in iscsit_add_np failure paths)
      (DanC: Fix incorrect spin_unlock -> spin_unlock_bh)
      Signed-off-by: NAndy Grover <agrover@redhat.com>
      Cc: <stable@vger.kernel.org> #3.1+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      ee291e63
  5. 25 1月, 2014 2 次提交
  6. 24 1月, 2014 1 次提交
    • K
      percpu_ida: Make percpu_ida_alloc + callers accept task state bitmask · 6f6b5d1e
      Kent Overstreet 提交于
      This patch changes percpu_ida_alloc() + callers to accept task state
      bitmask for prepare_to_wait() for code like target/iscsi that needs
      it for interruptible sleep, that is provided in a subsequent patch.
      
      It now expects TASK_UNINTERRUPTIBLE when the caller is able to sleep
      waiting for a new tag, or TASK_RUNNING when the caller cannot sleep,
      and is forced to return a negative value when no tags are available.
      
      v2 changes:
        - Include blk-mq + tcm_fc + vhost/scsi + target/iscsi changes
        - Drop signal_pending_state() call
      v3 changes:
        - Only call prepare_to_wait() + finish_wait() when != TASK_RUNNING
          (PeterZ)
      Reported-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Jens Axboe <axboe@kernel.dk>
      Signed-off-by: NKent Overstreet <kmo@daterainc.com>
      Cc: <stable@vger.kernel.org> #3.12+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      6f6b5d1e
  7. 19 1月, 2014 1 次提交
    • N
      iscsi-target: Pre-allocate more tags to avoid ack starvation · 4a4caa29
      Nicholas Bellinger 提交于
      This patch addresses an traditional iscsi-target fabric ack starvation
      issue where iscsit_allocate_cmd() -> percpu_ida_alloc_state() ends up
      hitting slow path percpu-ida code, because iscsit_ack_from_expstatsn()
      is expected to free ack'ed tags after tag allocation.
      
      This is done to take into account the tags waiting to be acknowledged
      and released in iscsit_ack_from_expstatsn(), but who's number are not
      directly limited by the CmdSN Window queue_depth being enforced by
      the target.
      
      So that said, this patch bumps up the pre-allocated number of
      per session tags to:
      
        (max(queue_depth, ISCSIT_MIN_TAGS) * 2) + ISCSIT_EXTRA_TAGS
      
      for good measure to avoid the percpu_ida_alloc_state() slow path.
      
      Cc: <stable@vger.kernel.org> #3.12+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      4a4caa29
  8. 19 12月, 2013 1 次提交
    • N
      iscsi-target: Fix incorrect np->np_thread NULL assignment · db6077fd
      Nicholas Bellinger 提交于
      When shutting down a target there is a race condition between
      iscsit_del_np() and __iscsi_target_login_thread().
      The latter sets the thread pointer to NULL, and the former
      tries to issue kthread_stop() on that pointer without any
      synchronization.
      
      This patch moves the np->np_thread NULL assignment into
      iscsit_del_np(), after kthread_stop() has completed. It also
      removes the signal_pending() + np_state check, and only
      exits when kthread_should_stop() is true.
      Reported-by: NHannes Reinecke <hare@suse.de>
      Cc: <stable@vger.kernel.org> #3.12+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      db6077fd
  9. 12 12月, 2013 2 次提交
  10. 21 11月, 2013 3 次提交
  11. 20 11月, 2013 2 次提交
  12. 14 11月, 2013 1 次提交
  13. 13 11月, 2013 1 次提交
    • N
      iscsi-target: Fix mutex_trylock usage in iscsit_increment_maxcmdsn · 5e8e6b4b
      Nicholas Bellinger 提交于
      This patch fixes a >= v3.10 regression bug with mutex_trylock() usage
      within iscsit_increment_maxcmdsn(), that was originally added to allow
      for a special case where ->cmdsn_mutex was already held from the
      iscsit_execute_cmd() exception path for ib_isert.
      
      When !mutex_trylock() was occuring under contention during normal RX/TX
      process context codepaths, the bug was manifesting itself as the following
      protocol error:
      
        Received CmdSN: 0x000fcbb7 is greater than MaxCmdSN: 0x000fcbb6, protocol error.
        Received CmdSN: 0x000fcbb8 is greater than MaxCmdSN: 0x000fcbb6, protocol error.
      
      This patch simply avoids the direct ib_isert callback in lio_queue_status()
      for the special iscsi_execute_cmd() exception cases, that allows the problematic
      mutex_trylock() usage in iscsit_increment_maxcmdsn() to go away.
      Reported-by: NMoussa Ba <moussaba@micron.com>
      Tested-by: NMoussa Ba <moussaba@micron.com>
      Cc: <stable@vger.kernel.org> # v3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      5e8e6b4b
  14. 08 11月, 2013 1 次提交
  15. 24 10月, 2013 2 次提交
  16. 17 10月, 2013 3 次提交
  17. 04 10月, 2013 3 次提交
    • N
      iscsi-target; Allow an extra tag_num / 2 number of percpu_ida tags · 9e20ae33
      Nicholas Bellinger 提交于
      This patch bumps the default number of tags allocated per session by
      iscsi-target via transport_alloc_session_tags() -> percpu_ida_init()
      by another (tag_num / 2).
      
      This is done to take into account the tags waiting to be acknowledged
      and released in iscsit_ack_from_expstatsn(), but who's number are not
      directly limited by the CmdSN Window queue_depth being enforced by
      the target.
      
      Using a larger value here is also useful to prevent percpu_ida_alloc()
      from having to steal tags from other CPUs when no tags are available
      on the local CPU, while waiting for unacknowledged tags to be released.
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      9e20ae33
    • N
      iscsi-target: Perform release of acknowledged tags from RX context · f56cbbb4
      Nicholas Bellinger 提交于
      This patch converts iscsit_ack_from_expstatsn() to populate a local
      ack_list of commands, and call iscsit_free_cmd() directly from RX
      thread context, instead of using iscsit_add_cmd_to_immediate_queue()
      to queue the acknowledged commands to be released from TX thread
      context.
      
      It is helpful to release the acknowledge commands as quickly as
      possible, along with the associated percpu_ida tags, in order to
      prevent percpu_ida_alloc() from having to steal tags from other
      CPUs while waiting for iscsit_free_cmd() to happen from TX thread
      context.
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      f56cbbb4
    • N
      iscsi-target: Only perform wait_for_tasks when performing shutdown · e255a285
      Nicholas Bellinger 提交于
      This patch changes transport_generic_free_cmd() to only wait_for_tasks
      when shutdown=true is passed to iscsit_free_cmd().
      
      With the advent of >= v3.10 iscsi-target code using se_cmd->cmd_kref,
      the extra wait_for_tasks with shutdown=false is unnecessary, and may
      end up causing an extra context switch when releasing WRITEs.
      
      Cc: stable@vger.kernel.org # 3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      e255a285
  18. 11 9月, 2013 7 次提交
  19. 10 9月, 2013 1 次提交
    • N
      iscsi-target: Convert to per-cpu ida_alloc + ida_free command map · 988e3a85
      Nicholas Bellinger 提交于
      This patch changes iscsi-target to use transport_alloc_session_tags()
      pre-allocation logic for per-cpu session tag pooling with internal
      ida_alloc() + ida_free() calls based upon the saved se_cmd->map_tag id.
      
      This includes tag pool setup based upon per NodeACL queue_depth after
      locating se_node_acl in iscsi_target_locate_portal().
      
      Also update iscsit_allocate_cmd() and iscsit_release_cmd() to use
      percpu_ida_alloc() and percpu_ida_free() respectively.
      
      v5 changes;
        - Convert to percpu_ida.h include
      
      v2 changes:
        - Fix bug with SessionType=Discovery in iscsi_target_locate_portal()
      
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: Kent Overstreet <kmo@daterainc.com>
      Signed-off-by: NNicholas Bellinger <nab@daterainc.com>
      988e3a85