提交 85cb7f12 编写于 作者: L Linus Torvalds

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()
...@@ -250,6 +250,14 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd) ...@@ -2239,7 +2240,7 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *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) ...@@ -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, ...@@ -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, ...@@ -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[] = { ...@@ -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[] = { ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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 @@ ...@@ -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 { ...@@ -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 { ...@@ -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, ...@@ -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 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp) ...@@ -2491,14 +2491,15 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp)
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 @@ qla82xx_start_scsi(srb_t *sp) ...@@ -2749,6 +2749,7 @@ qla82xx_start_scsi(srb_t *sp)
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) ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册