• Christof Schmitt's avatar
    [SCSI] zfcp: Change spin_lock_bh to spin_lock_irq to fix lockdep warning · 44a24cb3
    Christof Schmitt authored
    With the change to use the data on the SCSI device, iterating through
    all LUNs/scsi_devices takes the SCSI host_lock. This triggers warnings
    from the lock dependency checker:
    
    =========================================================
    [ INFO: possible irq lock inversion dependency detected ]
    2.6.34.1 #97
    ---------------------------------------------------------
    chchp/3224 just changed the state of lock:
     (&(shost->host_lock)->rlock){-.-...}, at: [<00000000003a73f4>] __scsi_iterate_devices+0x38/0xbc
    but this lock took another, HARDIRQ-unsafe lock in the past:
     (&(&qdio->req_q_lock)->rlock){+.-...}
    
    and interrupts could create inverse lock ordering between them.
    
    other info that might help us debug this: [   24.972394] 2 locks held by chchp/3224:
     #0:  (&(sch->lock)->rlock){-.-...}, at: [<0000000000401efa>] do_IRQ+0xb2/0x1e4
     #1:  (&adapter->port_list_lock){.-....}, at: [<0000000000490302>] zfcp_erp_modify_adapter_status+0x9e/0x16c
    [...]
    
    =========================================================
    [ INFO: possible irq lock inversion dependency detected ]
    2.6.34.1 #98
    ---------------------------------------------------------
    chchp/3235 just changed the state of lock:
     (&(shost->host_lock)->rlock){-.-...}, at: [<00000000003a73f4>] __scsi_iterate_devices+0x38/0xbc
    but this lock took another, HARDIRQ-unsafe lock in the past:
     (&(&qdio->stat_lock)->rlock){+.-...}
    
    and interrupts could create inverse lock ordering between them.
    
    other info that might help us debug this:
    2 locks held by chchp/3235:
     #0:  (&(sch->lock)->rlock){-.-...}, at: [<0000000000401efa>] do_IRQ+0xb2/0x1e4
     #1:  (&adapter->port_list_lock){.-.-..}, at: [<00000000004902f6>] zfcp_erp_modify_adapter_status+0x9e/0x16c
    [...]
    
    To stop this warning, change the request queue lock to disable irqs,
    not only softirq. The changes are required only outside of the
    critical "send fcp command" path.
    Reviewed-by: default avatarSwen Schillig <swen@vnet.ibm.com>
    Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
    44a24cb3
zfcp_qdio.c 12.2 KB