Need to use fnic_lock as well as host lock in that order
to set state flags.

Signed-off-by: Satish Kharat <satis...@cisco.com>
---
 drivers/scsi/fnic/fnic_scsi.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
index 96acfcecd540..94186c4da091 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -180,20 +180,19 @@ void
 __fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
                        unsigned long clearbits)
 {
-       struct Scsi_Host *host = fnic->lport->host;
-       int sh_locked = spin_is_locked(host->host_lock);
        unsigned long flags = 0;
+       unsigned long  host_lock_flags = 0;
 
-       if (!sh_locked)
-               spin_lock_irqsave(host->host_lock, flags);
+       spin_lock_irqsave(&fnic->fnic_lock, flags);
+       spin_lock_irqsave(fnic->lport->host->host_lock, host_lock_flags);
 
        if (clearbits)
                fnic->state_flags &= ~st_flags;
        else
                fnic->state_flags |= st_flags;
 
-       if (!sh_locked)
-               spin_unlock_irqrestore(host->host_lock, flags);
+       spin_unlock_irqrestore(fnic->lport->host->host_lock, host_lock_flags);
+       spin_unlock_irqrestore(&fnic->fnic_lock, flags);
 
        return;
 }
-- 
2.17.1

Reply via email to