1. 16 9月, 2015 3 次提交
  2. 31 8月, 2015 1 次提交
  3. 08 4月, 2015 3 次提交
  4. 13 12月, 2014 14 次提交
  5. 21 5月, 2014 1 次提交
    • S
      Target/iser: Improve cm events handling · 88c4015f
      Sagi Grimberg 提交于
      There are 4 RDMA_CM events that all basically mean that
      the user should teardown the IB connection:
      - DISCONNECTED
      - ADDR_CHANGE
      - DEVICE_REMOVAL
      - TIMEWAIT_EXIT
      
      Only in DISCONNECTED/ADDR_CHANGE it makes sense to
      call rdma_disconnect (send DREQ/DREP to our initiator).
      So we keep the same teardown handler for all of them
      but only indicate calling rdma_disconnect for the relevant
      events.
      
      This patch also removes redundant debug prints for each single
      event.
      
      v2 changes:
       - Call isert_disconnected_handler() for DEVICE_REMOVAL (Or + Sag)
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: stable@vger.kernel.org # 3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      88c4015f
  6. 20 5月, 2014 1 次提交
    • S
      Target/iser: Fix hangs in connection teardown · 9d49f5e2
      Sagi Grimberg 提交于
      In ungraceful teardowns isert close flows seem racy such that
      isert_wait_conn hangs as RDMA_CM_EVENT_DISCONNECTED never
      gets invoked (no one called rdma_disconnect).
      
      Both graceful and ungraceful teardowns will have rx flush errors
      (isert posts a batch once connection is established). Once all
      flush errors are consumed we invoke isert_wait_conn and it will
      be responsible for calling rdma_disconnect. This way it can be
      sure that rdma_disconnect was called and it won't wait forever.
      
      This patch also removes the logout_posted indicator. either the
      logout completion was consumed and no problem decrementing the
      post_send_buf_count, or it was consumed as a flush error. no point
      of keeping it for isert_wait_conn as there is no danger that
      isert_conn will be accidentally removed while it is running.
      
      (Drop unnecessary sleep_on_conn_wait_comp check in
       isert_cq_rx_comp_err - nab)
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: stable@vger.kernel.org # 3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      9d49f5e2
  7. 16 5月, 2014 1 次提交
    • S
      Target/iser: Fix iscsit_accept_np and rdma_cm racy flow · 531b7bf4
      Sagi Grimberg 提交于
      RDMA CM and iSCSI target flows are asynchronous and completely
      uncorrelated. Relying on the fact that iscsi_accept_np will be called
      after CM connection request event and will wait for it is a mistake.
      
      When attempting to login to a few targets this flow is racy and
      unpredictable, but for parallel login to dozens of targets will
      race and hang every time.
      
      The correct synchronizing mechanism in this case is pending on
      a semaphore rather than a wait_for_event. We keep the pending
      interruptible for iscsi_np cleanup stage.
      
      (Squash patch to remove dead code into parent - nab)
      Reported-by: NSlava Shwartsman <valyushash@gmail.com>
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: stable@vger.kernel.org # 3.10+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      531b7bf4
  8. 07 4月, 2014 3 次提交
    • S
      IB/isert: Support T10-PI protected transactions · 9e961ae7
      Sagi Grimberg 提交于
      In case the Target core passed transport T10 protection
      operation:
      
      1. Register data buffer (data memory region)
      2. Register protection buffer if exsists (prot memory region)
      3. Register signature region (signature memory region)
         - use work request IB_WR_REG_SIG_MR
      4. Execute RDMA
      5. Upon RDMA completion check the signature status
         - if succeeded send good SCSI response
         - if failed send SCSI bad response with appropriate sense buffer
      
      (Fix up compile error in isert_reg_sig_mr, and fix up incorrect
       se_cmd->prot_type -> TARGET_PROT_NORMAL comparision - nab)
      (Fix failed sector assignment in isert_completion_rdma_* - Sagi + nab)
      (Fix enum assignements for protection type - Sagi)
      (Fix devision on 32-bit in isert_completion_rdma_* - Sagi + Fengguang)
      (Fix context change for v3.14-rc6 code - nab)
      (Fix iscsit_build_rsp_pdu inc_statsn flag usage - nab)
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      9e961ae7
    • S
      IB/isert: Initialize T10-PI resources · d3e125da
      Sagi Grimberg 提交于
      Introduce pi_context to hold relevant RDMA protection resources.
      We eliminate data_key_valid boolean and replace it with indicators
      container to indicate:
      - Is the descriptor protected (registered via signature MR)
      - Is the data_mr key valid (can spare LOCAL_INV WR)
      - Is the prot_mr key valid (can spare LOCAL_INV WR)
      - Is the sig_mr key valid (can spare LOCAL_INV WR)
      
      Upon connection establishment check if network portal is T10-PI
      enabled and allocate T10-PI resources if necessary, allocate
      signature enabled memory regions and mark connection queue-pair
      as signature enabled.
      
      (Fix context change for v3.14-rc6 code - nab)
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      d3e125da
    • S
      IB/isert: Introduce isert_map/unmap_data_buf · e3d7e4c3
      Sagi Grimberg 提交于
      export map/unmap data buffer to a routine that may
      be used in various places in the code and keep the
      mapping data in a designated descriptor. Also, let
      isert_fast_reg_mr to decide weather to use global
      MR or do fast registration.
      
      This commit does not change any functionality.
      
      (Fix context change for v3.14-rc6 code - nab)
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      e3d7e4c3
  9. 05 3月, 2014 3 次提交
    • N
      iser-target: Fix command leak for tx_desc->comp_llnode_batch · ebbe4421
      Nicholas Bellinger 提交于
      This patch addresses a number of active I/O shutdown issues
      related to isert_cmd descriptors being leaked that are part
      of a completion interrupt coalescing batch.
      
      This includes adding logic in isert_cq_tx_comp_err() to
      drain any associated tx_desc->comp_llnode_batch, as well
      as isert_cq_drain_comp_llist() to drain any associated
      isert_conn->conn_comp_llist.
      
      Also, set tx_desc->llnode_active in isert_init_send_wr()
      in order to determine when work requests need to be skipped
      in isert_cq_tx_work() exception path code.
      
      Finally, update isert_init_send_wr() to only allow interrupt
      coalescing when ISER_CONN_UP.
      Acked-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: <stable@vger.kernel.org> #3.13+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      ebbe4421
    • N
      iser-target: Ignore completions for FRWRs in isert_cq_tx_work · 9bb4ca68
      Nicholas Bellinger 提交于
      This patch changes IB_WR_FAST_REG_MR + IB_WR_LOCAL_INV related
      work requests to include a ISER_FRWR_LI_WRID value in order to
      signal isert_cq_tx_work() that these requests should be ignored.
      
      This is necessary because even though IB_SEND_SIGNALED is not
      set for either work request, during a QP failure event the work
      requests will be returned with exception status from the TX
      completion queue.
      
      v2 changes:
       - Rename ISER_FRWR_LI_WRID -> ISER_FASTREG_LI_WRID (Sagi)
      Acked-by: NSagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: <stable@vger.kernel.org> #3.12+
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      9bb4ca68
    • 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
  10. 19 1月, 2014 2 次提交
  11. 07 11月, 2013 1 次提交
    • N
      ib_isert: Add support for completion interrupt coalescing · 95b60f07
      Nicholas Bellinger 提交于
      This patch adds support for completion interrupt coalescing that
      allows only every ISERT_COMP_BATCH_COUNT (8) to set IB_SEND_SIGNALED,
      thus avoiding completion interrupts for every posted iser_tx_desc.
      
      The batch processing is done using a per isert_conn llist that once
      IB_SEND_SIGNALED has been set is saved to tx_desc->comp_llnode_batch,
      and completion processing of previously posted iser_tx_descs is done
      in a single shot from within isert_send_completion() code.
      
      Note this is only done for response PDUs from ISCSI_OP_SCSI_CMD, and
      all other control type of PDU responses will force an implicit batch
      drain to occur.
      
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: Sagi Grimberg <sagig@mellanox.com>
      Cc: Kent Overstreet <kmo@daterainc.com>
      Cc: Roland Dreier <roland@purestorage.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      95b60f07
  12. 11 9月, 2013 3 次提交
  13. 10 9月, 2013 1 次提交
    • N
      iscsi/iser-target: Convert to command priv_size usage · d703ce2f
      Nicholas Bellinger 提交于
      This command converts iscsi/isert-target to use allocations based on
      iscsit_transport->priv_size within iscsit_allocate_cmd(), instead of
      using an embedded isert_cmd->iscsi_cmd.
      
      This includes removing iscsit_transport->alloc_cmd() usage, along
      with updating isert-target code to use iscsit_priv_cmd().
      
      Also, remove left-over iscsit_transport->release_cmd() usage for
      direct calls to iscsit_release_cmd(), and drop the now unused
      lio_cmd_cache and isert_cmd_cache.
      
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: Kent Overstreet <kmo@daterainc.com>
      Signed-off-by: NNicholas Bellinger <nab@daterainc.com>
      d703ce2f
  14. 08 7月, 2013 2 次提交
    • N
      iser-target: Rename sense_buf_[dma,len] to pdu_[dma,len] · dbbc5d11
      Nicholas Bellinger 提交于
      Now that these two variables are used for REJECT payloads as well
      as SCSI response sense payloads, rename them to something that
      makes more sense.
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      dbbc5d11
    • N
      iser-target: Fix session reset bug with RDMA_CM_EVENT_DISCONNECTED · b2cb9649
      Nicholas Bellinger 提交于
      This patch addresses a bug where RDMA_CM_EVENT_DISCONNECTED may occur
      before the connection shutdown has been completed by rx/tx threads,
      that causes isert_free_conn() to wait indefinately on ->conn_wait.
      
      This patch allows isert_disconnect_work code to invoke rdma_disconnect
      when isert_disconnect_work() process context is started by client
      session reset before isert_free_conn() code has been reached.
      
      It also adds isert_conn->conn_mutex protection for ->state within
      isert_disconnect_work(), isert_cq_comp_err() and isert_free_conn()
      code, along with isert_check_state() for wait_event usage.
      
      (v2: Add explicit iscsit_cause_connection_reinstatement call
           during isert_disconnect_work() to force conn reset)
      
      Cc: stable@vger.kernel.org  # 3.10+
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      b2cb9649
  15. 25 4月, 2013 1 次提交
    • N
      iser-target: Add iSCSI Extensions for RDMA (iSER) target driver · b8d26b3b
      Nicholas Bellinger 提交于
      This patch adds support for iSCSI Extensions for RDMA target mode,
      and includes CQ pooling per isert_device context distributed across
      multiple active iser target sessions.
      
      It also uses cmwq process context for RX / TX ib_post_cq() polling
      via isert_cq_desc->cq_[rx,tx]_work invoked by isert_cq_[rx,tx]_callback()
      hardIRQ context callbacks.
      
      v5 changes:
      
      - Use ISER_RECV_DATA_SEG_LEN instead of hardcoded value in ISER_RX_PAD_SIZE (Or)
      - Fix make W=1 warnings (Or)
      - Add missing depends on NET && INFINIBAND_ADDR_TRANS in Kconfig (Randy + Or)
      - Make isert_device_find_by_ib_dev() return proper ERR_PTR (Wei Yongjun)
      - Properly setup iscsi_np->np_sockaddr in isert_setup_np() (Shlomi + nab)
      - Add special case for early ISCSI_OP_SCSI_CMD exception handling (nab)
      
      v4 changes:
      - Mark isert_cq_rx_work as static (Or)
      - Drop unnecessary ib_dma_sync_single_for_cpu + ib_dma_sync_single_for_device
        calls for isert_cmd->sense_buf_dma from isert_put_response (Or)
      - Use 12288 for ISER_RX_PAD_SIZE base to save extra page per
        struct iser_rx_desc (Or + nab)
      - Drop now unnecessary isert_rx_desc usage, and convert RX users to
        iser_rx_desc (Or + nab)
      - Move isert_[alloc,free]_rx_descriptors() ahead of
        isert_create_device_ib_res() usage (nab)
      - Mark isert_cq_[rx,tx]_callback() + prototypes as static
      - Fix 'warning: 'ret' may be used uninitialized' warning for
        isert_create_device_ib_res on powerpc allmodconfig (fengguang + nab)
      - Fix 'warning: 'ret' may be used uninitialized' warning for
        isert_connect_request on i386 allyesconfig (fengguang + nab)
      - Fix pr_debug conversion specification in isert_rx_completion()
        (fengguang + nab)
      - Drop unnecessary isert_conn->conn_cm_id != NULL check in
        isert_connect_release causing the build warning:
        "variable dereferenced before check 'isert_conn->conn_cm_id'"
      - Fix isert_lid + isert_np leak in isert_setup_np failure path
      - Add isert_conn->conn_wait_comp_err usage in isert_free_conn()
        for isert_cq_comp_err completion path
      - Add isert_conn->logout_posted bit to determine decrement of
        isert_conn->post_send_buf_count from logout response completion
      - Always set ISER_CONN_DOWN from isert_disconnect_work() callback
      
      v3 changes:
      
      - Convert to use per isert_cq_desc->cq_[rx,tx]_work + drop tasklets (Or + nab)
      - Move IB_EVENT_QP_LAST_WQE_REACHED warn into correct
        isert_qp_event_callback (Or)
      - Drop unnecessary IB_ACCESS_REMOTE_* access flag usage in
        isert_create_device_ib_res (Or)
      - Add common isert_init_send_wr(), and convert isert_put_* calls (Or)
      - Move to verbs+core logic to single ib_isert.[c,h]  (Or + nab)
      - Add kmem_cache isert_cmd_cache usage for descriptor allocation (nab)
      - Move common ib_post_send() logic used by isert_put_*() to
        isert_post_response() (nab)
      - Add isert_put_reject call in isert_response_queue() for posting
        ISCSI_REJECT response. (nab)
      - Add ISTATE_SEND_REJECT checking in isert_do_control_comp. (nab)
      
      v2 changes:
      
      - Drop unused ISERT_ADDR_ROUTE_TIMEOUT define
      - Add rdma_notify() call for IB_EVENT_COMM_EST in isert_qp_event_callback()
      - Make isert_query_device() less verbose
      - Drop unused RDMA_CM_EVENT_ADDR_ERROR and RDMA_CM_EVENT_ROUTE_ERROR
        cases from isert_cma_handler()
      - Drop unused rdma/ib_fmr_pool.h include
      - Update isert_conn_setup_qp() to assign cq based upon least used
      - Add isert_create_device_ib_res() to setup PD, CQs and MRs for each
        underlying struct ib_device, instead of using per isert_conn resources.
      - Add isert_free_device_ib_res() to release PD, CQs and MRs for each
        underlying struct ib_device.
      - Add isert_device_find_by_ib_dev()
      - Change isert_connect_request() to drop PD, CQs and MRs allocation,
        and use isert_device_find_by_ib_dev() instead.
      - Add isert_device_try_release()
      - Change isert_connect_release() to decrement cq_active_qps, and drop
        PD, CQs and MRs resource release.
      - Update isert_connect_release() to call isert_device_try_release()
      - Make isert_create_device_ib_res() determine device->cqs_used based
        upon num_online_cpus()
      - Drop misleading isert_dump_ib_wc() usage
      - Drop unused rdma/ib_fmr_pool.h include
      - Use proper xfer_len for login PDUs in isert_rx_completion()
      - Add isert_release_cmd() usage
      - Change isert_alloc_cmd() to setup iscsi_cmd.release_cmd() pointer
      - Change isert_put_cmd() to perform per iscsi_opcode specific release
        logic
      - Add isert_unmap_cmd() call for ISCSI_OP_SCSI_CMD from isert_put_cmd()
      - Change isert_send_completion() to call
        atomic_dec(&isert_conn->post_send_buf_count)
        based upon per iscsi_opcode logic
      - Drop ISTATE_REMOVE processing from isert_immediate_queue()
      - Drop ISTATE_SEND_DATAIN processing from isert_response_queue()
      - Drop ISTATE_SEND_STATUS processing from isert_response_queue()
      - Drop iscsit_transport->iscsit_unmap_cmd() and ->iscsit_free_cmd()
      - Convert iser_cq_tx_tasklet() to use struct isert_cq_desc pooling logic
      - Convert isert_cq_tx_callback() to use struct isert_cq_desc pooling
        logic
      - Convert iser_cq_rx_tasklet() to use struct isert_cq_desc pooling logic
      - Convert isert_cq_rx_callback() to use struct isert_cq_desc pooling
        logic
      - Add explict iscsit_stop_dataout_timer() call to
        isert_do_rdma_read_comp()
      - Use isert_get_dataout() for iscsit_transport->iscsit_get_dataout()
        caller
      - Drop ISTATE_SEND_R2T processing from isert_immediate_queue()
      - Drop unused rdma/ib_fmr_pool.h include
      - Drop isert_cmd->cmd_kref in favor of se_cmd->cmd_kref usage
      - Add struct isert_device in order to support multiple EQs + CQ pooling
      - Add struct isert_cq_desc
      - Drop tasklets and cqs from isert_conn
      - Bump ISERT_MAX_CQ to 64
      - Various minor checkpatch fixes
      Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      b8d26b3b