Loading drivers/scsi/qla2xxx/qla_os.c +13 −11 Original line number Original line Diff line number Diff line Loading @@ -507,6 +507,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) int ret, i; int ret, i; unsigned int id, lun; unsigned int id, lun; unsigned long serial; unsigned long serial; unsigned long flags; if (!CMD_SP(cmd)) if (!CMD_SP(cmd)) return FAILED; return FAILED; Loading @@ -519,7 +520,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) /* Check active list for command command. */ /* Check active list for command command. */ spin_unlock_irq(ha->host->host_lock); spin_unlock_irq(ha->host->host_lock); spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) { for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) { sp = ha->outstanding_cmds[i]; sp = ha->outstanding_cmds[i]; Loading @@ -534,7 +535,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) sp->state)); sp->state)); DEBUG3(qla2x00_print_scsi_cmd(cmd);) DEBUG3(qla2x00_print_scsi_cmd(cmd);) spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); if (qla2x00_abort_command(ha, sp)) { if (qla2x00_abort_command(ha, sp)) { DEBUG2(printk("%s(%ld): abort_command " DEBUG2(printk("%s(%ld): abort_command " "mbx failed.\n", __func__, ha->host_no)); "mbx failed.\n", __func__, ha->host_no)); Loading @@ -543,20 +544,19 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) "mbx success.\n", __func__, ha->host_no)); "mbx success.\n", __func__, ha->host_no)); ret = SUCCESS; ret = SUCCESS; } } spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); break; break; } } spin_unlock_irqrestore(&ha->hardware_lock, flags); /* Wait for the command to be returned. */ /* Wait for the command to be returned. */ if (ret == SUCCESS) { if (ret == SUCCESS) { spin_unlock(&ha->hardware_lock); if (qla2x00_eh_wait_on_command(ha, cmd) != QLA_SUCCESS) { if (qla2x00_eh_wait_on_command(ha, cmd) != QLA_SUCCESS) { qla_printk(KERN_ERR, ha, qla_printk(KERN_ERR, ha, "scsi(%ld:%d:%d): Abort handler timed out -- %lx " "scsi(%ld:%d:%d): Abort handler timed out -- %lx " "%x.\n", ha->host_no, id, lun, serial, ret); "%x.\n", ha->host_no, id, lun, serial, ret); } } spin_lock(&ha->hardware_lock); } } spin_lock_irq(ha->host->host_lock); spin_lock_irq(ha->host->host_lock); Loading Loading @@ -588,6 +588,7 @@ qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t) int status; int status; srb_t *sp; srb_t *sp; struct scsi_cmnd *cmd; struct scsi_cmnd *cmd; unsigned long flags; status = 0; status = 0; Loading @@ -596,11 +597,11 @@ qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t) * array * array */ */ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); sp = ha->outstanding_cmds[cnt]; sp = ha->outstanding_cmds[cnt]; if (sp) { if (sp) { cmd = sp->cmd; cmd = sp->cmd; spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); if (cmd->device->id == t) { if (cmd->device->id == t) { if (!qla2x00_eh_wait_on_command(ha, cmd)) { if (!qla2x00_eh_wait_on_command(ha, cmd)) { status = 1; status = 1; Loading @@ -608,7 +609,7 @@ qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t) } } } } } else { } else { spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); } } } } return (status); return (status); Loading Loading @@ -740,6 +741,7 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha) int status; int status; srb_t *sp; srb_t *sp; struct scsi_cmnd *cmd; struct scsi_cmnd *cmd; unsigned long flags; status = 1; status = 1; Loading @@ -748,17 +750,17 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha) * array * array */ */ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); sp = ha->outstanding_cmds[cnt]; sp = ha->outstanding_cmds[cnt]; if (sp) { if (sp) { cmd = sp->cmd; cmd = sp->cmd; spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); status = qla2x00_eh_wait_on_command(ha, cmd); status = qla2x00_eh_wait_on_command(ha, cmd); if (status == 0) if (status == 0) break; break; } } else { else { spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); } } } } return (status); return (status); Loading drivers/scsi/scsi_scan.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1197,6 +1197,7 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel, if (!starget) if (!starget) return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM); get_device(&starget->dev); down(&shost->scan_mutex); down(&shost->scan_mutex); res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, hostdata); res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, hostdata); if (res != SCSI_SCAN_LUN_PRESENT) if (res != SCSI_SCAN_LUN_PRESENT) Loading Loading
drivers/scsi/qla2xxx/qla_os.c +13 −11 Original line number Original line Diff line number Diff line Loading @@ -507,6 +507,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) int ret, i; int ret, i; unsigned int id, lun; unsigned int id, lun; unsigned long serial; unsigned long serial; unsigned long flags; if (!CMD_SP(cmd)) if (!CMD_SP(cmd)) return FAILED; return FAILED; Loading @@ -519,7 +520,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) /* Check active list for command command. */ /* Check active list for command command. */ spin_unlock_irq(ha->host->host_lock); spin_unlock_irq(ha->host->host_lock); spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) { for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) { sp = ha->outstanding_cmds[i]; sp = ha->outstanding_cmds[i]; Loading @@ -534,7 +535,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) sp->state)); sp->state)); DEBUG3(qla2x00_print_scsi_cmd(cmd);) DEBUG3(qla2x00_print_scsi_cmd(cmd);) spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); if (qla2x00_abort_command(ha, sp)) { if (qla2x00_abort_command(ha, sp)) { DEBUG2(printk("%s(%ld): abort_command " DEBUG2(printk("%s(%ld): abort_command " "mbx failed.\n", __func__, ha->host_no)); "mbx failed.\n", __func__, ha->host_no)); Loading @@ -543,20 +544,19 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) "mbx success.\n", __func__, ha->host_no)); "mbx success.\n", __func__, ha->host_no)); ret = SUCCESS; ret = SUCCESS; } } spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); break; break; } } spin_unlock_irqrestore(&ha->hardware_lock, flags); /* Wait for the command to be returned. */ /* Wait for the command to be returned. */ if (ret == SUCCESS) { if (ret == SUCCESS) { spin_unlock(&ha->hardware_lock); if (qla2x00_eh_wait_on_command(ha, cmd) != QLA_SUCCESS) { if (qla2x00_eh_wait_on_command(ha, cmd) != QLA_SUCCESS) { qla_printk(KERN_ERR, ha, qla_printk(KERN_ERR, ha, "scsi(%ld:%d:%d): Abort handler timed out -- %lx " "scsi(%ld:%d:%d): Abort handler timed out -- %lx " "%x.\n", ha->host_no, id, lun, serial, ret); "%x.\n", ha->host_no, id, lun, serial, ret); } } spin_lock(&ha->hardware_lock); } } spin_lock_irq(ha->host->host_lock); spin_lock_irq(ha->host->host_lock); Loading Loading @@ -588,6 +588,7 @@ qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t) int status; int status; srb_t *sp; srb_t *sp; struct scsi_cmnd *cmd; struct scsi_cmnd *cmd; unsigned long flags; status = 0; status = 0; Loading @@ -596,11 +597,11 @@ qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t) * array * array */ */ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); sp = ha->outstanding_cmds[cnt]; sp = ha->outstanding_cmds[cnt]; if (sp) { if (sp) { cmd = sp->cmd; cmd = sp->cmd; spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); if (cmd->device->id == t) { if (cmd->device->id == t) { if (!qla2x00_eh_wait_on_command(ha, cmd)) { if (!qla2x00_eh_wait_on_command(ha, cmd)) { status = 1; status = 1; Loading @@ -608,7 +609,7 @@ qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t) } } } } } else { } else { spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); } } } } return (status); return (status); Loading Loading @@ -740,6 +741,7 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha) int status; int status; srb_t *sp; srb_t *sp; struct scsi_cmnd *cmd; struct scsi_cmnd *cmd; unsigned long flags; status = 1; status = 1; Loading @@ -748,17 +750,17 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha) * array * array */ */ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { spin_lock(&ha->hardware_lock); spin_lock_irqsave(&ha->hardware_lock, flags); sp = ha->outstanding_cmds[cnt]; sp = ha->outstanding_cmds[cnt]; if (sp) { if (sp) { cmd = sp->cmd; cmd = sp->cmd; spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); status = qla2x00_eh_wait_on_command(ha, cmd); status = qla2x00_eh_wait_on_command(ha, cmd); if (status == 0) if (status == 0) break; break; } } else { else { spin_unlock(&ha->hardware_lock); spin_unlock_irqrestore(&ha->hardware_lock, flags); } } } } return (status); return (status); Loading
drivers/scsi/scsi_scan.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1197,6 +1197,7 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel, if (!starget) if (!starget) return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM); get_device(&starget->dev); down(&shost->scan_mutex); down(&shost->scan_mutex); res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, hostdata); res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, hostdata); if (res != SCSI_SCAN_LUN_PRESENT) if (res != SCSI_SCAN_LUN_PRESENT) Loading