Skip to content

Commit

Permalink
[SCSI] ipr: Fix sparse error in ipr driver
Browse files Browse the repository at this point in the history
This patch fixes the following sparse error:

 CHECK   drivers/scsi/ipr.c
spinlock.h:147:9: warning: context imbalance in 'ipr_reset_reload' - unexpected unlock

Signed-off-by: Wen Xiong <wenxiong@linux.vnet.ibm.com>
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
  • Loading branch information
wenxiong@linux.vnet.ibm.com authored and James Bottomley committed Jan 29, 2013
1 parent 4415e44 commit 70233ac
Showing 1 changed file with 17 additions and 52 deletions.
69 changes: 17 additions & 52 deletions drivers/scsi/ipr.c
Original file line number Diff line number Diff line change
Expand Up @@ -2552,36 +2552,6 @@ static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd)
LEAVE;
}

/**
* ipr_reset_reload - Reset/Reload the IOA
* @ioa_cfg: ioa config struct
* @shutdown_type: shutdown type
*
* This function resets the adapter and re-initializes it.
* This function assumes that all new host commands have been stopped.
* Return value:
* SUCCESS / FAILED
**/
static int ipr_reset_reload(struct ipr_ioa_cfg *ioa_cfg,
enum ipr_shutdown_type shutdown_type)
{
if (!ioa_cfg->in_reset_reload)
ipr_initiate_ioa_reset(ioa_cfg, shutdown_type);

spin_unlock_irq(ioa_cfg->host->host_lock);
wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
spin_lock_irq(ioa_cfg->host->host_lock);

/* If we got hit with a host reset while we were already resetting
the adapter for some reason, and the reset failed. */
if (ioa_cfg->hrrq[IPR_INIT_HRRQ].ioa_is_dead) {
ipr_trace;
return FAILED;
}

return SUCCESS;
}

/**
* ipr_find_ses_entry - Find matching SES in SES table
* @res: resource entry struct of SES
Expand Down Expand Up @@ -4797,43 +4767,38 @@ static int ipr_slave_alloc(struct scsi_device *sdev)
return rc;
}

/**
* ipr_eh_host_reset - Reset the host adapter
* @scsi_cmd: scsi command struct
*
* Return value:
* SUCCESS / FAILED
**/
static int __ipr_eh_host_reset(struct scsi_cmnd *scsi_cmd)
static int ipr_eh_host_reset(struct scsi_cmnd *cmd)
{
struct ipr_ioa_cfg *ioa_cfg;
int rc;
unsigned long lock_flags = 0;
int rc = SUCCESS;

ENTER;
ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
ioa_cfg = (struct ipr_ioa_cfg *) cmd->device->host->hostdata;
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);

if (!ioa_cfg->in_reset_reload) {
ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_ABBREV);
dev_err(&ioa_cfg->pdev->dev,
"Adapter being reset as a result of error recovery.\n");

if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
ioa_cfg->sdt_state = GET_DUMP;
}

rc = ipr_reset_reload(ioa_cfg, IPR_SHUTDOWN_ABBREV);

LEAVE;
return rc;
}

static int ipr_eh_host_reset(struct scsi_cmnd *cmd)
{
int rc;
spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);

spin_lock_irq(cmd->device->host->host_lock);
rc = __ipr_eh_host_reset(cmd);
spin_unlock_irq(cmd->device->host->host_lock);
/* If we got hit with a host reset while we were already resetting
the adapter for some reason, and the reset failed. */
if (ioa_cfg->hrrq[IPR_INIT_HRRQ].ioa_is_dead) {
ipr_trace;
rc = FAILED;
}

spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
LEAVE;
return rc;
}

Expand Down

0 comments on commit 70233ac

Please sign in to comment.