1. 24 10月, 2011 29 次提交
    • C
      target: Cleanup unused target_core_base.h bits · c0427f15
      Christoph Hellwig 提交于
      This is a squashed version of the following target_core_base.h
      cleanup patches:
      
          target: remove the unused SHUTDOWN_SIGS defintion
          target: remove unused se_mem leftovers
          target: remove the unused map_func_t typedef
          target: move TRANSPORT_IOV_DATA_BUFFER to the iscsi-specific code
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      c0427f15
    • N
      loopback: Prevent uninitialized use of tl_tpg in tcm_loop_queuecommand · 0a020436
      Nicholas Bellinger 提交于
      This patch fixes a bug with tcm_loop where performing a scsi_host rescan was
      causing an oops due to a received scsi_cmnd->device->id value not matching a
      previously configured tcm_loop_tpg entry in tcm_loop_hba->tl_hba_tpgs[]
      obtained from within tcm_loop_queuecommand() code.
      
      This fix adds an explict check for tcm_loop_tpg->tl_hba in order to ensure
      tcm_loop_make_naa_tpg() has already been invoked to initialize a given
      tcm_loop_tpg entry, and also adds an explict clear of tcm_loop_tpg->tl_hba
      from within the tcm_loop_drop_naa_tpg() release path.
      
      This bug was manifesting itself with the following OOPs:
      
      [176289.430909] BUG: unable to handle kernel NULL pointer dereference at 0000000000000090
      [176289.431337] IP: [<ffffffffa0395617>] transport_processing_thread+0x1e3/0x794 [target_core_mod]
      [176289.431399] PGD 22e9b067 PUD 23375067 PMD 0
      [176289.431399] Oops: 0000 [#1] SMP
      [176289.431815] CPU 1
      [176289.431815] Modules linked in: tcm_loop target_core_stgt target_core_pscsi target_core_file target_core_iblock target_core_mod crc32c ib_cm ib_sa ib_mad ib_core qla2xxx scsi_tgt configfs fcoe libfcoe libfc scsi_transport_fc ipv6 iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi sr_mod cdrom sd_mod ata_piix libata e1000 mptspi mptscsih mptbase [last unloaded: target_core_mod]
      [176289.431815]
      [176289.431815] Pid: 12339, comm: LIO_iblock Tainted: G        W   3.1.0-rc8+
      [176289.431815] RIP: 0010:[<ffffffffa0395617>]  [<ffffffffa0395617>] transport_processing_thread+0x1e3/0x794 [target_core_mod]
      [176289.431815] RSP: 0018:ffff880023bfbe10  EFLAGS: 00010283
      [176289.431815] RAX: 0000000000000000 RBX: ffff88002d600040 RCX: ffff88002d600108
      [176289.431815] RDX: ffff88000c9e50bc RSI: 0000000000000246 RDI: 0000000000000246
      [176289.431815] RBP: ffff880023bfbee0 R08: ffff88002d600108 R09: 0000000000000000
      [176289.431815] R10: ffff88002fc8cc80 R11: ffffffff81671b60 R12: ffff88002d600108
      [176289.431815] R13: ffff88000c9e4f38 R14: ffff88000c9e50b8 R15: 0000000000000000
      [176289.431815] FS:  0000000000000000(0000) GS:ffff88002fc80000(0000) knlGS:0000000000000000
      [176289.431815] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [176289.431815] CR2: 0000000000000090 CR3: 000000002a33f000 CR4: 00000000000006e0
      [176289.431815] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [176289.431815] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [176289.431815] Process LIO_iblock (pid: 12339, threadinfo ffff880023bfa000, task ffff88002a2e0000)
      [176289.431815] Stack:
      [176289.431815]  0000000000011280 0000000000000246 ffff88002a2e0000 ffff880023a58900
      [176289.431815]  ffff880023bfbed0 ffff880023bfa000 ffff880023bfa000 ffff88000c9e50d0
      [176289.431815]  ffff88000c9e50c0 ffff88000c9e50bc ffff880023bfa000 ffff880023bfbfd8
      [176289.431815] Call Trace:
      [176289.431815]  [<ffffffff81056657>] ? wake_up_bit+0x25/0x25
      [176289.431815]  [<ffffffffa0395434>] ? transport_handle_cdb_direct+0x92/0x92 [target_core_mod]
      [176289.431815]  [<ffffffff8105619a>] kthread+0x7d/0x85
      [176289.431815]  [<ffffffff813cbcb4>] kernel_thread_helper+0x4/0x10
      [176289.431815]  [<ffffffff8105611d>] ? kthread_worker_fn+0x16d/0x16d
      [176289.431815]  [<ffffffff813cbcb0>] ? gs_change+0x13/0x13
      [176289.431815] Code: 67 05 00 00 41 8b 84 24 4c ff ff ff ff c8 83 f8 11 0f 87 f0 04 00 00 89 c0 ff 24 c5 b0 c6 39 a0 0f 0b eb fe 48 8b 83 d8 00 00 00
      [176289.431815] RIP  [<ffffffffa0395617>] transport_processing_thread+0x1e3/0x794 [target_core_mod]
      [176289.431815]  RSP <ffff880023bfbe10>
      [176289.431815] CR2: 0000000000000090
      [176295.041004] ---[ end trace 85dc6865b23b8f3e ]---
      Reported-by: NPaolo Bonzini <pbonzini@redhat.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      0a020436
    • N
      target: Remove legacy + unused device active I/O shutdown code · ce8762f6
      Nicholas Bellinger 提交于
      This patch removes the legacy device active I/O shutdown code that was
      originally called from transport_processing_thread() context during shutdown
      including transport_processing_shutdown() and transport_release_all_cmds().
      
      This is due to the fact that in modern configfs control plane code by the
      time shutdown of an se_device instance in transport_processing_thread()
      is allowed to occur via:
      
      	rmdir /sys/kernel/config/target/core/$HBA/$DEV
      
      all active I/O will already have been ceased while removing active configfs
      fabric Port/LUN symlinks.  Eg: the removal of an active se_device is protected
      by inter-module VFS references from active Port/LUN symlinks.
      
      Two WARN_ON() checks have been added in their place before exiting
      transport_processing_thread() to watch out for any leaked descriptors.
      
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      ce8762f6
    • N
      target: Merge transport_cmd_finish_abort_tmr into transport_cmd_finish_abort · 8dc52b54
      Nicholas Bellinger 提交于
      This patch merges transport_cmd_finish_abort_tmr() logic into a single
      transport_cmd_finish_abort() function by adding a cmd->se_tmr_req check
      around transport_lun_remove_cmd(), and updates the single caller within
      core_tmr_drain_tmr_list().
      Reported-by: NChristoph Hellwig <hch@lst.de>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      8dc52b54
    • N
      iscsi-target: Remove SCF_SE_LUN_CMD flag abuses · d270190a
      Nicholas Bellinger 提交于
      This patch removes a number of SCF_SE_LUN_CMD flag abuses within iscsi-target
      code to determine when iscsit_release_cmd() or transport_generic_free_cmd()
      should be called while releasing an individual iscsi_cmd descriptor.
      
      In the place of SCF_SE_LUN_CMD checks, this patch converts existing code to
      use a new iscsit_free_cmd() that inspects iscsi_cmd->iscsi_opcode types to
      determine which of the above functions should be invoked.  It also removes the
      now unnecessary special case checking in iscsit_release_commands_from_conn().
      
      (hch: Use iscsit_free_cmd instead of open-coded alternative)
      Reported-by: NChristoph Hellwig <hch@lst.de>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      d270190a
    • N
      target: Convert ->transport_wait_for_tasks usage to transport_generic_free_cmd · d14921d6
      Nicholas Bellinger 提交于
      This patch converts se_cmd->transport_wait_for_tasks(se_cmd, 1) usage to use
      transport_generic_free_cmd() directly in target-core and iscsi-target fabric
      usage.  The includes:
      
      *) Removal of the optional transport_generic_free_cmd() call from within
         transport_generic_wait_for_tasks()
      *) Usage of existing SCF_SUPPORTED_SAM_OPCODE to determine when
         transport_generic_wait_for_tasks() processing may occur instead of
         checking se_cmd->transport_wait_for_tasks()
      *) Move transport_generic_wait_for_tasks() call ahead of core_dec_lacl_count()
         and transport_lun_remove_cmd() in transport_generic_free_cmd() to follow
         existing logic for iscsi-target w/ se_cmd->transport_wait_for_tasks(se_cmd, 1)
      *) Removal of se_cmd->transport_wait_for_tasks() function pointer
      *) Rename transport_generic_wait_for_tasks() -> transport_wait_for_tasks(), and
         add docbook comment.
      *) Add EXPORT_SYMBOL for transport_wait_for_tasks()
      
      For the case in iscsi_target_erl2.c:iscsit_prepare_cmds_for_realligance()
      where se_cmd->transport_wait_for_tasks(se_cmd, 0) is called, this patch
      adds a direct call to transport_wait_for_tasks().
      
      (hch: Fix transport_generic_free_cmd() usage in iscsit_release_commands_from_conn)
      (nab: Add patch: Ensure that TMRs hit wait_for_tasks logic during release)
      Reported-by: NChristoph Hellwig <hch@lst.de>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      d14921d6
    • R
      target: Have core_tmr_alloc_req() take an explicit GFP_xxx flag · dd503a5f
      Roland Dreier 提交于
      Testing in_interrupt() to know when sleeping is allowed is not really
      reliable (since eg it won't be true if the caller is holding a spinlock).
      Instead have the caller tell core_tmr_alloc_req() what GFP_xxx to use;
      every caller except tcm_qla2xxx can use GFP_KERNEL.
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      dd503a5f
    • D
      target: Make pscsi_create_virtdevice use ERR_CAST · 942d8264
      Dan Carpenter 提交于
      This patch changes pscsi_create_virtdevice() to properly return ERR_CAST
      instead of a raw pointer upon scsi_host_lookup() failure.
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      942d8264
    • A
      tcm_fc: remove custom hex_to_bin in ft_parse_wwn · 635a2b3f
      Andy Shevchenko 提交于
      This patch converts ft_parse_wwn() to use hex_to_bin() instead of custom
      conversion code.
      
      (Andy: Re-add missing strict && isupper(c) check)
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      635a2b3f
    • A
      iscsi-target: use native hex2bin for chap_string_to_hex · f2b56afd
      Andy Shevchenko 提交于
      This patch converts chap_string_to_hex() to use hex2bin() instead of
      the internal chap_asciihex_to_binaryhex().
      
      (nab: Fix up minor compile breakage + typo)
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      f2b56afd
    • C
      target: remove unused se_subsystem_api methods · a3eedc22
      Christoph Hellwig 提交于
      The cdb_none, map_data_SG and map_control_SG methods have no callers left
      and can be removed now.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      a3eedc22
    • C
      target: cleanup pscsi request submission · 02b1a746
      Christoph Hellwig 提交于
      Move the entirely request allocation, mapping and submission into ->do_task.
      This
      
       a) avoids blocking the I/O submission thread unessecarily, and
       b) simplifies the code greatly
      
      Note that the code seems to have various error handling issues, mostly
      related to bidi handling in the current form.  I've added comments about
      those but not tried to fix them in this commit.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      02b1a746
    • C
      target: cleanup iblock bio submission · dbbf3e94
      Christoph Hellwig 提交于
      Move the entirely bio allocation, mapping and submission into ->do_task.
      This
      
       a) avoids blocking the I/O submission thread unessecarily, and
       b) simplifies the code greatly
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      dbbf3e94
    • A
      target: simplify target_parse_naa_6h_vendor_specific() · b6b4e61f
      Andy Shevchenko 提交于
      This patch adds a minor simplfication in target_parse_naa_6h_vendor_specific()
      to remove direct isxdigit() + ctype.h usage.
      
      (nab: Fix next assignment breakage in for loop)
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Nicholas Bellinger <nab@linux-iscsi.org>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      b6b4e61f
    • N
      target: Remove session_reinstatement parameter from ->transport_wait_for_tasks · 39c05f32
      Nicholas Bellinger 提交于
      This patch removes the unnecessary session_reinstatement parameter from
      se_cmd->transport_wait_for_tasks(), logic in transport_generic_wait_for_tasks,
      and usage within iscsi-target code.
      
      This also includes the removal of the 'bool' return from transport_put_cmd() +
      transport_generic_free_cmd() that is no longer necessary.
      
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      39c05f32
    • C
      target: push session reinstatement out of transport_generic_free_cmd · 82f1c8a4
      Christoph Hellwig 提交于
      Push session reinstatement out of transport_generic_free_cmd into the only
      caller that actually needs it.  Clean up transport_generic_free_cmd a bit,
      and remove the useless comment.  I'd love to add a more useful kerneldoc
      comment for it, but as this point I'm still a bit confused in where it
      stands in the command release stack.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      82f1c8a4
    • C
      target: remove transport_generic_remove · e6a2573f
      Christoph Hellwig 提交于
      All callers that never have the session_reinstatement flag set can trivially
      be converted to transport_put_cmd.  Opencode the session reinstatement code
      in transport_generic_free_cmd, which was the only caller ever asking for it.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      e6a2573f
    • C
      target: simplify transport_put_cmd · 4911e3cc
      Christoph Hellwig 提交于
      Inline two simple functions only used by it, and replace a goto
      with a simple if else construct.
      
      Note that the code moved from transport_dec_and_check seems fairly
      buggy - the atomic_read check on a variable where we'd do an
      atomic_dec_and_test looks racy if we'll ever get someone increment
      it without the lock held around them (which it looks like we do),
      and not decrementing the second counter if the first one doesn't
      hit zero also at least needs an explanation.
      
      (nab: Fix transport_put_cmd breakage)
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      4911e3cc
    • C
      target: simplify transport_generic_remove · d3df7825
      Christoph Hellwig 提交于
      Instead of duplicating the code from transport_release_fe_cmd re-use it by
      allowing transport_release_fe_cmd to return wether it actually freed the
      command or not.  Also rename transport_release_fe_cmd to transport_put_cmd
      and add a kerneldoc comment for it to make the use case more obvious.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      d3df7825
    • C
      target: remove transport_free_se_cmd · 2dbc43d2
      Christoph Hellwig 提交于
      It is only called by transport_release_cmd, so inline it there.  Also add
      a kerneldoc comment for transport_release_cmd while we are at it.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      2dbc43d2
    • C
    • C
      680b73c5
    • C
      iscsi-target: always call transport_handle_cdb_direct · acf3ecc4
      Christoph Hellwig 提交于
      iscsit_task_reassign_complete is always called from the TX thread, so
      handle the CDB directly instead of offloading it.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      acf3ecc4
    • C
      tfm_fc: use transport_handle_cdb_direct · 4ca495e0
      Christoph Hellwig 提交于
      ft_send_work is always called from workqueue context, which means we can
      handle the CDB directly instead of doing another context switch.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Cc: Kiran Patil <kiran.patil@intel.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      4ca495e0
    • N
      target: Prevent transport_send_task_abort when CHECK_CONDITION status · c252f003
      Nicholas Bellinger 提交于
      This patch fixes a bug where transport_send_task_abort() could be called
      during LUN_RESET to return SAM_STAT_TASK_ABORTED + tfo->queue_status(), when
      SCF_SENT_CHECK_CONDITION -> tfo->queue_status() has already been sent from
      within another context via transport_send_check_condition_and_sense().
      
      Cc: stable@kernel.org
      Signed-off-by: NNicholas Bellinger <nab@risingtidesystems.com>
      c252f003
    • N
      target: Fix transport_cmd_finish_abort queue removal bug · 77039d1e
      Nicholas Bellinger 提交于
      This patch fixes a bug in LUN_RESET operation with transport_cmd_finish_abort()
      where transport_remove_cmd_from_queue() was incorrectly being called, causing
      descriptors with t_state == TRANSPORT_FREE_CMD_INTR to be incorrectly removed
      from qobj->qobj_list during process context release.  This change ensures the
      descriptor is only removed via transport_remove_cmd_from_queue() when doing a
      direct release via transport_generic_remove().
      
      Cc: stable@kernel.org
      Signed-off-by: NNicholas Bellinger <nab@risingtidesystems.com>
      77039d1e
    • N
      target: Prevent TRANSPORT_FREE_CMD_INTR processing in core_tmr_drain_cmd_list · b0e062ae
      Nicholas Bellinger 提交于
      This patch contains a bugfix for TMR LUN_RESET related to TRANSPORT_FREE_CMD_INTR
      operation, where core_tmr_drain_cmd_list() will now skip processing for this
      case to prevent an ABORT_TASK status from being returned for descriptors that
      are already queued up to be released by processing thread context.
      
      Cc: Roland Dreier <roland@purestorage.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: stable@kernel.org
      Signed-off-by: NNicholas Bellinger <nab@risingtidesystems.com>
      b0e062ae
    • N
      target: Re-org of core_tmr_lun_reset · d050ffb9
      Nicholas Bellinger 提交于
      This patch is a re-orginzation of core_tmr_lun_reset() logic to properly
      scan the active tmr_list, dev->state_task_list and qobj->qobj_list w/ the
      relivent locks held, and performing a list_move_tail onto seperate local
      scope lists before performing the full drain.
      
      This involves breaking out the code into three seperate list specific
      functions: core_tmr_drain_tmr_list(), core_tmr_drain_task_list() and
      core_tmr_drain_cmd_list().
      
      (nab: Include target: Remove non-active tasks from execute list during
            LUN_RESET patch to address original breakage)
      Reported-by: NRoland Dreier <roland@purestorage.com>
      Cc: Roland Dreier <roland@purestorage.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: stable@kernel.org
      Signed-off-by: NNicholas Bellinger <nab@risingtidesystems.com>
      d050ffb9
    • R
      target: Prevent cmd->se_queue_node double add · 79a7fef2
      Roland Dreier 提交于
      This patch addresses a bug with the lio-core-2.6.git conversion of
      transport_add_cmd_to_queue() to use a single embedded list_head, instead
      of individual struct se_queue_req allocations allowing a single se_cmd to
      be added to the queue mulitple times.  This was changed in the following:
      
      commit 2a9e4d5ca5d99f4c600578d6285d45142e7e5208
      Author: Andy Grover <agrover@redhat.com>
      Date:   Tue Apr 26 17:45:51 2011 -0700
      
          target: Embed qr in struct se_cmd
      
      The problem is that some target code still assumes performing multiple
      adds is allowed via transport_add_cmd_to_queue(), which ends up causing
      list corruption in qobj->qobj_list code.  This patch addresses this
      by removing an existing struct se_cmd from the list before the add, and
      removes an unnecessary list walk in transport_remove_cmd_from_queue()
      
      It also changes cmd->t_transport_queue_active to use explict sets intead
      of increment/decrement to prevent confusion during exception path handling.
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      Cc: Andy Grover <agrover@redhat.com>
      Cc: stable@kernel.org
      Signed-off-by: NNicholas Bellinger <nab@risingtidesystems.com>
      79a7fef2
  2. 11 10月, 2011 1 次提交
  3. 10 10月, 2011 6 次提交
  4. 09 10月, 2011 1 次提交
  5. 08 10月, 2011 1 次提交
  6. 07 10月, 2011 2 次提交