Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e473b307 authored by Darren Trapp's avatar Darren Trapp Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Add FC-NVMe abort processing

parent 9dd9686b
Loading
Loading
Loading
Loading
+18 −18
Original line number Original line Diff line number Diff line
@@ -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);


	ql_dbg(ql_dbg_io, fcport->vha, 0x2127,
	INIT_WORK(&priv->abort_work, qla_nvme_abort_work);
	    "%s: %s command for sp=%p on fcport=%p rval=%x\n", __func__,
	schedule_work(&priv->abort_work);
	    (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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;
};
};