• Nicholas Bellinger's avatar
    iser-target: Add iSCSI Extensions for RDMA (iSER) target driver · b8d26b3b
    Nicholas Bellinger authored
    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: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    b8d26b3b
ib_isert.c 62.4 KB