diff options
-rw-r--r-- | drivers/scsi/fcoe/libfcoe.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c index 3ab3db39fc52..4893098b3d3f 100644 --- a/drivers/scsi/fcoe/libfcoe.c +++ b/drivers/scsi/fcoe/libfcoe.c | |||
@@ -594,7 +594,7 @@ static unsigned long fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) | |||
594 | } | 594 | } |
595 | 595 | ||
596 | deadline += fcf->fka_period; | 596 | deadline += fcf->fka_period; |
597 | if (time_after(jiffies, deadline)) { | 597 | if (time_after_eq(jiffies, deadline)) { |
598 | if (fip->sel_fcf == fcf) | 598 | if (fip->sel_fcf == fcf) |
599 | fip->sel_fcf = NULL; | 599 | fip->sel_fcf = NULL; |
600 | list_del(&fcf->list); | 600 | list_del(&fcf->list); |
@@ -612,12 +612,11 @@ static unsigned long fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip) | |||
612 | sel_time = fcf->time; | 612 | sel_time = fcf->time; |
613 | } | 613 | } |
614 | } | 614 | } |
615 | if (sel_time) { | 615 | if (sel_time && !fip->sel_fcf && !fip->sel_time) { |
616 | sel_time += msecs_to_jiffies(FCOE_CTLR_START_DELAY); | 616 | sel_time += msecs_to_jiffies(FCOE_CTLR_START_DELAY); |
617 | fip->sel_time = sel_time; | 617 | fip->sel_time = sel_time; |
618 | } else { | ||
619 | fip->sel_time = 0; | ||
620 | } | 618 | } |
619 | |||
621 | return next_timer; | 620 | return next_timer; |
622 | } | 621 | } |
623 | 622 | ||
@@ -775,7 +774,7 @@ static void fcoe_ctlr_recv_adv(struct fcoe_ctlr *fip, struct sk_buff *skb) | |||
775 | * ignored after a usable solicited advertisement | 774 | * ignored after a usable solicited advertisement |
776 | * has been received. | 775 | * has been received. |
777 | */ | 776 | */ |
778 | if (fcf == fip->sel_fcf) { | 777 | if (fcf == fip->sel_fcf && !fcf->fd_flags) { |
779 | fip->ctlr_ka_time -= fcf->fka_period; | 778 | fip->ctlr_ka_time -= fcf->fka_period; |
780 | fip->ctlr_ka_time += new.fka_period; | 779 | fip->ctlr_ka_time += new.fka_period; |
781 | if (time_before(fip->ctlr_ka_time, fip->timer.expires)) | 780 | if (time_before(fip->ctlr_ka_time, fip->timer.expires)) |
@@ -813,7 +812,7 @@ static void fcoe_ctlr_recv_adv(struct fcoe_ctlr *fip, struct sk_buff *skb) | |||
813 | * If this is the first validated FCF, note the time and | 812 | * If this is the first validated FCF, note the time and |
814 | * set a timer to trigger selection. | 813 | * set a timer to trigger selection. |
815 | */ | 814 | */ |
816 | if (mtu_valid && !fip->sel_time && fcoe_ctlr_fcf_usable(fcf)) { | 815 | if (mtu_valid && !fip->sel_fcf && fcoe_ctlr_fcf_usable(fcf)) { |
817 | fip->sel_time = jiffies + | 816 | fip->sel_time = jiffies + |
818 | msecs_to_jiffies(FCOE_CTLR_START_DELAY); | 817 | msecs_to_jiffies(FCOE_CTLR_START_DELAY); |
819 | if (!timer_pending(&fip->timer) || | 818 | if (!timer_pending(&fip->timer) || |
@@ -1187,6 +1186,8 @@ static void fcoe_ctlr_timeout(unsigned long arg) | |||
1187 | fip->port_ka_time = jiffies + | 1186 | fip->port_ka_time = jiffies + |
1188 | msecs_to_jiffies(FIP_VN_KA_PERIOD); | 1187 | msecs_to_jiffies(FIP_VN_KA_PERIOD); |
1189 | fip->ctlr_ka_time = jiffies + sel->fka_period; | 1188 | fip->ctlr_ka_time = jiffies + sel->fka_period; |
1189 | if (time_after(next_timer, fip->ctlr_ka_time)) | ||
1190 | next_timer = fip->ctlr_ka_time; | ||
1190 | } else { | 1191 | } else { |
1191 | printk(KERN_NOTICE "libfcoe: host%d: " | 1192 | printk(KERN_NOTICE "libfcoe: host%d: " |
1192 | "FIP Fibre-Channel Forwarder timed out. " | 1193 | "FIP Fibre-Channel Forwarder timed out. " |