scsi: fnic: use fnic_lock to guard fnic->state_flags
Need to use fnic_lock as well as host lock in that order to set state flags. [mkp: typos] Signed-off-by: Satish Kharat <satishkh@cisco.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
5271d1cad8
commit
68f03bd1ee
@ -180,20 +180,19 @@ void
|
|||||||
__fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
|
__fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
|
||||||
unsigned long clearbits)
|
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 flags = 0;
|
||||||
|
unsigned long host_lock_flags = 0;
|
||||||
|
|
||||||
if (!sh_locked)
|
spin_lock_irqsave(&fnic->fnic_lock, flags);
|
||||||
spin_lock_irqsave(host->host_lock, flags);
|
spin_lock_irqsave(fnic->lport->host->host_lock, host_lock_flags);
|
||||||
|
|
||||||
if (clearbits)
|
if (clearbits)
|
||||||
fnic->state_flags &= ~st_flags;
|
fnic->state_flags &= ~st_flags;
|
||||||
else
|
else
|
||||||
fnic->state_flags |= st_flags;
|
fnic->state_flags |= st_flags;
|
||||||
|
|
||||||
if (!sh_locked)
|
spin_unlock_irqrestore(fnic->lport->host->host_lock, host_lock_flags);
|
||||||
spin_unlock_irqrestore(host->host_lock, flags);
|
spin_unlock_irqrestore(&fnic->fnic_lock, flags);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user