mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-23 05:31:28 +00:00
qla2x00t-32gbit: Move IO flush to the front of NVME rport unregistration
See also upstream commit baf23eddbf2a ("scsi: qla2xxx: move IO flush to
the front of NVME rport unregistration").
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8455 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -2416,7 +2416,6 @@ typedef struct fc_port {
|
||||
unsigned int id_changed:1;
|
||||
unsigned int scan_needed:1;
|
||||
|
||||
struct work_struct nvme_del_work;
|
||||
struct completion nvme_del_done;
|
||||
uint32_t nvme_prli_service_param;
|
||||
#define NVME_PRLI_SP_CONF BIT_7
|
||||
|
||||
@@ -919,4 +919,6 @@ void qlt_clr_qp_table(struct scsi_qla_host *vha);
|
||||
void qlt_set_mode(struct scsi_qla_host *);
|
||||
int qla2x00_set_data_rate(scsi_qla_host_t *vha, uint16_t mode);
|
||||
|
||||
/* nvme.c */
|
||||
void qla_nvme_unregister_remote_port(struct fc_port *fcport);
|
||||
#endif /* _QLA_GBL_H */
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
|
||||
static struct nvme_fc_port_template qla_nvme_fc_transport;
|
||||
|
||||
static void qla_nvme_unregister_remote_port(struct work_struct *);
|
||||
|
||||
int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
|
||||
{
|
||||
struct qla_nvme_rport *rport;
|
||||
@@ -43,7 +41,6 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
|
||||
(fcport->nvme_flag & NVME_FLAG_REGISTERED))
|
||||
return 0;
|
||||
|
||||
INIT_WORK(&fcport->nvme_del_work, qla_nvme_unregister_remote_port);
|
||||
fcport->nvme_flag &= ~NVME_FLAG_RESETTING;
|
||||
|
||||
memset(&req, 0, sizeof(struct nvme_fc_port_info));
|
||||
@@ -629,15 +626,12 @@ static void qla_nvme_remoteport_delete(struct nvme_fc_remote_port *rport)
|
||||
fcport = qla_rport->fcport;
|
||||
fcport->nvme_remote_port = NULL;
|
||||
fcport->nvme_flag &= ~NVME_FLAG_REGISTERED;
|
||||
complete(&fcport->nvme_del_done);
|
||||
|
||||
INIT_WORK(&fcport->free_work, qlt_free_session_done);
|
||||
schedule_work(&fcport->free_work);
|
||||
|
||||
fcport->nvme_flag &= ~NVME_FLAG_DELETING;
|
||||
ql_log(ql_log_info, fcport->vha, 0x2110,
|
||||
"remoteport_delete of %p %8phN completed.\n",
|
||||
fcport, fcport->port_name);
|
||||
complete(&fcport->nvme_del_done);
|
||||
}
|
||||
|
||||
static struct nvme_fc_port_template qla_nvme_fc_transport = {
|
||||
@@ -659,10 +653,8 @@ static struct nvme_fc_port_template qla_nvme_fc_transport = {
|
||||
.fcprqst_priv_sz = sizeof(struct nvme_private),
|
||||
};
|
||||
|
||||
static void qla_nvme_unregister_remote_port(struct work_struct *work)
|
||||
void qla_nvme_unregister_remote_port(struct fc_port *fcport)
|
||||
{
|
||||
struct fc_port *fcport = container_of(work, struct fc_port,
|
||||
nvme_del_work);
|
||||
int ret;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_NVME_FC))
|
||||
|
||||
@@ -1017,6 +1017,12 @@ void qlt_free_session_done(struct work_struct *work)
|
||||
else
|
||||
logout_started = true;
|
||||
}
|
||||
} /* if sess->logout_on_delete */
|
||||
|
||||
if (sess->nvme_flag & NVME_FLAG_REGISTERED &&
|
||||
!(sess->nvme_flag & NVME_FLAG_DELETING)) {
|
||||
sess->nvme_flag |= NVME_FLAG_DELETING;
|
||||
qla_nvme_unregister_remote_port(sess);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1169,14 +1175,8 @@ void qlt_unreg_sess(struct fc_port *sess)
|
||||
sess->last_rscn_gen = sess->rscn_gen;
|
||||
sess->last_login_gen = sess->login_gen;
|
||||
|
||||
if (sess->nvme_flag & NVME_FLAG_REGISTERED &&
|
||||
!(sess->nvme_flag & NVME_FLAG_DELETING)) {
|
||||
sess->nvme_flag |= NVME_FLAG_DELETING;
|
||||
schedule_work(&sess->nvme_del_work);
|
||||
} else {
|
||||
INIT_WORK(&sess->free_work, qlt_free_session_done);
|
||||
schedule_work(&sess->free_work);
|
||||
}
|
||||
INIT_WORK(&sess->free_work, qlt_free_session_done);
|
||||
schedule_work(&sess->free_work);
|
||||
}
|
||||
EXPORT_SYMBOL(qlt_unreg_sess);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user