Joe Eykholt wrote:
> The timer for rport retries wasn't getting canceled, and
> would occasionally go off after the module was unloaded.
>
> Add logic to cancel the timer in fc_rport_work().
>
> Since we cancel the timer before deleting the rdata,
> it is no longer necessary to do a kref_get() for the pending timer.
This should've said get_device() not kref_get(). I resubmitted it.
Joe
>
> Signed-off-by: Joe Eykholt <[email protected]>
> ---
> drivers/scsi/libfc/fc_rport.c | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
>
> diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
> index a86df0b..90cc90d 100644
> --- a/drivers/scsi/libfc/fc_rport.c
> +++ b/drivers/scsi/libfc/fc_rport.c
> @@ -276,6 +276,7 @@ static void fc_rport_work(struct work_struct *work)
> mutex_unlock(&rdata->rp_mutex);
> if (rport_ops->event_callback)
> rport_ops->event_callback(lport, rport, event);
> + cancel_delayed_work_sync(&rdata->retry_work);
> if (trans_state == FC_PORTSTATE_ROGUE)
> put_device(&rport->dev);
> else {
> @@ -433,7 +434,6 @@ static void fc_rport_timeout(struct work_struct *work)
> }
>
> mutex_unlock(&rdata->rp_mutex);
> - put_device(&rport->dev);
> }
>
> /**
> @@ -494,7 +494,6 @@ static void fc_rport_error_retry(struct fc_rport *rport,
> struct fc_frame *fp)
> /* no additional delay on exchange timeouts */
> if (PTR_ERR(fp) == -FC_EX_TIMEOUT)
> delay = 0;
> - get_device(&rport->dev);
> schedule_delayed_work(&rdata->retry_work, delay);
> return;
> }
>
>
> _______________________________________________
> devel mailing list
> [email protected]
> http://www.open-fcoe.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel