aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/fcoe
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2010-07-07 17:58:56 -0400
committerDavid S. Miller <davem@davemloft.net>2010-07-07 17:58:56 -0400
commit28172739f0a276eb8d6ca917b3974c2edb036da3 (patch)
treeb1dc00cfa20c209992e247c6f73601f609f9ca3b /drivers/scsi/fcoe
parent217d32dc5f299c483ca0d3c8cc6811c72c0339c4 (diff)
net: fix 64 bit counters on 32 bit arches
There is a small possibility that a reader gets incorrect values on 32 bit arches. SNMP applications could catch incorrect counters when a 32bit high part is changed by another stats consumer/provider. One way to solve this is to add a rtnl_link_stats64 param to all ndo_get_stats64() methods, and also add such a parameter to dev_get_stats(). Rule is that we are not allowed to use dev->stats64 as a temporary storage for 64bit stats, but a caller provided area (usually on stack) Old drivers (only providing get_stats() method) need no changes. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/scsi/fcoe')
-rw-r--r--drivers/scsi/fcoe/fcoe.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 44a07593de56..1a429ed6da9d 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -2653,6 +2653,7 @@ static void fcoe_get_lesb(struct fc_lport *lport,
2653 u32 lfc, vlfc, mdac; 2653 u32 lfc, vlfc, mdac;
2654 struct fcoe_dev_stats *devst; 2654 struct fcoe_dev_stats *devst;
2655 struct fcoe_fc_els_lesb *lesb; 2655 struct fcoe_fc_els_lesb *lesb;
2656 struct rtnl_link_stats64 temp;
2656 struct net_device *netdev = fcoe_netdev(lport); 2657 struct net_device *netdev = fcoe_netdev(lport);
2657 2658
2658 lfc = 0; 2659 lfc = 0;
@@ -2669,7 +2670,7 @@ static void fcoe_get_lesb(struct fc_lport *lport,
2669 lesb->lesb_link_fail = htonl(lfc); 2670 lesb->lesb_link_fail = htonl(lfc);
2670 lesb->lesb_vlink_fail = htonl(vlfc); 2671 lesb->lesb_vlink_fail = htonl(vlfc);
2671 lesb->lesb_miss_fka = htonl(mdac); 2672 lesb->lesb_miss_fka = htonl(mdac);
2672 lesb->lesb_fcs_error = htonl(dev_get_stats(netdev)->rx_crc_errors); 2673 lesb->lesb_fcs_error = htonl(dev_get_stats(netdev, &temp)->rx_crc_errors);
2673} 2674}
2674 2675
2675/** 2676/**