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

Commit d8630bb9 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Serialize session deletion by using work_lock



for session deletion, replace sess_lock with work_lock.
Under certain case sess_lock is not feasiable to acquire.
The lock is needed temporarily to make sure a single
call to schedule of the work element.

Signed-off-by: default avatarQuinn Tran <quinn.tran@cavium.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 94cff6e1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -888,7 +888,6 @@ void qlt_plogi_ack_link(struct scsi_qla_host *, struct qlt_plogi_ack_t *,
	struct fc_port *, enum qlt_plogi_link_t);
void qlt_plogi_ack_unref(struct scsi_qla_host *, struct qlt_plogi_ack_t *);
extern void qlt_schedule_sess_for_deletion(struct fc_port *);
extern void qlt_schedule_sess_for_deletion_lock(struct fc_port *);
extern struct fc_port *qlt_find_sess_invalidate_other(scsi_qla_host_t *,
	uint64_t wwn, port_id_t port_id, uint16_t loop_id, struct fc_port **);
void qla24xx_delete_sess_fn(struct work_struct *);
+6 −8
Original line number Diff line number Diff line
@@ -3047,7 +3047,7 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
					ql_dbg(ql_dbg_disc, vha, 0x2021,
					    "%s %d %8phC post del sess\n",
					    __func__, __LINE__, fcport->port_name);
					qlt_schedule_sess_for_deletion_lock(fcport);
					qlt_schedule_sess_for_deletion(fcport);
				}
			}
		} else { /* ea->sp->gen1 != fcport->rscn_gen */
@@ -3064,7 +3064,7 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
				ql_dbg(ql_dbg_disc, vha, 0x2042,
				    "%s %d %8phC post del sess\n", __func__,
				    __LINE__, fcport->port_name);
				qlt_schedule_sess_for_deletion_lock(fcport);
				qlt_schedule_sess_for_deletion(fcport);
			} else {
				ql_dbg(ql_dbg_disc, vha, 0x2045,
				    "%s %d %8phC login\n", __func__, __LINE__,
@@ -3436,8 +3436,7 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
					    "%s %d %8phC post del sess\n",
					    __func__, __LINE__,
					    fcport->port_name);
					qlt_schedule_sess_for_deletion_lock
						(fcport);
					qlt_schedule_sess_for_deletion(fcport);
					break;
				}
			}
@@ -3470,7 +3469,7 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
						    "%s %d %8phC post del sess\n",
						    __func__, __LINE__,
						    conflict->port_name);
						qlt_schedule_sess_for_deletion_lock
						qlt_schedule_sess_for_deletion
							(conflict);
						break;
					}
@@ -3528,7 +3527,7 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
						    "%s %d %8phC post del sess\n",
						    __func__, __LINE__,
						    conflict->port_name);
						qlt_schedule_sess_for_deletion_lock
						qlt_schedule_sess_for_deletion
							(conflict);
						break;
					}
@@ -3959,8 +3958,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
					    __func__, __LINE__,
					    fcport->port_name);

					qlt_schedule_sess_for_deletion_lock
						(fcport);
					qlt_schedule_sess_for_deletion(fcport);
					continue;
				}
			}
+3 −6
Original line number Diff line number Diff line
@@ -1091,7 +1091,7 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
	default:
		ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC post del sess\n",
		    __func__, __LINE__, fcport->port_name);
		qlt_schedule_sess_for_deletion_lock(fcport);
		qlt_schedule_sess_for_deletion(fcport);
		return;
	}
	__qla24xx_handle_gpdb_event(vha, ea);
@@ -4964,8 +4964,7 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha)
					    __func__, __LINE__,
					    fcport->port_name);

					qlt_schedule_sess_for_deletion_lock
						(fcport);
					qlt_schedule_sess_for_deletion(fcport);
					continue;
				}
			}
@@ -5552,9 +5551,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
					    "%s %d %8phC post del sess\n",
					    __func__, __LINE__,
					    fcport->port_name);

					qlt_schedule_sess_for_deletion_lock
						(fcport);
					qlt_schedule_sess_for_deletion(fcport);
					continue;
				}
			}
+2 −2
Original line number Diff line number Diff line
@@ -1009,7 +1009,7 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
			if (qla_ini_mode_enabled(vha)) {
				qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
				fcport->logout_on_delete = 0;
				qlt_schedule_sess_for_deletion_lock(fcport);
				qlt_schedule_sess_for_deletion(fcport);
			}
			break;

@@ -2701,7 +2701,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
				comp_status);

			qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
			qlt_schedule_sess_for_deletion_lock(fcport);
			qlt_schedule_sess_for_deletion(fcport);
		}

		break;
+1 −1
Original line number Diff line number Diff line
@@ -3896,7 +3896,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
			case DSC_DELETE_PEND:
				break;
			default:
				qlt_schedule_sess_for_deletion_lock(fcport);
				qlt_schedule_sess_for_deletion(fcport);
				break;
			}
		} else {
Loading