Commit d8ec5d67 authored by Mike Christie's avatar Mike Christie Committed by Martin K. Petersen

scsi: iscsi: Remove iscsi_scan_finished()

qla4xxx does not use iscsi_scan_finished() anymore so remove it.

Link: https://lore.kernel.org/r/20220226230435.38733-4-michael.christie@oracle.comReviewed-by: default avatarLee Duncan <lduncan@suse.com>
Reviewed-by: default avatarChris Leech <cleech@redhat.com>
Signed-off-by: default avatarMike Christie <michael.christie@oracle.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent b07c348f
...@@ -1557,7 +1557,6 @@ static int iscsi_setup_host(struct transport_container *tc, struct device *dev, ...@@ -1557,7 +1557,6 @@ static int iscsi_setup_host(struct transport_container *tc, struct device *dev,
struct iscsi_cls_host *ihost = shost->shost_data; struct iscsi_cls_host *ihost = shost->shost_data;
memset(ihost, 0, sizeof(*ihost)); memset(ihost, 0, sizeof(*ihost));
atomic_set(&ihost->nr_scans, 0);
mutex_init(&ihost->mutex); mutex_init(&ihost->mutex);
iscsi_bsg_host_add(shost, ihost); iscsi_bsg_host_add(shost, ihost);
...@@ -1744,25 +1743,6 @@ void iscsi_host_for_each_session(struct Scsi_Host *shost, ...@@ -1744,25 +1743,6 @@ void iscsi_host_for_each_session(struct Scsi_Host *shost,
} }
EXPORT_SYMBOL_GPL(iscsi_host_for_each_session); EXPORT_SYMBOL_GPL(iscsi_host_for_each_session);
/**
* iscsi_scan_finished - helper to report when running scans are done
* @shost: scsi host
* @time: scan run time
*
* This function can be used by drives like qla4xxx to report to the scsi
* layer when the scans it kicked off at module load time are done.
*/
int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time)
{
struct iscsi_cls_host *ihost = shost->shost_data;
/*
* qla4xxx will have kicked off some session unblocks before calling
* scsi_scan_host, so just wait for them to complete.
*/
return !atomic_read(&ihost->nr_scans);
}
EXPORT_SYMBOL_GPL(iscsi_scan_finished);
struct iscsi_scan_data { struct iscsi_scan_data {
unsigned int channel; unsigned int channel;
unsigned int id; unsigned int id;
...@@ -1831,8 +1811,6 @@ static void iscsi_scan_session(struct work_struct *work) ...@@ -1831,8 +1811,6 @@ static void iscsi_scan_session(struct work_struct *work)
{ {
struct iscsi_cls_session *session = struct iscsi_cls_session *session =
container_of(work, struct iscsi_cls_session, scan_work); container_of(work, struct iscsi_cls_session, scan_work);
struct Scsi_Host *shost = iscsi_session_to_shost(session);
struct iscsi_cls_host *ihost = shost->shost_data;
struct iscsi_scan_data scan_data; struct iscsi_scan_data scan_data;
scan_data.channel = 0; scan_data.channel = 0;
...@@ -1841,7 +1819,6 @@ static void iscsi_scan_session(struct work_struct *work) ...@@ -1841,7 +1819,6 @@ static void iscsi_scan_session(struct work_struct *work)
scan_data.rescan = SCSI_SCAN_RESCAN; scan_data.rescan = SCSI_SCAN_RESCAN;
iscsi_user_scan_session(&session->dev, &scan_data); iscsi_user_scan_session(&session->dev, &scan_data);
atomic_dec(&ihost->nr_scans);
} }
/** /**
...@@ -1912,8 +1889,6 @@ static void __iscsi_unblock_session(struct work_struct *work) ...@@ -1912,8 +1889,6 @@ static void __iscsi_unblock_session(struct work_struct *work)
struct iscsi_cls_session *session = struct iscsi_cls_session *session =
container_of(work, struct iscsi_cls_session, container_of(work, struct iscsi_cls_session,
unblock_work); unblock_work);
struct Scsi_Host *shost = iscsi_session_to_shost(session);
struct iscsi_cls_host *ihost = shost->shost_data;
unsigned long flags; unsigned long flags;
ISCSI_DBG_TRANS_SESSION(session, "Unblocking session\n"); ISCSI_DBG_TRANS_SESSION(session, "Unblocking session\n");
...@@ -1924,15 +1899,6 @@ static void __iscsi_unblock_session(struct work_struct *work) ...@@ -1924,15 +1899,6 @@ static void __iscsi_unblock_session(struct work_struct *work)
spin_unlock_irqrestore(&session->lock, flags); spin_unlock_irqrestore(&session->lock, flags);
/* start IO */ /* start IO */
scsi_target_unblock(&session->dev, SDEV_RUNNING); scsi_target_unblock(&session->dev, SDEV_RUNNING);
/*
* Only do kernel scanning if the driver is properly hooked into
* the async scanning code (drivers like iscsi_tcp do login and
* scanning from userspace).
*/
if (shost->hostt->scan_finished) {
if (scsi_queue_work(shost, &session->scan_work))
atomic_inc(&ihost->nr_scans);
}
ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking session\n"); ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking session\n");
} }
...@@ -2192,7 +2158,10 @@ void iscsi_remove_session(struct iscsi_cls_session *session) ...@@ -2192,7 +2158,10 @@ void iscsi_remove_session(struct iscsi_cls_session *session)
spin_unlock_irqrestore(&session->lock, flags); spin_unlock_irqrestore(&session->lock, flags);
scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE);
/* flush running scans then delete devices */ /*
* qla4xxx can perform it's own scans when it runs in kernel only
* mode. Make sure to flush those scans.
*/
flush_work(&session->scan_work); flush_work(&session->scan_work);
/* flush running unbind operations */ /* flush running unbind operations */
flush_work(&session->unbind_work); flush_work(&session->unbind_work);
......
...@@ -278,7 +278,6 @@ struct iscsi_cls_session { ...@@ -278,7 +278,6 @@ struct iscsi_cls_session {
iscsi_dev_to_session(_stgt->dev.parent) iscsi_dev_to_session(_stgt->dev.parent)
struct iscsi_cls_host { struct iscsi_cls_host {
atomic_t nr_scans;
struct mutex mutex; struct mutex mutex;
struct request_queue *bsg_q; struct request_queue *bsg_q;
uint32_t port_speed; uint32_t port_speed;
...@@ -448,7 +447,6 @@ extern void iscsi_get_conn(struct iscsi_cls_conn *conn); ...@@ -448,7 +447,6 @@ extern void iscsi_get_conn(struct iscsi_cls_conn *conn);
extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn); extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn);
extern void iscsi_unblock_session(struct iscsi_cls_session *session); extern void iscsi_unblock_session(struct iscsi_cls_session *session);
extern void iscsi_block_session(struct iscsi_cls_session *session); extern void iscsi_block_session(struct iscsi_cls_session *session);
extern int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time);
extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size); extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size);
extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep); extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep);
extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle); extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle);
......
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