Commit 3667d7e7 authored by Joe Eykholt's avatar Joe Eykholt Committed by James Bottomley

[SCSI] libfc: discovery retry should clear pending first.

Currently fc_disc_timeout() restarts discovery only if it is not pending.
When the timer is scheduled, the discovery is left pending, so the
timeout never restarts it.

Fix by not checking for pending in the timeout handler.

If discovery is stopped and restarted in the meantime, the timeout will
be canceled.

Also, when a new discovery is started, the retry count wasn't cleared.
Signed-off-by: default avatarJoe Eykholt <jeykholt@cisco.com>
Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent c762608b
...@@ -233,6 +233,7 @@ static void fc_disc_restart(struct fc_disc *disc) ...@@ -233,6 +233,7 @@ static void fc_disc_restart(struct fc_disc *disc)
* freshly-discovered remote ports. Avoid wrapping to zero. * freshly-discovered remote ports. Avoid wrapping to zero.
*/ */
disc->disc_id = (disc->disc_id + 2) | 1; disc->disc_id = (disc->disc_id + 2) | 1;
disc->retry_count = 0;
fc_disc_gpn_ft_req(disc); fc_disc_gpn_ft_req(disc);
} }
...@@ -563,7 +564,6 @@ static void fc_disc_timeout(struct work_struct *work) ...@@ -563,7 +564,6 @@ static void fc_disc_timeout(struct work_struct *work)
struct fc_disc, struct fc_disc,
disc_work.work); disc_work.work);
mutex_lock(&disc->disc_mutex); mutex_lock(&disc->disc_mutex);
if (disc->requested && !disc->pending)
fc_disc_gpn_ft_req(disc); fc_disc_gpn_ft_req(disc);
mutex_unlock(&disc->disc_mutex); mutex_unlock(&disc->disc_mutex);
} }
......
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