Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: [SCSI] hpsa: fix redefinition of PCI_DEVICE_ID_CISSF [SCSI] qla2xxx: Update version number to 8.03.05-k0. [SCSI] qla2xxx: Properly set the return value in qla2xxx_eh_abort function. [SCSI] qla2xxx: Correct issue where NPIV-config data was not being allocated for 82xx parts. [SCSI] qla2xxx: Change MSI initialization from using incorrect request_irq parameter. [SCSI] qla2xxx: Populate Command Type 6 LUN field properly. [SCSI] zfcp: Issue FCP command without holding SCSI host_lock [SCSI] zfcp: Prevent usage w/o holding a reference [SCSI] zfcp: No ERP escalation on gpn_ft eval [SCSI] zfcp: Correct false abort data assignment. [SCSI] zfcp: Fix common FCP request reception [SCSI] Eliminate error handler overload of the SCSI serial number [SCSI] pmcraid: disable msix and expand device config entry [SCSI] bsg: correct fault if queue object removed while dev_t open [SCSI] osd: checking NULL instead of ERR_PTR()
This commit is contained in:
commit
85cb7f1264
|
@ -250,6 +250,14 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm,
|
||||||
int ret, rw;
|
int ret, rw;
|
||||||
unsigned int dxfer_len;
|
unsigned int dxfer_len;
|
||||||
void *dxferp = NULL;
|
void *dxferp = NULL;
|
||||||
|
struct bsg_class_device *bcd = &q->bsg_dev;
|
||||||
|
|
||||||
|
/* if the LLD has been removed then the bsg_unregister_queue will
|
||||||
|
* eventually be called and the class_dev was freed, so we can no
|
||||||
|
* longer use this request_queue. Return no such address.
|
||||||
|
*/
|
||||||
|
if (!bcd->class_dev)
|
||||||
|
return ERR_PTR(-ENXIO);
|
||||||
|
|
||||||
dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp,
|
dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp,
|
||||||
hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp,
|
hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp,
|
||||||
|
|
|
@ -156,6 +156,8 @@ static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
|
||||||
if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
|
if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
|
||||||
a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
|
a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
|
||||||
return 0;
|
return 0;
|
||||||
|
if (p_status & ZFCP_STATUS_COMMON_NOESC)
|
||||||
|
return need;
|
||||||
if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
|
if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
|
||||||
need = ZFCP_ERP_ACTION_REOPEN_ADAPTER;
|
need = ZFCP_ERP_ACTION_REOPEN_ADAPTER;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
@ -188,6 +190,9 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
|
||||||
atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
|
atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
|
||||||
&zfcp_sdev->status);
|
&zfcp_sdev->status);
|
||||||
erp_action = &zfcp_sdev->erp_action;
|
erp_action = &zfcp_sdev->erp_action;
|
||||||
|
memset(erp_action, 0, sizeof(struct zfcp_erp_action));
|
||||||
|
erp_action->port = port;
|
||||||
|
erp_action->sdev = sdev;
|
||||||
if (!(atomic_read(&zfcp_sdev->status) &
|
if (!(atomic_read(&zfcp_sdev->status) &
|
||||||
ZFCP_STATUS_COMMON_RUNNING))
|
ZFCP_STATUS_COMMON_RUNNING))
|
||||||
act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
|
act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
|
||||||
|
@ -200,6 +205,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
|
||||||
zfcp_erp_action_dismiss_port(port);
|
zfcp_erp_action_dismiss_port(port);
|
||||||
atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
|
atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
|
||||||
erp_action = &port->erp_action;
|
erp_action = &port->erp_action;
|
||||||
|
memset(erp_action, 0, sizeof(struct zfcp_erp_action));
|
||||||
|
erp_action->port = port;
|
||||||
if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING))
|
if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING))
|
||||||
act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
|
act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
|
||||||
break;
|
break;
|
||||||
|
@ -209,6 +216,7 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
|
||||||
zfcp_erp_action_dismiss_adapter(adapter);
|
zfcp_erp_action_dismiss_adapter(adapter);
|
||||||
atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status);
|
atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status);
|
||||||
erp_action = &adapter->erp_action;
|
erp_action = &adapter->erp_action;
|
||||||
|
memset(erp_action, 0, sizeof(struct zfcp_erp_action));
|
||||||
if (!(atomic_read(&adapter->status) &
|
if (!(atomic_read(&adapter->status) &
|
||||||
ZFCP_STATUS_COMMON_RUNNING))
|
ZFCP_STATUS_COMMON_RUNNING))
|
||||||
act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
|
act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
|
||||||
|
@ -218,10 +226,7 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(erp_action, 0, sizeof(struct zfcp_erp_action));
|
|
||||||
erp_action->adapter = adapter;
|
erp_action->adapter = adapter;
|
||||||
erp_action->port = port;
|
|
||||||
erp_action->sdev = sdev;
|
|
||||||
erp_action->action = need;
|
erp_action->action = need;
|
||||||
erp_action->status = act_status;
|
erp_action->status = act_status;
|
||||||
|
|
||||||
|
|
|
@ -851,7 +851,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_cmnd(struct scsi_cmnd *scmnd)
|
||||||
|
|
||||||
zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
|
zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
|
||||||
|
|
||||||
req->data = zfcp_sdev;
|
req->data = sdev;
|
||||||
req->handler = zfcp_fsf_abort_fcp_command_handler;
|
req->handler = zfcp_fsf_abort_fcp_command_handler;
|
||||||
req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
|
req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
|
||||||
req->qtcb->header.port_handle = zfcp_sdev->port->handle;
|
req->qtcb->header.port_handle = zfcp_sdev->port->handle;
|
||||||
|
@ -2069,8 +2069,6 @@ static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req)
|
||||||
struct fcp_resp_with_ext *fcp_rsp;
|
struct fcp_resp_with_ext *fcp_rsp;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
zfcp_fsf_fcp_handler_common(req);
|
|
||||||
|
|
||||||
read_lock_irqsave(&req->adapter->abort_lock, flags);
|
read_lock_irqsave(&req->adapter->abort_lock, flags);
|
||||||
|
|
||||||
scpnt = req->data;
|
scpnt = req->data;
|
||||||
|
@ -2079,6 +2077,8 @@ static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zfcp_fsf_fcp_handler_common(req);
|
||||||
|
|
||||||
if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
|
if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
|
||||||
set_host_byte(scpnt, DID_TRANSPORT_DISRUPTED);
|
set_host_byte(scpnt, DID_TRANSPORT_DISRUPTED);
|
||||||
goto skip_fsfstatus;
|
goto skip_fsfstatus;
|
||||||
|
@ -2170,12 +2170,13 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd)
|
||||||
struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
|
struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
|
||||||
struct zfcp_qdio *qdio = adapter->qdio;
|
struct zfcp_qdio *qdio = adapter->qdio;
|
||||||
struct fsf_qtcb_bottom_io *io;
|
struct fsf_qtcb_bottom_io *io;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
if (unlikely(!(atomic_read(&zfcp_sdev->status) &
|
if (unlikely(!(atomic_read(&zfcp_sdev->status) &
|
||||||
ZFCP_STATUS_COMMON_UNBLOCKED)))
|
ZFCP_STATUS_COMMON_UNBLOCKED)))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
spin_lock(&qdio->req_q_lock);
|
spin_lock_irqsave(&qdio->req_q_lock, flags);
|
||||||
if (atomic_read(&qdio->req_q_free) <= 0) {
|
if (atomic_read(&qdio->req_q_free) <= 0) {
|
||||||
atomic_inc(&qdio->req_q_full);
|
atomic_inc(&qdio->req_q_full);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -2239,7 +2240,7 @@ failed_scsi_cmnd:
|
||||||
zfcp_fsf_req_free(req);
|
zfcp_fsf_req_free(req);
|
||||||
scsi_cmnd->host_scribble = NULL;
|
scsi_cmnd->host_scribble = NULL;
|
||||||
out:
|
out:
|
||||||
spin_unlock(&qdio->req_q_lock);
|
spin_unlock_irqrestore(&qdio->req_q_lock, flags);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,8 +76,8 @@ static void zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result)
|
||||||
scpnt->scsi_done(scpnt);
|
scpnt->scsi_done(scpnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int zfcp_scsi_queuecommand_lck(struct scsi_cmnd *scpnt,
|
static
|
||||||
void (*done) (struct scsi_cmnd *))
|
int zfcp_scsi_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scpnt)
|
||||||
{
|
{
|
||||||
struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
|
struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
|
||||||
struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
|
struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
|
||||||
|
@ -87,7 +87,6 @@ static int zfcp_scsi_queuecommand_lck(struct scsi_cmnd *scpnt,
|
||||||
/* reset the status for this request */
|
/* reset the status for this request */
|
||||||
scpnt->result = 0;
|
scpnt->result = 0;
|
||||||
scpnt->host_scribble = NULL;
|
scpnt->host_scribble = NULL;
|
||||||
scpnt->scsi_done = done;
|
|
||||||
|
|
||||||
scsi_result = fc_remote_port_chkready(rport);
|
scsi_result = fc_remote_port_chkready(rport);
|
||||||
if (unlikely(scsi_result)) {
|
if (unlikely(scsi_result)) {
|
||||||
|
@ -127,8 +126,6 @@ static int zfcp_scsi_queuecommand_lck(struct scsi_cmnd *scpnt,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEF_SCSI_QCMD(zfcp_scsi_queuecommand)
|
|
||||||
|
|
||||||
static int zfcp_scsi_slave_alloc(struct scsi_device *sdev)
|
static int zfcp_scsi_slave_alloc(struct scsi_device *sdev)
|
||||||
{
|
{
|
||||||
struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
|
struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
|
||||||
|
|
|
@ -90,11 +90,7 @@ static const struct pci_device_id hpsa_pci_device_id[] = {
|
||||||
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3252},
|
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3252},
|
||||||
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3253},
|
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3253},
|
||||||
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3254},
|
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3254},
|
||||||
#define PCI_DEVICE_ID_HP_CISSF 0x333f
|
{PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||||
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x333F},
|
|
||||||
{PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
|
||||||
PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
|
|
||||||
{PCI_VENDOR_ID_COMPAQ, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
|
||||||
PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
|
PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
|
||||||
{0,}
|
{0,}
|
||||||
};
|
};
|
||||||
|
@ -113,8 +109,6 @@ static struct board_type products[] = {
|
||||||
{0x3249103C, "Smart Array P812", &SA5_access},
|
{0x3249103C, "Smart Array P812", &SA5_access},
|
||||||
{0x324a103C, "Smart Array P712m", &SA5_access},
|
{0x324a103C, "Smart Array P712m", &SA5_access},
|
||||||
{0x324b103C, "Smart Array P711m", &SA5_access},
|
{0x324b103C, "Smart Array P711m", &SA5_access},
|
||||||
{0x3233103C, "StorageWorks P1210m", &SA5_access},
|
|
||||||
{0x333F103C, "StorageWorks P1210m", &SA5_access},
|
|
||||||
{0x3250103C, "Smart Array", &SA5_access},
|
{0x3250103C, "Smart Array", &SA5_access},
|
||||||
{0x3250113C, "Smart Array", &SA5_access},
|
{0x3250113C, "Smart Array", &SA5_access},
|
||||||
{0x3250123C, "Smart Array", &SA5_access},
|
{0x3250123C, "Smart Array", &SA5_access},
|
||||||
|
|
|
@ -951,8 +951,8 @@ static int _osd_req_finalize_cdb_cont(struct osd_request *or, const u8 *cap_key)
|
||||||
/* create a bio for continuation segment */
|
/* create a bio for continuation segment */
|
||||||
bio = bio_map_kern(req_q, or->cdb_cont.buff, or->cdb_cont.total_bytes,
|
bio = bio_map_kern(req_q, or->cdb_cont.buff, or->cdb_cont.total_bytes,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (unlikely(!bio))
|
if (IS_ERR(bio))
|
||||||
return -ENOMEM;
|
return PTR_ERR(bio);
|
||||||
|
|
||||||
bio->bi_rw |= REQ_WRITE;
|
bio->bi_rw |= REQ_WRITE;
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
static unsigned int pmcraid_debug_log;
|
static unsigned int pmcraid_debug_log;
|
||||||
static unsigned int pmcraid_disable_aen;
|
static unsigned int pmcraid_disable_aen;
|
||||||
static unsigned int pmcraid_log_level = IOASC_LOG_LEVEL_MUST;
|
static unsigned int pmcraid_log_level = IOASC_LOG_LEVEL_MUST;
|
||||||
|
static unsigned int pmcraid_enable_msix;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Data structures to support multiple adapters by the LLD.
|
* Data structures to support multiple adapters by the LLD.
|
||||||
|
@ -4691,7 +4692,8 @@ pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance)
|
||||||
int rc;
|
int rc;
|
||||||
struct pci_dev *pdev = pinstance->pdev;
|
struct pci_dev *pdev = pinstance->pdev;
|
||||||
|
|
||||||
if (pci_find_capability(pdev, PCI_CAP_ID_MSIX)) {
|
if ((pmcraid_enable_msix) &&
|
||||||
|
(pci_find_capability(pdev, PCI_CAP_ID_MSIX))) {
|
||||||
int num_hrrq = PMCRAID_NUM_MSIX_VECTORS;
|
int num_hrrq = PMCRAID_NUM_MSIX_VECTORS;
|
||||||
struct msix_entry entries[PMCRAID_NUM_MSIX_VECTORS];
|
struct msix_entry entries[PMCRAID_NUM_MSIX_VECTORS];
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
*/
|
*/
|
||||||
#define PMCRAID_DRIVER_NAME "PMC MaxRAID"
|
#define PMCRAID_DRIVER_NAME "PMC MaxRAID"
|
||||||
#define PMCRAID_DEVFILE "pmcsas"
|
#define PMCRAID_DEVFILE "pmcsas"
|
||||||
#define PMCRAID_DRIVER_VERSION "2.0.3"
|
#define PMCRAID_DRIVER_VERSION "1.0.3"
|
||||||
#define PMCRAID_DRIVER_DATE __DATE__
|
#define PMCRAID_DRIVER_DATE __DATE__
|
||||||
|
|
||||||
#define PMCRAID_FW_VERSION_1 0x002
|
#define PMCRAID_FW_VERSION_1 0x002
|
||||||
|
@ -333,11 +333,9 @@ struct pmcraid_config_table_entry {
|
||||||
__u8 lun[PMCRAID_LUN_LEN];
|
__u8 lun[PMCRAID_LUN_LEN];
|
||||||
} __attribute__((packed, aligned(4)));
|
} __attribute__((packed, aligned(4)));
|
||||||
|
|
||||||
/* extended configuration table sizes are of 64 bytes in size */
|
/* extended configuration table sizes are also of 32 bytes in size */
|
||||||
#define PMCRAID_CFGTE_EXT_SIZE 32
|
|
||||||
struct pmcraid_config_table_entry_ext {
|
struct pmcraid_config_table_entry_ext {
|
||||||
struct pmcraid_config_table_entry cfgte;
|
struct pmcraid_config_table_entry cfgte;
|
||||||
__u8 cfgte_ext[PMCRAID_CFGTE_EXT_SIZE];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* resource types (config_table_entry.resource_type values) */
|
/* resource types (config_table_entry.resource_type values) */
|
||||||
|
|
|
@ -2409,7 +2409,6 @@ struct qla_hw_data {
|
||||||
uint32_t enable_target_reset :1;
|
uint32_t enable_target_reset :1;
|
||||||
uint32_t enable_lip_full_login :1;
|
uint32_t enable_lip_full_login :1;
|
||||||
uint32_t enable_led_scheme :1;
|
uint32_t enable_led_scheme :1;
|
||||||
uint32_t inta_enabled :1;
|
|
||||||
uint32_t msi_enabled :1;
|
uint32_t msi_enabled :1;
|
||||||
uint32_t msix_enabled :1;
|
uint32_t msix_enabled :1;
|
||||||
uint32_t disable_serdes :1;
|
uint32_t disable_serdes :1;
|
||||||
|
|
|
@ -1061,6 +1061,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
|
||||||
fcp_cmnd->additional_cdb_len |= 2;
|
fcp_cmnd->additional_cdb_len |= 2;
|
||||||
|
|
||||||
int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun);
|
int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun);
|
||||||
|
host_to_fcp_swap((uint8_t *)&fcp_cmnd->lun, sizeof(fcp_cmnd->lun));
|
||||||
memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len);
|
memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len);
|
||||||
cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len);
|
cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len);
|
||||||
cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32(
|
cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32(
|
||||||
|
|
|
@ -2491,14 +2491,15 @@ skip_msix:
|
||||||
skip_msi:
|
skip_msi:
|
||||||
|
|
||||||
ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler,
|
ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler,
|
||||||
IRQF_SHARED, QLA2XXX_DRIVER_NAME, rsp);
|
ha->flags.msi_enabled ? 0 : IRQF_SHARED,
|
||||||
|
QLA2XXX_DRIVER_NAME, rsp);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
qla_printk(KERN_WARNING, ha,
|
qla_printk(KERN_WARNING, ha,
|
||||||
"Failed to reserve interrupt %d already in use.\n",
|
"Failed to reserve interrupt %d already in use.\n",
|
||||||
ha->pdev->irq);
|
ha->pdev->irq);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
ha->flags.inta_enabled = 1;
|
|
||||||
clear_risc_ints:
|
clear_risc_ints:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2749,6 +2749,7 @@ sufficient_dsds:
|
||||||
goto queuing_error_fcp_cmnd;
|
goto queuing_error_fcp_cmnd;
|
||||||
|
|
||||||
int_to_scsilun(sp->cmd->device->lun, &cmd_pkt->lun);
|
int_to_scsilun(sp->cmd->device->lun, &cmd_pkt->lun);
|
||||||
|
host_to_fcp_swap((uint8_t *)&cmd_pkt->lun, sizeof(cmd_pkt->lun));
|
||||||
|
|
||||||
/* build FCP_CMND IU */
|
/* build FCP_CMND IU */
|
||||||
memset(ctx->fcp_cmnd, 0, sizeof(struct fcp_cmnd));
|
memset(ctx->fcp_cmnd, 0, sizeof(struct fcp_cmnd));
|
||||||
|
|
|
@ -829,7 +829,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
|
||||||
{
|
{
|
||||||
scsi_qla_host_t *vha = shost_priv(cmd->device->host);
|
scsi_qla_host_t *vha = shost_priv(cmd->device->host);
|
||||||
srb_t *sp;
|
srb_t *sp;
|
||||||
int ret;
|
int ret = SUCCESS;
|
||||||
unsigned int id, lun;
|
unsigned int id, lun;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int wait = 0;
|
int wait = 0;
|
||||||
|
@ -2064,6 +2064,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
ha->init_cb_size = sizeof(struct mid_init_cb_81xx);
|
ha->init_cb_size = sizeof(struct mid_init_cb_81xx);
|
||||||
ha->gid_list_info_size = 8;
|
ha->gid_list_info_size = 8;
|
||||||
ha->optrom_size = OPTROM_SIZE_82XX;
|
ha->optrom_size = OPTROM_SIZE_82XX;
|
||||||
|
ha->nvram_npiv_size = QLA_MAX_VPORTS_QLA25XX;
|
||||||
ha->isp_ops = &qla82xx_isp_ops;
|
ha->isp_ops = &qla82xx_isp_ops;
|
||||||
ha->flash_conf_off = FARX_ACCESS_FLASH_CONF;
|
ha->flash_conf_off = FARX_ACCESS_FLASH_CONF;
|
||||||
ha->flash_data_off = FARX_ACCESS_FLASH_DATA;
|
ha->flash_data_off = FARX_ACCESS_FLASH_DATA;
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
/*
|
/*
|
||||||
* Driver version
|
* Driver version
|
||||||
*/
|
*/
|
||||||
#define QLA2XXX_VERSION "8.03.04-k0"
|
#define QLA2XXX_VERSION "8.03.05-k0"
|
||||||
|
|
||||||
#define QLA_DRIVER_MAJOR_VER 8
|
#define QLA_DRIVER_MAJOR_VER 8
|
||||||
#define QLA_DRIVER_MINOR_VER 3
|
#define QLA_DRIVER_MINOR_VER 3
|
||||||
#define QLA_DRIVER_PATCH_VER 4
|
#define QLA_DRIVER_PATCH_VER 5
|
||||||
#define QLA_DRIVER_BETA_VER 0
|
#define QLA_DRIVER_BETA_VER 0
|
||||||
|
|
|
@ -615,7 +615,7 @@ static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
|
||||||
return rtn;
|
return rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
|
static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
|
||||||
{
|
{
|
||||||
if (!scmd->device->host->hostt->eh_abort_handler)
|
if (!scmd->device->host->hostt->eh_abort_handler)
|
||||||
return FAILED;
|
return FAILED;
|
||||||
|
@ -623,31 +623,9 @@ static int __scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
|
||||||
return scmd->device->host->hostt->eh_abort_handler(scmd);
|
return scmd->device->host->hostt->eh_abort_handler(scmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* scsi_try_to_abort_cmd - Ask host to abort a running command.
|
|
||||||
* @scmd: SCSI cmd to abort from Lower Level.
|
|
||||||
*
|
|
||||||
* Notes:
|
|
||||||
* This function will not return until the user's completion function
|
|
||||||
* has been called. there is no timeout on this operation. if the
|
|
||||||
* author of the low-level driver wishes this operation to be timed,
|
|
||||||
* they can provide this facility themselves. helper functions in
|
|
||||||
* scsi_error.c can be supplied to make this easier to do.
|
|
||||||
*/
|
|
||||||
static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* scsi_done was called just after the command timed out and before
|
|
||||||
* we had a chance to process it. (db)
|
|
||||||
*/
|
|
||||||
if (scmd->serial_number == 0)
|
|
||||||
return SUCCESS;
|
|
||||||
return __scsi_try_to_abort_cmd(scmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
|
static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
|
||||||
{
|
{
|
||||||
if (__scsi_try_to_abort_cmd(scmd) != SUCCESS)
|
if (scsi_try_to_abort_cmd(scmd) != SUCCESS)
|
||||||
if (scsi_try_bus_device_reset(scmd) != SUCCESS)
|
if (scsi_try_bus_device_reset(scmd) != SUCCESS)
|
||||||
if (scsi_try_target_reset(scmd) != SUCCESS)
|
if (scsi_try_target_reset(scmd) != SUCCESS)
|
||||||
if (scsi_try_bus_reset(scmd) != SUCCESS)
|
if (scsi_try_bus_reset(scmd) != SUCCESS)
|
||||||
|
|
|
@ -1403,11 +1403,6 @@ static void scsi_softirq_done(struct request *rq)
|
||||||
|
|
||||||
INIT_LIST_HEAD(&cmd->eh_entry);
|
INIT_LIST_HEAD(&cmd->eh_entry);
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the serial numbers back to zero
|
|
||||||
*/
|
|
||||||
cmd->serial_number = 0;
|
|
||||||
|
|
||||||
atomic_inc(&cmd->device->iodone_cnt);
|
atomic_inc(&cmd->device->iodone_cnt);
|
||||||
if (cmd->result)
|
if (cmd->result)
|
||||||
atomic_inc(&cmd->device->ioerr_cnt);
|
atomic_inc(&cmd->device->ioerr_cnt);
|
||||||
|
|
Loading…
Reference in New Issue