1. 06 11月, 2008 4 次提交
    • C
      [SCSI] zfcp: Fix request list handling in error path · 3765138a
      Christof Schmitt 提交于
      Fix the handling of the request list in the error path:
       - Use irqsave for the lock as in the good path.
       - Before removing the request, check if it is still in the list, a
         call to dismiss_all might have changed the list in between.
       - zfcp_qdio_send does not change the queue counters on failure,
         trying revert something is wrong, so remove this.
      Signed-off-by: NChristof Schmitt <christof.schmitt@de.ibm.com>
      Signed-off-by: NSwen Schillig <swen@vnet.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      3765138a
    • C
      [SCSI] zfcp: fix mempool usage for status_read requests · 88f2a977
      Christof Schmitt 提交于
      When allocating fsf requests without qtcb, store the pointer to the
      mempool in the fsf requests for later call to mempool_free. This
      codepath is only used by the status_read requests.
      Signed-off-by: NChristof Schmitt <christof.schmitt@de.ibm.com>
      Signed-off-by: NSwen Schillig <swen@vnet.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      88f2a977
    • H
      [SCSI] zfcp: fix req_list_locking. · 45316a86
      Heiko Carstens 提交于
      The per adapter req_list_lock must be held with interrupts disabled, otherwise
      we might end up with nice deadlocks as lockdep tells us (see below).
      
      zfcp 0.0.1804: QDIO problem occurred.
      
      =========================================================
      [ INFO: possible irq lock inversion dependency detected ]
      2.6.27-rc8-00035-g4a770358-dirty #86
      ---------------------------------------------------------
      swapper/0 just changed the state of lock:
       (&adapter->erp_lock){++..}, at: [<00000000002c82ae>] zfcp_erp_adapter_reopen+0x4e/0x8c
      but this lock took another, hard-irq-unsafe lock in the past:
       (&adapter->req_list_lock){-+..}
      
      and interrupts could create inverse lock ordering between them.
      
      [tons of backtraces, but only the interesting part follows]
      
      the second lock's dependencies:
      -> (&adapter->req_list_lock){-+..} ops: 2280627634176 {
         initial-use  at:
                              [<0000000000071f10>] __lock_acquire+0x504/0x18bc
                              [<000000000007335c>] lock_acquire+0x94/0xbc
                              [<00000000003d7224>] _spin_lock_irqsave+0x6c/0xb0
                              [<00000000002cf684>] zfcp_fsf_req_dismiss_all+0x50/0x140
                              [<00000000002c87ee>] zfcp_erp_adapter_strategy_generic+0x66/0x3d0
                              [<00000000002c9498>] zfcp_erp_thread+0x88c/0x1318
                              [<000000000001b0d2>] kernel_thread_starter+0x6/0xc
                              [<000000000001b0cc>] kernel_thread_starter+0x0/0xc
         in-softirq-W at:
                              [<0000000000072172>] __lock_acquire+0x766/0x18bc
                              [<000000000007335c>] lock_acquire+0x94/0xbc
                              [<00000000003d7224>] _spin_lock_irqsave+0x6c/0xb0
                              [<00000000002ca73e>] zfcp_qdio_int_resp+0xbe/0x2ac
                              [<000000000027a1d6>] qdio_kick_inbound_handler+0x82/0xa0
                              [<000000000027daba>] tiqdio_inbound_processing+0x62/0xf8
                              [<0000000000047ba4>] tasklet_action+0x100/0x1f4
                              [<0000000000048b5a>] __do_softirq+0xae/0x154
                              [<0000000000021e4a>] do_softirq+0xea/0xf0
                              [<00000000000485de>] irq_exit+0xde/0xe8
                              [<0000000000268c64>] do_IRQ+0x160/0x1fc
                              [<00000000000261a2>] io_return+0x0/0x8
                              [<000000000001b8f8>] cpu_idle+0x17c/0x224
         hardirq-on-W at:
                              [<0000000000072190>] __lock_acquire+0x784/0x18bc
                              [<000000000007335c>] lock_acquire+0x94/0xbc
                              [<00000000003d702c>] _spin_lock+0x5c/0x9c
                              [<00000000002caff6>] zfcp_fsf_req_send+0x3e/0x158
                              [<00000000002ce7fe>] zfcp_fsf_exchange_config_data+0x106/0x124
                              [<00000000002c8948>] zfcp_erp_adapter_strategy_generic+0x1c0/0x3d0
                              [<00000000002c98ea>] zfcp_erp_thread+0xcde/0x1318
                              [<000000000001b0d2>] kernel_thread_starter+0x6/0xc
                              [<000000000001b0cc>] kernel_thread_starter+0x0/0xc
       }
       ... key      at: [<0000000000e356c8>] __key.26629+0x0/0x8
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NChristof Schmitt <christof.schmit@de.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      45316a86
    • C
      [SCSI] zfcp: Dont clear reference from SCSI device to unit · 26816f1c
      Christof Schmitt 提交于
      It is possible that a remote port has a problem, the SCSI device gets
      deleted after the rport timeout and then the timeout for pending SCSI
      commands trigger an abort. For this case, don't delete the reference
      from the SCSI device to the zfcp unit, so that we can still have the
      reference to issue an abort request.
      Signed-off-by: NChristof Schmitt <christof.schmitt@de.ibm.com>
      Signed-off-by: NSwen Schillig <swen@vnet.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      26816f1c
  2. 28 10月, 2008 8 次提交
  3. 21 10月, 2008 6 次提交
  4. 17 10月, 2008 3 次提交
  5. 14 10月, 2008 5 次提交
  6. 13 10月, 2008 1 次提交
    • M
      [SCSI] block: separate failfast into multiple bits. · 6000a368
      Mike Christie 提交于
      Multipath is best at handling transport errors. If it gets a device
      error then there is not much the multipath layer can do. It will just
      access the same device but from a different path.
      
      This patch breaks up failfast into device, transport and driver errors.
      The multipath layers (md and dm mutlipath) only ask the lower levels to
      fast fail transport errors. The user of failfast, read ahead, will ask
      to fast fail on all errors.
      
      Note that blk_noretry_request will return true if any failfast bit
      is set. This allows drivers that do not support the multipath failfast
      bits to continue to fail on any failfast error like before. Drivers
      like scsi that are able to fail fast specific errors can check
      for the specific fail fast type. In the next patch I will convert
      scsi.
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      6000a368
  7. 11 10月, 2008 13 次提交