diff options
author | Joe Eykholt <jeykholt@cisco.com> | 2010-12-01 01:19:40 +0100 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-12-21 19:24:28 +0100 |
commit | 69316ee2e375c5af0cf1f8d2d30f9aa277f0b454 (patch) | |
tree | 1bc29c06d5aa9e73f71db1a5dfe8527677b3a94e /drivers/scsi/fcoe/libfcoe.c | |
parent | [SCSI] libfc: fix fc_tm_done not freeing the allocated fsp pkt (diff) | |
download | linux-69316ee2e375c5af0cf1f8d2d30f9aa277f0b454.tar.xz linux-69316ee2e375c5af0cf1f8d2d30f9aa277f0b454.zip |
[SCSI] libfcoe: update FIP FCF announcements
Move the announcement code to a separate function for reuse in
a forthcoming patch.
For messages regarding FCF timeout and selection, use the
previously-announced FCF MAC address (dest_addr) in the fcoe_ctlr struct.
Only print (announce) the FCF if it is new. Print MAC for
timed-out or deselected FCFs.
Signed-off-by: Joe Eykholt <jeykholt@cisco.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/fcoe/libfcoe.c')
-rw-r--r-- | drivers/scsi/fcoe/libfcoe.c | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c index 58ad3c7a454f..26381f00e4e5 100644 --- a/drivers/scsi/fcoe/libfcoe.c +++ b/drivers/scsi/fcoe/libfcoe.c @@ -231,6 +231,33 @@ void fcoe_ctlr_destroy(struct fcoe_ctlr *fip) EXPORT_SYMBOL(fcoe_ctlr_destroy); /** + * fcoe_ctlr_announce() - announce new selection + * @fip: The FCoE controller + * + * Also sets the destination MAC for FCoE and control packets + */ +static void fcoe_ctlr_announce(struct fcoe_ctlr *fip) +{ + struct fcoe_fcf *sel = fip->sel_fcf; + + if (sel && !compare_ether_addr(sel->fcf_mac, fip->dest_addr)) + return; + if (!is_zero_ether_addr(fip->dest_addr)) { + printk(KERN_NOTICE "libfcoe: host%d: " + "FIP Fibre-Channel Forwarder MAC %pM deselected\n", + fip->lp->host->host_no, fip->dest_addr); + memset(fip->dest_addr, 0, ETH_ALEN); + } + if (sel) { + printk(KERN_INFO "libfcoe: host%d: FIP selected " + "Fibre-Channel Forwarder MAC %pM\n", + fip->lp->host->host_no, sel->fcf_mac); + memcpy(fip->dest_addr, sel->fcf_mac, ETH_ALEN); + fip->map_dest = 0; + } +} + +/** * fcoe_ctlr_fcoe_size() - Return the maximum FCoE size required for VN_Port * @fip: The FCoE controller to get the maximum FCoE size from * @@ -1420,24 +1447,15 @@ static void fcoe_ctlr_timer_work(struct work_struct *work) if (sel != fcf) { fcf = sel; /* the old FCF may have been freed */ + fcoe_ctlr_announce(fip); if (sel) { - printk(KERN_INFO "libfcoe: host%d: FIP selected " - "Fibre-Channel Forwarder MAC %pM\n", - fip->lp->host->host_no, sel->fcf_mac); - memcpy(fip->dest_addr, sel->fcf_mac, ETH_ALEN); - fip->map_dest = 0; fip->port_ka_time = jiffies + msecs_to_jiffies(FIP_VN_KA_PERIOD); fip->ctlr_ka_time = jiffies + sel->fka_period; if (time_after(next_timer, fip->ctlr_ka_time)) next_timer = fip->ctlr_ka_time; - } else { - printk(KERN_NOTICE "libfcoe: host%d: " - "FIP Fibre-Channel Forwarder timed out. " - "Starting FCF discovery.\n", - fip->lp->host->host_no); + } else reset = 1; - } } if (sel && !sel->fd_flags) { |