mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-21 10:37:51 +07:00
scsi: qla2xxx: Add FC-NVMe abort processing
Signed-off-by: Darren Trapp <darren.trapp@cavium.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
9dd9686b14
commit
e473b30741
@ -181,24 +181,32 @@ static void qla_nvme_sp_done(void *ptr, int res)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qla_nvme_ls_abort(struct nvme_fc_local_port *lport,
|
static void qla_nvme_abort_work(struct work_struct *work)
|
||||||
struct nvme_fc_remote_port *rport, struct nvmefc_ls_req *fd)
|
|
||||||
{
|
{
|
||||||
struct nvme_private *priv = fd->private;
|
struct nvme_private *priv =
|
||||||
struct qla_nvme_rport *qla_rport = rport->private;
|
container_of(work, struct nvme_private, abort_work);
|
||||||
fc_port_t *fcport = qla_rport->fcport;
|
|
||||||
srb_t *sp = priv->sp;
|
srb_t *sp = priv->sp;
|
||||||
int rval;
|
fc_port_t *fcport = sp->fcport;
|
||||||
struct qla_hw_data *ha = fcport->vha->hw;
|
struct qla_hw_data *ha = fcport->vha->hw;
|
||||||
|
int rval;
|
||||||
|
|
||||||
rval = ha->isp_ops->abort_command(sp);
|
rval = ha->isp_ops->abort_command(sp);
|
||||||
|
|
||||||
ql_dbg(ql_dbg_io, fcport->vha, 0x212b,
|
ql_dbg(ql_dbg_io, fcport->vha, 0x212b,
|
||||||
"%s: %s LS command for sp=%p on fcport=%p rval=%x\n", __func__,
|
"%s: %s command for sp=%p on fcport=%p rval=%x\n", __func__,
|
||||||
(rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
|
(rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
|
||||||
sp, fcport, rval);
|
sp, fcport, rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void qla_nvme_ls_abort(struct nvme_fc_local_port *lport,
|
||||||
|
struct nvme_fc_remote_port *rport, struct nvmefc_ls_req *fd)
|
||||||
|
{
|
||||||
|
struct nvme_private *priv = fd->private;
|
||||||
|
|
||||||
|
INIT_WORK(&priv->abort_work, qla_nvme_abort_work);
|
||||||
|
schedule_work(&priv->abort_work);
|
||||||
|
}
|
||||||
|
|
||||||
static void qla_nvme_ls_complete(struct work_struct *work)
|
static void qla_nvme_ls_complete(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct nvme_private *priv =
|
struct nvme_private *priv =
|
||||||
@ -264,18 +272,9 @@ static void qla_nvme_fcp_abort(struct nvme_fc_local_port *lport,
|
|||||||
struct nvmefc_fcp_req *fd)
|
struct nvmefc_fcp_req *fd)
|
||||||
{
|
{
|
||||||
struct nvme_private *priv = fd->private;
|
struct nvme_private *priv = fd->private;
|
||||||
srb_t *sp = priv->sp;
|
|
||||||
int rval;
|
|
||||||
struct qla_nvme_rport *qla_rport = rport->private;
|
|
||||||
fc_port_t *fcport = qla_rport->fcport;
|
|
||||||
struct qla_hw_data *ha = fcport->vha->hw;
|
|
||||||
|
|
||||||
rval = ha->isp_ops->abort_command(sp);
|
INIT_WORK(&priv->abort_work, qla_nvme_abort_work);
|
||||||
|
schedule_work(&priv->abort_work);
|
||||||
ql_dbg(ql_dbg_io, fcport->vha, 0x2127,
|
|
||||||
"%s: %s command for sp=%p on fcport=%p rval=%x\n", __func__,
|
|
||||||
(rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
|
|
||||||
sp, fcport, rval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qla_nvme_poll(struct nvme_fc_local_port *lport, void *hw_queue_handle)
|
static void qla_nvme_poll(struct nvme_fc_local_port *lport, void *hw_queue_handle)
|
||||||
@ -650,6 +649,7 @@ void qla_nvme_delete(struct scsi_qla_host *vha)
|
|||||||
ql_log(ql_log_info, fcport->vha, 0x2114, "%s: fcport=%p\n",
|
ql_log(ql_log_info, fcport->vha, 0x2114, "%s: fcport=%p\n",
|
||||||
__func__, fcport);
|
__func__, fcport);
|
||||||
|
|
||||||
|
nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, 0);
|
||||||
init_completion(&fcport->nvme_del_done);
|
init_completion(&fcport->nvme_del_done);
|
||||||
nvme_fc_unregister_remoteport(fcport->nvme_remote_port);
|
nvme_fc_unregister_remoteport(fcport->nvme_remote_port);
|
||||||
wait_for_completion(&fcport->nvme_del_done);
|
wait_for_completion(&fcport->nvme_del_done);
|
||||||
|
@ -31,6 +31,7 @@ struct nvme_private {
|
|||||||
struct srb *sp;
|
struct srb *sp;
|
||||||
struct nvmefc_ls_req *fd;
|
struct nvmefc_ls_req *fd;
|
||||||
struct work_struct ls_work;
|
struct work_struct ls_work;
|
||||||
|
struct work_struct abort_work;
|
||||||
int comp_status;
|
int comp_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user