Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68f03bd1 authored by Satish Kharat's avatar Satish Kharat Committed by Martin K. Petersen
Browse files

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: default avatarSatish Kharat <satishkh@cisco.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 5271d1ca
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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;
}