Commit 18cadf9f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
 "A set of 8 obvious fixes.

  Three (2 qla2xxx and the cxlflash oopses) are regressions, two from
  4.17 and one from the merge window. The hpsa change is user visible,
  but it fixes an error users have complained about"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: cxlflash: fix assignment of the backend operations
  scsi: qedi: Send driver state to MFW
  scsi: qedf: Send the driver state to MFW
  scsi: hpsa: correct enclosure sas address
  scsi: sd_zbc: Fix variable type and bogus comment
  scsi: qla2xxx: Fix NULL pointer dereference for fcport search
  scsi: qla2xxx: Fix kernel crash due to late workqueue allocation
  scsi: qla2xxx: Fix inconsistent DMA mem alloc/free
parents 47736af3 943e59fe
...@@ -107,12 +107,12 @@ cxlflash_assign_ops(struct dev_dependent_vals *ddv) ...@@ -107,12 +107,12 @@ cxlflash_assign_ops(struct dev_dependent_vals *ddv)
{ {
const struct cxlflash_backend_ops *ops = NULL; const struct cxlflash_backend_ops *ops = NULL;
#ifdef CONFIG_OCXL #ifdef CONFIG_OCXL_BASE
if (ddv->flags & CXLFLASH_OCXL_DEV) if (ddv->flags & CXLFLASH_OCXL_DEV)
ops = &cxlflash_ocxl_ops; ops = &cxlflash_ocxl_ops;
#endif #endif
#ifdef CONFIG_CXL #ifdef CONFIG_CXL_BASE
if (!(ddv->flags & CXLFLASH_OCXL_DEV)) if (!(ddv->flags & CXLFLASH_OCXL_DEV))
ops = &cxlflash_cxl_ops; ops = &cxlflash_cxl_ops;
#endif #endif
......
...@@ -3440,11 +3440,11 @@ static void hpsa_get_enclosure_info(struct ctlr_info *h, ...@@ -3440,11 +3440,11 @@ static void hpsa_get_enclosure_info(struct ctlr_info *h,
struct ext_report_lun_entry *rle = &rlep->LUN[rle_index]; struct ext_report_lun_entry *rle = &rlep->LUN[rle_index];
u16 bmic_device_index = 0; u16 bmic_device_index = 0;
bmic_device_index = GET_BMIC_DRIVE_NUMBER(&rle->lunid[0]); encl_dev->eli =
encl_dev->sas_address =
hpsa_get_enclosure_logical_identifier(h, scsi3addr); hpsa_get_enclosure_logical_identifier(h, scsi3addr);
bmic_device_index = GET_BMIC_DRIVE_NUMBER(&rle->lunid[0]);
if (encl_dev->target == -1 || encl_dev->lun == -1) { if (encl_dev->target == -1 || encl_dev->lun == -1) {
rc = IO_OK; rc = IO_OK;
goto out; goto out;
...@@ -9697,7 +9697,24 @@ hpsa_sas_get_linkerrors(struct sas_phy *phy) ...@@ -9697,7 +9697,24 @@ hpsa_sas_get_linkerrors(struct sas_phy *phy)
static int static int
hpsa_sas_get_enclosure_identifier(struct sas_rphy *rphy, u64 *identifier) hpsa_sas_get_enclosure_identifier(struct sas_rphy *rphy, u64 *identifier)
{ {
*identifier = rphy->identify.sas_address; struct Scsi_Host *shost = phy_to_shost(rphy);
struct ctlr_info *h;
struct hpsa_scsi_dev_t *sd;
if (!shost)
return -ENXIO;
h = shost_to_hba(shost);
if (!h)
return -ENXIO;
sd = hpsa_find_device_by_sas_rphy(h, rphy);
if (!sd)
return -ENXIO;
*identifier = sd->eli;
return 0; return 0;
} }
......
...@@ -68,6 +68,7 @@ struct hpsa_scsi_dev_t { ...@@ -68,6 +68,7 @@ struct hpsa_scsi_dev_t {
#define RAID_CTLR_LUNID "\0\0\0\0\0\0\0\0" #define RAID_CTLR_LUNID "\0\0\0\0\0\0\0\0"
unsigned char device_id[16]; /* from inquiry pg. 0x83 */ unsigned char device_id[16]; /* from inquiry pg. 0x83 */
u64 sas_address; u64 sas_address;
u64 eli; /* from report diags. */
unsigned char vendor[8]; /* bytes 8-15 of inquiry data */ unsigned char vendor[8]; /* bytes 8-15 of inquiry data */
unsigned char model[16]; /* bytes 16-31 of inquiry data */ unsigned char model[16]; /* bytes 16-31 of inquiry data */
unsigned char rev; /* byte 2 of inquiry data */ unsigned char rev; /* byte 2 of inquiry data */
......
...@@ -3295,6 +3295,11 @@ static int __qedf_probe(struct pci_dev *pdev, int mode) ...@@ -3295,6 +3295,11 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
init_completion(&qedf->flogi_compl); init_completion(&qedf->flogi_compl);
status = qed_ops->common->update_drv_state(qedf->cdev, true);
if (status)
QEDF_ERR(&(qedf->dbg_ctx),
"Failed to send drv state to MFW.\n");
memset(&link_params, 0, sizeof(struct qed_link_params)); memset(&link_params, 0, sizeof(struct qed_link_params));
link_params.link_up = true; link_params.link_up = true;
status = qed_ops->common->set_link(qedf->cdev, &link_params); status = qed_ops->common->set_link(qedf->cdev, &link_params);
...@@ -3343,6 +3348,7 @@ static int qedf_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -3343,6 +3348,7 @@ static int qedf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
static void __qedf_remove(struct pci_dev *pdev, int mode) static void __qedf_remove(struct pci_dev *pdev, int mode)
{ {
struct qedf_ctx *qedf; struct qedf_ctx *qedf;
int rc;
if (!pdev) { if (!pdev) {
QEDF_ERR(NULL, "pdev is NULL.\n"); QEDF_ERR(NULL, "pdev is NULL.\n");
...@@ -3437,6 +3443,12 @@ static void __qedf_remove(struct pci_dev *pdev, int mode) ...@@ -3437,6 +3443,12 @@ static void __qedf_remove(struct pci_dev *pdev, int mode)
qed_ops->common->set_power_state(qedf->cdev, PCI_D0); qed_ops->common->set_power_state(qedf->cdev, PCI_D0);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
} }
rc = qed_ops->common->update_drv_state(qedf->cdev, false);
if (rc)
QEDF_ERR(&(qedf->dbg_ctx),
"Failed to send drv state to MFW.\n");
qed_ops->common->slowpath_stop(qedf->cdev); qed_ops->common->slowpath_stop(qedf->cdev);
qed_ops->common->remove(qedf->cdev); qed_ops->common->remove(qedf->cdev);
......
...@@ -2273,6 +2273,7 @@ static int qedi_setup_boot_info(struct qedi_ctx *qedi) ...@@ -2273,6 +2273,7 @@ static int qedi_setup_boot_info(struct qedi_ctx *qedi)
static void __qedi_remove(struct pci_dev *pdev, int mode) static void __qedi_remove(struct pci_dev *pdev, int mode)
{ {
struct qedi_ctx *qedi = pci_get_drvdata(pdev); struct qedi_ctx *qedi = pci_get_drvdata(pdev);
int rval;
if (qedi->tmf_thread) { if (qedi->tmf_thread) {
flush_workqueue(qedi->tmf_thread); flush_workqueue(qedi->tmf_thread);
...@@ -2302,6 +2303,10 @@ static void __qedi_remove(struct pci_dev *pdev, int mode) ...@@ -2302,6 +2303,10 @@ static void __qedi_remove(struct pci_dev *pdev, int mode)
if (mode == QEDI_MODE_NORMAL) if (mode == QEDI_MODE_NORMAL)
qedi_free_iscsi_pf_param(qedi); qedi_free_iscsi_pf_param(qedi);
rval = qedi_ops->common->update_drv_state(qedi->cdev, false);
if (rval)
QEDI_ERR(&qedi->dbg_ctx, "Failed to send drv state to MFW\n");
if (!test_bit(QEDI_IN_OFFLINE, &qedi->flags)) { if (!test_bit(QEDI_IN_OFFLINE, &qedi->flags)) {
qedi_ops->common->slowpath_stop(qedi->cdev); qedi_ops->common->slowpath_stop(qedi->cdev);
qedi_ops->common->remove(qedi->cdev); qedi_ops->common->remove(qedi->cdev);
...@@ -2576,6 +2581,12 @@ static int __qedi_probe(struct pci_dev *pdev, int mode) ...@@ -2576,6 +2581,12 @@ static int __qedi_probe(struct pci_dev *pdev, int mode)
if (qedi_setup_boot_info(qedi)) if (qedi_setup_boot_info(qedi))
QEDI_ERR(&qedi->dbg_ctx, QEDI_ERR(&qedi->dbg_ctx,
"No iSCSI boot target configured\n"); "No iSCSI boot target configured\n");
rc = qedi_ops->common->update_drv_state(qedi->cdev, true);
if (rc)
QEDI_ERR(&qedi->dbg_ctx,
"Failed to send drv state to MFW\n");
} }
return 0; return 0;
......
...@@ -361,6 +361,8 @@ struct ct_arg { ...@@ -361,6 +361,8 @@ struct ct_arg {
dma_addr_t rsp_dma; dma_addr_t rsp_dma;
u32 req_size; u32 req_size;
u32 rsp_size; u32 rsp_size;
u32 req_allocated_size;
u32 rsp_allocated_size;
void *req; void *req;
void *rsp; void *rsp;
port_id_t id; port_id_t id;
......
...@@ -556,7 +556,7 @@ static void qla2x00_async_sns_sp_done(void *s, int rc) ...@@ -556,7 +556,7 @@ static void qla2x00_async_sns_sp_done(void *s, int rc)
/* please ignore kernel warning. otherwise, we have mem leak. */ /* please ignore kernel warning. otherwise, we have mem leak. */
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
...@@ -564,7 +564,7 @@ static void qla2x00_async_sns_sp_done(void *s, int rc) ...@@ -564,7 +564,7 @@ static void qla2x00_async_sns_sp_done(void *s, int rc)
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
...@@ -617,6 +617,7 @@ static int qla_async_rftid(scsi_qla_host_t *vha, port_id_t *d_id) ...@@ -617,6 +617,7 @@ static int qla_async_rftid(scsi_qla_host_t *vha, port_id_t *d_id)
sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.req) { if (!sp->u.iocb_cmd.u.ctarg.req) {
ql_log(ql_log_warn, vha, 0xd041, ql_log(ql_log_warn, vha, 0xd041,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -627,6 +628,7 @@ static int qla_async_rftid(scsi_qla_host_t *vha, port_id_t *d_id) ...@@ -627,6 +628,7 @@ static int qla_async_rftid(scsi_qla_host_t *vha, port_id_t *d_id)
sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.rsp) { if (!sp->u.iocb_cmd.u.ctarg.rsp) {
ql_log(ql_log_warn, vha, 0xd042, ql_log(ql_log_warn, vha, 0xd042,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -712,6 +714,7 @@ static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id, ...@@ -712,6 +714,7 @@ static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id,
sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.req) { if (!sp->u.iocb_cmd.u.ctarg.req) {
ql_log(ql_log_warn, vha, 0xd041, ql_log(ql_log_warn, vha, 0xd041,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -722,6 +725,7 @@ static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id, ...@@ -722,6 +725,7 @@ static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id,
sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.rsp) { if (!sp->u.iocb_cmd.u.ctarg.rsp) {
ql_log(ql_log_warn, vha, 0xd042, ql_log(ql_log_warn, vha, 0xd042,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -802,6 +806,7 @@ static int qla_async_rnnid(scsi_qla_host_t *vha, port_id_t *d_id, ...@@ -802,6 +806,7 @@ static int qla_async_rnnid(scsi_qla_host_t *vha, port_id_t *d_id,
sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.req) { if (!sp->u.iocb_cmd.u.ctarg.req) {
ql_log(ql_log_warn, vha, 0xd041, ql_log(ql_log_warn, vha, 0xd041,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -812,6 +817,7 @@ static int qla_async_rnnid(scsi_qla_host_t *vha, port_id_t *d_id, ...@@ -812,6 +817,7 @@ static int qla_async_rnnid(scsi_qla_host_t *vha, port_id_t *d_id,
sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.rsp) { if (!sp->u.iocb_cmd.u.ctarg.rsp) {
ql_log(ql_log_warn, vha, 0xd042, ql_log(ql_log_warn, vha, 0xd042,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -909,6 +915,7 @@ static int qla_async_rsnn_nn(scsi_qla_host_t *vha) ...@@ -909,6 +915,7 @@ static int qla_async_rsnn_nn(scsi_qla_host_t *vha)
sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.req) { if (!sp->u.iocb_cmd.u.ctarg.req) {
ql_log(ql_log_warn, vha, 0xd041, ql_log(ql_log_warn, vha, 0xd041,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -919,6 +926,7 @@ static int qla_async_rsnn_nn(scsi_qla_host_t *vha) ...@@ -919,6 +926,7 @@ static int qla_async_rsnn_nn(scsi_qla_host_t *vha)
sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.rsp) { if (!sp->u.iocb_cmd.u.ctarg.rsp) {
ql_log(ql_log_warn, vha, 0xd042, ql_log(ql_log_warn, vha, 0xd042,
"%s: Failed to allocate ct_sns request.\n", "%s: Failed to allocate ct_sns request.\n",
...@@ -3388,14 +3396,14 @@ void qla24xx_sp_unmap(scsi_qla_host_t *vha, srb_t *sp) ...@@ -3388,14 +3396,14 @@ void qla24xx_sp_unmap(scsi_qla_host_t *vha, srb_t *sp)
{ {
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
} }
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
...@@ -3596,14 +3604,14 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res) ...@@ -3596,14 +3604,14 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
/* please ignore kernel warning. otherwise, we have mem leak. */ /* please ignore kernel warning. otherwise, we have mem leak. */
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
} }
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
...@@ -3654,6 +3662,7 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id) ...@@ -3654,6 +3662,7 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.req) { if (!sp->u.iocb_cmd.u.ctarg.req) {
ql_log(ql_log_warn, vha, 0xd041, ql_log(ql_log_warn, vha, 0xd041,
"Failed to allocate ct_sns request.\n"); "Failed to allocate ct_sns request.\n");
...@@ -3663,6 +3672,7 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id) ...@@ -3663,6 +3672,7 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma,
GFP_KERNEL); GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.rsp) { if (!sp->u.iocb_cmd.u.ctarg.rsp) {
ql_log(ql_log_warn, vha, 0xd042, ql_log(ql_log_warn, vha, 0xd042,
"Failed to allocate ct_sns request.\n"); "Failed to allocate ct_sns request.\n");
...@@ -4142,14 +4152,14 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res) ...@@ -4142,14 +4152,14 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
*/ */
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
} }
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
...@@ -4179,14 +4189,14 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res) ...@@ -4179,14 +4189,14 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
/* please ignore kernel warning. Otherwise, we have mem leak. */ /* please ignore kernel warning. Otherwise, we have mem leak. */
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
} }
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
...@@ -4281,14 +4291,14 @@ static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp, ...@@ -4281,14 +4291,14 @@ static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp,
done_free_sp: done_free_sp:
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
} }
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
...@@ -4349,6 +4359,7 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp) ...@@ -4349,6 +4359,7 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
sp->u.iocb_cmd.u.ctarg.req = dma_zalloc_coherent( sp->u.iocb_cmd.u.ctarg.req = dma_zalloc_coherent(
&vha->hw->pdev->dev, sizeof(struct ct_sns_pkt), &vha->hw->pdev->dev, sizeof(struct ct_sns_pkt),
&sp->u.iocb_cmd.u.ctarg.req_dma, GFP_KERNEL); &sp->u.iocb_cmd.u.ctarg.req_dma, GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.req) { if (!sp->u.iocb_cmd.u.ctarg.req) {
ql_log(ql_log_warn, vha, 0xffff, ql_log(ql_log_warn, vha, 0xffff,
"Failed to allocate ct_sns request.\n"); "Failed to allocate ct_sns request.\n");
...@@ -4366,6 +4377,7 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp) ...@@ -4366,6 +4377,7 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
sp->u.iocb_cmd.u.ctarg.rsp = dma_zalloc_coherent( sp->u.iocb_cmd.u.ctarg.rsp = dma_zalloc_coherent(
&vha->hw->pdev->dev, rspsz, &vha->hw->pdev->dev, rspsz,
&sp->u.iocb_cmd.u.ctarg.rsp_dma, GFP_KERNEL); &sp->u.iocb_cmd.u.ctarg.rsp_dma, GFP_KERNEL);
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt);
if (!sp->u.iocb_cmd.u.ctarg.rsp) { if (!sp->u.iocb_cmd.u.ctarg.rsp) {
ql_log(ql_log_warn, vha, 0xffff, ql_log(ql_log_warn, vha, 0xffff,
"Failed to allocate ct_sns request.\n"); "Failed to allocate ct_sns request.\n");
...@@ -4425,14 +4437,14 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp) ...@@ -4425,14 +4437,14 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
done_free_sp: done_free_sp:
if (sp->u.iocb_cmd.u.ctarg.req) { if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma); sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL; sp->u.iocb_cmd.u.ctarg.req = NULL;
} }
if (sp->u.iocb_cmd.u.ctarg.rsp) { if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev, dma_free_coherent(&vha->hw->pdev->dev,
sizeof(struct ct_sns_pkt), sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp, sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma); sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
......
...@@ -591,12 +591,14 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha, ...@@ -591,12 +591,14 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
conflict_fcport = conflict_fcport =
qla2x00_find_fcport_by_wwpn(vha, qla2x00_find_fcport_by_wwpn(vha,
e->port_name, 0); e->port_name, 0);
ql_dbg(ql_dbg_disc, vha, 0x20e6, if (conflict_fcport) {
"%s %d %8phC post del sess\n", qlt_schedule_sess_for_deletion
__func__, __LINE__, (conflict_fcport);
conflict_fcport->port_name); ql_dbg(ql_dbg_disc, vha, 0x20e6,
qlt_schedule_sess_for_deletion "%s %d %8phC post del sess\n",
(conflict_fcport); __func__, __LINE__,
conflict_fcport->port_name);
}
} }
/* FW already picked this loop id for another fcport */ /* FW already picked this loop id for another fcport */
......
...@@ -3180,6 +3180,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -3180,6 +3180,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
"req->req_q_in=%p req->req_q_out=%p rsp->rsp_q_in=%p rsp->rsp_q_out=%p.\n", "req->req_q_in=%p req->req_q_out=%p rsp->rsp_q_in=%p rsp->rsp_q_out=%p.\n",
req->req_q_in, req->req_q_out, rsp->rsp_q_in, rsp->rsp_q_out); req->req_q_in, req->req_q_out, rsp->rsp_q_in, rsp->rsp_q_out);
ha->wq = alloc_workqueue("qla2xxx_wq", 0, 0);
if (ha->isp_ops->initialize_adapter(base_vha)) { if (ha->isp_ops->initialize_adapter(base_vha)) {
ql_log(ql_log_fatal, base_vha, 0x00d6, ql_log(ql_log_fatal, base_vha, 0x00d6,
"Failed to initialize adapter - Adapter flags %x.\n", "Failed to initialize adapter - Adapter flags %x.\n",
...@@ -3216,8 +3218,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -3216,8 +3218,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
host->can_queue, base_vha->req, host->can_queue, base_vha->req,
base_vha->mgmt_svr_loop_id, host->sg_tablesize); base_vha->mgmt_svr_loop_id, host->sg_tablesize);
ha->wq = alloc_workqueue("qla2xxx_wq", 0, 0);
if (ha->mqenable) { if (ha->mqenable) {
bool mq = false; bool mq = false;
bool startit = false; bool startit = false;
......
...@@ -391,7 +391,8 @@ static int sd_zbc_check_capacity(struct scsi_disk *sdkp, unsigned char *buf) ...@@ -391,7 +391,8 @@ static int sd_zbc_check_capacity(struct scsi_disk *sdkp, unsigned char *buf)
* Check that all zones of the device are equal. The last zone can however * Check that all zones of the device are equal. The last zone can however
* be smaller. The zone size must also be a power of two number of LBAs. * be smaller. The zone size must also be a power of two number of LBAs.
* *
* Returns the zone size in bytes upon success or an error code upon failure. * Returns the zone size in number of blocks upon success or an error code
* upon failure.
*/ */
static s64 sd_zbc_check_zone_size(struct scsi_disk *sdkp) static s64 sd_zbc_check_zone_size(struct scsi_disk *sdkp)
{ {
...@@ -401,7 +402,7 @@ static s64 sd_zbc_check_zone_size(struct scsi_disk *sdkp) ...@@ -401,7 +402,7 @@ static s64 sd_zbc_check_zone_size(struct scsi_disk *sdkp)
unsigned char *rec; unsigned char *rec;
unsigned int buf_len; unsigned int buf_len;
unsigned int list_length; unsigned int list_length;
int ret; s64 ret;
u8 same; u8 same;
/* Get a buffer */ /* Get a buffer */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment