1. 21 6月, 2013 1 次提交
  2. 31 5月, 2013 2 次提交
    • N
      iscsi-target: Fix iscsit_free_cmd() se_cmd->cmd_kref shutdown handling · aafc9d15
      Nicholas Bellinger 提交于
      With the introduction of target_get_sess_cmd() referencing counting for
      ISCSI_OP_SCSI_CMD processing with iser-target, iscsit_free_cmd() usage
      in traditional iscsi-target driver code now needs to be aware of the
      active I/O shutdown case when a remaining se_cmd->cmd_kref reference may
      exist after transport_generic_free_cmd() completes, requiring a final
      target_put_sess_cmd() to release iscsi_cmd descriptor memory.
      
      This patch changes iscsit_free_cmd() to invoke __iscsit_free_cmd() before
      transport_generic_free_cmd() -> target_put_sess_cmd(), and also avoids
      aquiring the per-connection queue locks for typical fast-path calls
      during normal ISTATE_REMOVE operation.
      
      Also update iscsit_free_cmd() usage throughout iscsi-target to
      use the new 'bool shutdown' parameter.
      
      This patch fixes a regression bug introduced during v3.10-rc1 in
      commit 3e1c81a9, that was causing the following WARNING to appear:
      
      [  257.235153] ------------[ cut here]------------
      [  257.240314] WARNING: at kernel/softirq.c:160 local_bh_enable_ip+0x3c/0x86()
      [  257.248089] Modules linked in: vhost_scsi ib_srpt ib_cm ib_sa ib_mad ib_core tcm_qla2xxx tcm_loop
      	tcm_fc libfc iscsi_target_mod target_core_pscsi target_core_file
      	target_core_iblock target_core_mod configfs ipv6 iscsi_tcp libiscsi_tcp
      	libiscsi scsi_transport_iscsi loop acpi_cpufreq freq_table mperf
      	kvm_intel kvm crc32c_intel button ehci_pci pcspkr joydev i2c_i801
      	microcode ext3 jbd raid10 raid456 async_pq async_xor xor async_memcpy
      	async_raid6_recov raid6_pq async_tx raid1 raid0 linear igb hwmon
      	i2c_algo_bit i2c_core ptp ata_piix libata qla2xxx uhci_hcd ehci_hcd
      	mlx4_core scsi_transport_fc scsi_tgt pps_core
      [  257.308748] CPU: 1 PID: 3295 Comm: iscsi_ttx Not tainted 3.10.0-rc2+ #103
      [  257.316329] Hardware name: Intel Corporation S5520HC/S5520HC, BIOS S5500.86B.01.00.0057.031020111721 03/10/2011
      [  257.327597]  ffffffff814c24b7 ffff880458331b58 ffffffff8138eef2 ffff880458331b98
      [  257.335892]  ffffffff8102c052 ffff880400000008 0000000000000000 ffff88085bdf0000
      [  257.344191]  ffff88085bdf00d8 ffff88085bdf00e0 ffff88085bdf00f8 ffff880458331ba8
      [  257.352488] Call Trace:
      [  257.355223]  [<ffffffff8138eef2>] dump_stack+0x19/0x1f
      [  257.360963]  [<ffffffff8102c052>] warn_slowpath_common+0x62/0x7b
      [  257.367669]  [<ffffffff8102c080>] warn_slowpath_null+0x15/0x17
      [  257.374181]  [<ffffffff81032345>] local_bh_enable_ip+0x3c/0x86
      [  257.380697]  [<ffffffff813917fd>] _raw_spin_unlock_bh+0x10/0x12
      [  257.387311]  [<ffffffffa029069c>] iscsit_free_r2ts_from_list+0x5e/0x67 [iscsi_target_mod]
      [  257.396438]  [<ffffffffa02906c5>] iscsit_release_cmd+0x20/0x223 [iscsi_target_mod]
      [  257.404893]  [<ffffffffa02977a4>] lio_release_cmd+0x3a/0x3e [iscsi_target_mod]
      [  257.412964]  [<ffffffffa01d59a1>] target_release_cmd_kref+0x7a/0x7c [target_core_mod]
      [  257.421712]  [<ffffffffa01d69bc>] target_put_sess_cmd+0x5f/0x7f [target_core_mod]
      [  257.430071]  [<ffffffffa01d6d6d>] transport_release_cmd+0x59/0x6f [target_core_mod]
      [  257.438625]  [<ffffffffa01d6eb4>] transport_put_cmd+0x131/0x140 [target_core_mod]
      [  257.446985]  [<ffffffffa01d6192>] ? transport_wait_for_tasks+0xfa/0x1d5 [target_core_mod]
      [  257.456121]  [<ffffffffa01d6f11>] transport_generic_free_cmd+0x4e/0x52 [target_core_mod]
      [  257.465159]  [<ffffffff81050537>] ? __migrate_task+0x110/0x110
      [  257.471674]  [<ffffffffa02904ba>] iscsit_free_cmd+0x46/0x55 [iscsi_target_mod]
      [  257.479741]  [<ffffffffa0291edb>] iscsit_immediate_queue+0x301/0x353 [iscsi_target_mod]
      [  257.488683]  [<ffffffffa0292f7e>] iscsi_target_tx_thread+0x1c6/0x2a8 [iscsi_target_mod]
      [  257.497623]  [<ffffffff81047486>] ? wake_up_bit+0x25/0x25
      [  257.503652]  [<ffffffffa0292db8>] ? iscsit_ack_from_expstatsn+0xd5/0xd5 [iscsi_target_mod]
      [  257.512882]  [<ffffffff81046f89>] kthread+0xb0/0xb8
      [  257.518329]  [<ffffffff81046ed9>] ? kthread_freezable_should_stop+0x60/0x60
      [  257.526105]  [<ffffffff81396fec>] ret_from_fork+0x7c/0xb0
      [  257.532133]  [<ffffffff81046ed9>] ? kthread_freezable_should_stop+0x60/0x60
      [  257.539906] ---[ end trace 5520397d0f2e0800 ]---
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      aafc9d15
    • K
      iscsi-target: fix heap buffer overflow on error · cea4dcfd
      Kees Cook 提交于
      If a key was larger than 64 bytes, as checked by iscsi_check_key(), the
      error response packet, generated by iscsi_add_notunderstood_response(),
      would still attempt to copy the entire key into the packet, overflowing
      the structure on the heap.
      
      Remote preauthentication kernel memory corruption was possible if a
      target was configured and listening on the network.
      
      CVE-2013-2850
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      cea4dcfd
  3. 12 5月, 2013 1 次提交
  4. 08 5月, 2013 1 次提交
  5. 04 5月, 2013 2 次提交
  6. 25 4月, 2013 9 次提交
    • N
      iscsi-target: Add iser network portal attribute · 72438cdd
      Nicholas Bellinger 提交于
      This patch adds a new network portal attribute for iser, that lives
      under existing iscsi-target configfs layout at:
      
         /sys/kernel/config/target/iscsi/$TARGETNAME/$TPGT/np/$PORTAL/iser
      
      When lio_target_np_store_iser() is enabled, iscsit_tpg_add_network_portal()
      will attempt to start an rdma_cma network portal for iser-target, only if
      the external ib_isert module transport has been loaded.
      
      When disabled, iscsit_tpg_del_network_portal() will cease iser login service
      on the network portal, and release any external ib_isert module reference.
      
      v4 changes:
      
      - Add request_module for ib_isert to lio_target_np_store_iser()
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      72438cdd
    • N
      iscsi-target: Refactor TX queue logic + export response PDU creation · 2ec5a8c1
      Nicholas Bellinger 提交于
      This patch refactors TX immediate + response queue handling to use
      the new iscsit_transport API callers, and exports the necessary
      traditional iscsi PDU response creation functions for iser-target
      to utilize.
      
      This includes:
      
      - Add iscsit_build_datain_pdu() for DATAIN PDU init + convert
        iscsit_build_datain_pdu()
      - Add iscsit_build_logout_rsp() for LOGOUT_RSP PDU init + convert
        iscsit_send_logout()
      - Add iscsit_build_nopin_rsp() for NOPIN_RSP PDU init + convert
        iscsit_send_nopin()
      - Add iscsit_build_rsp_pdu() for SCSI_RSP PDU init + convert
        iscsit_send_response()
      - Add iscsit_build_task_mgt_rsp for TM_RSP PDU init + convert
        iscsit_send_task_mgt_rsp()
      - Refactor immediate queue state switch into iscsit_immediate_queue()
      - Convert handle_immediate_queue() to use iscsit_transport caller
      - Refactor response queue state switch into iscsit_response_queue()
      - Convert handle_response_queue to use iscsit_transport caller
      - Export iscsit_logout_post_handler(), iscsit_increment_maxcmdsn()
        and iscsit_tmr_post_handler() for external transport module usage
      
      v5 changes:
      
      - Fix solicited NopIN handling with RDMAExtensions=No (nab)
      
      v3 changes:
      - Add iscsit_build_reject for REJECT PDU init + convert
        iscsit_send_reject()
      
      v2 changes:
      
      - Add iscsit_queue_rsp() for iscsit_transport->iscsit_queue_data_in()
        and iscsit_transport->iscsit_queue_status()
      - Update lio_queue_data_in() to use ->iscsit_queue_data_in()
      - Update lio_queue_status() to use ->iscsit_queue_status()
      - Use mutex_trylock() in iscsit_increment_maxcmdsn()
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      2ec5a8c1
    • N
      iscsi-target: Refactor RX PDU logic + export request PDU handling · 3e1c81a9
      Nicholas Bellinger 提交于
      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() caller for iscsi_target_transport
        to handle ISTATE_SEND_R2T for TX immediate queue
      - 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.
      
      v5 changes:
      
      - Make iscsit_handle_scsi_cmd() static (Fengguang)
      - Fix iscsit_handle_scsi_cmd() exception se_cmd leak (nab)
      
      v3 changes:
      - Add extra target_put_sess_cmd call in iscsit_add_reject_from_cmd
        after completion
      
      v2 changes:
      
      - Disable iscsit_ack_from_expstatsn() usage for RDMAExtentions=Yes
      - Disable iscsit_allocate_datain_req() usage for RDMAExtentions=Yes
      - Add target_get_sess_cmd() reference counting to
        iscsit_setup_scsi_cmd()
      - Add TFO->lio_check_stop_free() fabric API caller
      - Add export of iscsit_stop_dataout_timer() symbol
      - Add iscsit_build_r2ts_for_cmd() for iscsit_transport->iscsit_get_dataout()
      - Convert existing usage of iscsit_build_r2ts_for_cmd() to
        ->iscsit_get_dataout()
      - Drop RDMAExtentions=Yes specific check in iscsit_build_r2ts_for_cmd()
      - Fix RDMAExtentions -> RDMAExtensions typo (andy)
      - Pass correct dump_payload value into iscsit_get_immediate_data()
        for iscsit_handle_scsi_cmd()
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      3e1c81a9
    • N
      iscsi-target: Add per transport iscsi_cmd alloc/free · cdb72665
      Nicholas Bellinger 提交于
      This patch converts struct iscsi_cmd memory allocation + free to use
      ->iscsit_alloc_cmd() iscsit_transport API caller, and export
      iscsit_allocate_cmd() symbols
      
      Also add iscsi_cmd->release_cmd() to be used seperately from
      iscsit_transport for connection/session shutdown.
      
      v2 changes:
      
      - Remove unnecessary checks in iscsit_alloc_cmd (asias)
      - Drop iscsit_transport->iscsit_free_cmd() usage
      - Drop iscsit_transport->iscsit_unmap_cmd() usage
      - Add iscsi_cmd->release_cmd()
      - Convert lio_release_cmd() to use iscsi_cmd->release_cmd()
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      cdb72665
    • N
      iscsi-target: Add iser-target parameter keys + setup during login · 03aa2070
      Nicholas Bellinger 提交于
      This patch adds RDMAExtensions, InitiatorRecvDataSegmentLength and
      TargetRecvDataSegmentLength parameters keys necessary for iser-target
      login to occur.
      
      This includes setting the necessary parameters during login path
      code within iscsi_login_zero_tsih_s2(), and currently PAGE_SIZE
      aligning the target's advertised MRDSL for immediate data and
      unsolicited data-out incoming payloads.
      
      v3 changes:
      - Add iscsi_post_login_start_timers FIXME for ISER
      
      v2 changes:
      
      - Fix RDMAExtentions -> RDMAExtensions typo (andy)
      - Drop unnecessary '== true' conditional checks for type bool
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      03aa2070
    • N
      iscsi-target: Initial traditional TCP conversion to iscsit_transport · baa4d64b
      Nicholas Bellinger 提交于
      This patch performs the initial conversion of existing traditional iscsi
      to use iscsit_transport API callers.  This includes:
      
      - iscsi-np cleanups for iscsit_transport_type
      - Add iscsi-np transport calls w/ ->iscsit_setup_up() and ->iscsit_free_np()
      - Convert login thread process context to use ->iscsit_accept_np() for
        connections with pre-allocated struct iscsi_conn
      - Convert existing socket accept code to iscsit_accept_np()
      - Convert login RX/TX callers to use ->iscsit_get_login_rx() and
        ->iscsit_put_login_tx() to exchange request/response PDUs
      - Convert existing socket login RX/TX calls into iscsit_get_login_rx()
        and iscsit_put_login_tx()
      - Change iscsit_close_connection() to invoke ->iscsit_free_conn() +
        iscsit_put_transport() calls.
      - Add iscsit_register_transport() + iscsit_unregister_transport() calls
        to module init/exit
      
      v4 changes:
      
      - Add missing iscsit_put_transport() call in iscsi_target_setup_login_socket()
        failure case
      
      v2 changes:
      
      - Update module init/exit to use register_transport() + unregister_transport()
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      baa4d64b
    • N
      iscsi-target: Add iscsit_transport API template · 3f993063
      Nicholas Bellinger 提交于
      Add basic struct iscsit_transport API template to allow iscsi-target for
      running with external transport modules using existing iscsi_target_core.h
      code.
      
      For all external modules, this calls try_module_get() and module_put()
      to obtain + release an external iscsit_transport module reference count.
      
      Also include the iscsi-target symbols necessary in iscsi_transport.h to
      allow external transport modules to function.
      
      v3 changes:
      - Add iscsit_build_reject export for ISTATE_SEND_REJECT usage
      
      v2 changes:
      
      - Drop unnecessary export of iscsit_get_transport + iscsit_put_transport (roland)
      - Add ->iscsit_queue_data_in() to remove extra context switch on RDMA_WRITE
      - Add ->iscsit_queue_status() to remove extra context switch on IB_SEND status
      - Add ->iscsit_get_dataout() to remove extra context switch on RDMA_READ
      - Drop ->iscsit_free_cmd()
      - Drop ->iscsit_unmap_cmd()
      - Rename iscsit_create_transport() -> iscsit_register_transport() (andy)
      - Rename iscsit_destroy_transport() -> iscsit_unregister_transport() (andy)
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      3f993063
    • A
      target/iscsi: Use ISCSI_LOGIN_CURRENT/NEXT_STAGE macros · 5d358065
      Andy Grover 提交于
      Fix bit-clearing in login_rsp->flags for case 0.
      Signed-off-by: NAndy Grover <agrover@redhat.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      5d358065
    • A
      target/iscsi: Remove chap_set_random() · 98e2eeb3
      Andy Grover 提交于
      The result from get_random_bytes should already be random, so further
      manipulation and mixing should not be needed.
      Signed-off-by: NAndy Grover <agrover@redhat.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      98e2eeb3
  7. 19 3月, 2013 1 次提交
  8. 28 2月, 2013 2 次提交
  9. 20 2月, 2013 2 次提交
  10. 14 2月, 2013 3 次提交
  11. 11 1月, 2013 1 次提交
  12. 14 12月, 2012 1 次提交
    • A
      target/iscsi_target: Add NodeACL tags for initiator group support · 79e62fc3
      Andy Grover 提交于
      Thanks for reviews, looking a lot better.
      
      ---- 8< ----
      
      Initiator access config could be easier. The way other storage vendors
      have addressed this is to support initiator groups: the admin adds
      initiator WWNs to the group, and then LUN permissions can be granted for
      the entire group at once.
      
      Instead of changing ktarget's configfs interface, this patch keeps
      the configfs interface per-initiator-wwn and just adds a 'tag' field
      for each. This should be enough for user tools like targetcli to group
      initiator ACLs and sync their configurations.
      
      acl_tag is not used internally, but needs to be kept in configfs so that
      all user tools can avoid dependencies on each other.
      
      Code tested to work, although userspace pieces still to be implemented.
      Signed-off-by: NAndy Grover <agrover@redhat.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      79e62fc3
  13. 08 12月, 2012 1 次提交
  14. 28 11月, 2012 4 次提交
  15. 19 11月, 2012 1 次提交
  16. 08 11月, 2012 3 次提交
  17. 07 11月, 2012 2 次提交
  18. 01 11月, 2012 1 次提交
    • R
      iscsi-target: Fix missed wakeup race in TX thread · d5627acb
      Roland Dreier 提交于
      The sleeping code in iscsi_target_tx_thread() is susceptible to the classic
      missed wakeup race:
      
       - TX thread finishes handle_immediate_queue() and handle_response_queue(),
         thinks both queues are empty.
       - Another thread adds a queue entry and does wake_up_process(), which does
         nothing because the TX thread is still awake.
       - TX thread does schedule_timeout() and sleeps forever.
      
      In practice this can kill an iSCSI connection if for example an initiator
      does single-threaded writes and the target misses the wakeup window when
      queueing an R2T; in this case the connection will be stuck until the
      initiator loses patience and does some task management operation (or kills
      the connection entirely).
      
      Fix this by converting to wait_event_interruptible(), which does not
      suffer from this sort of race.
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      Cc: Andy Grover <agrover@redhat.com>
      Cc: Hannes Reinecke <hare@suse.de>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      d5627acb
  19. 16 10月, 2012 1 次提交
  20. 04 10月, 2012 1 次提交
    • N
      iscsi-target: Bump defaults for nopin_timeout + nopin_response_timeout values · cf0eb28d
      Nicholas Bellinger 提交于
      This patch increases the default for nopin_timeout to 15 seconds (wait
      between sending a new NopIN ping) and nopin_response_timeout to 30 seconds
      (wait for NopOUT response before failing the connection) in order to avoid
      false positives by iSCSI Initiators who are not always able (under load) to
      respond to NopIN echo PING requests within the current 5 second window.
      
      False positives have been observed recently using Open-iSCSI code on v3.3.x
      with heavy large-block READ workloads over small MTU 1 Gb/sec ports, and
      increasing these values to more reasonable defaults significantly reduces
      the possibility of false positive NopIN response timeout events under
      this specific workload.
      
      Historically these have been set low to initiate connection recovery as
      soon as possible if we don't hear a ping back, but for modern v3.x code
      on 1 -> 10 Gb/sec ports these new defaults make alot more sense.
      
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Andy Grover <agrover@redhat.com>
      Cc: Mike Christie <michaelc@cs.wisc.edu>
      Cc: Hannes Reinecke <hare@suse.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      cf0eb28d
新手
引导
客服 返回
顶部