Message ID | 1282583676.2486.525.camel@edumazet-laptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote: > No need to use a temporary struct rtnl_link_stats64 variable, > just copy the source to skb buffer. Yes, this makes sense. The reason I didn't do this initially was that I was concerned about possible tearing of asynchronously-updated stats. Since you made dev_get_stats() copy into a caller-provided buffer, this is no longer a concern. For what it's worth: > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> Ben.
From: Ben Hutchings <bhutchings@solarflare.com> Date: Mon, 23 Aug 2010 18:21:36 +0100 > On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote: >> No need to use a temporary struct rtnl_link_stats64 variable, >> just copy the source to skb buffer. > > Yes, this makes sense. > > The reason I didn't do this initially was that I was concerned about > possible tearing of asynchronously-updated stats. Since you made > dev_get_stats() copy into a caller-provided buffer, this is no longer a > concern. > > For what it's worth: > >> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> > Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index f78d821..b2a718d 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -612,36 +612,7 @@ static void copy_rtnl_link_stats(struct rtnl_link_stats *a, static void copy_rtnl_link_stats64(void *v, const struct rtnl_link_stats64 *b) { - struct rtnl_link_stats64 a; - - a.rx_packets = b->rx_packets; - a.tx_packets = b->tx_packets; - a.rx_bytes = b->rx_bytes; - a.tx_bytes = b->tx_bytes; - a.rx_errors = b->rx_errors; - a.tx_errors = b->tx_errors; - a.rx_dropped = b->rx_dropped; - a.tx_dropped = b->tx_dropped; - - a.multicast = b->multicast; - a.collisions = b->collisions; - - a.rx_length_errors = b->rx_length_errors; - a.rx_over_errors = b->rx_over_errors; - a.rx_crc_errors = b->rx_crc_errors; - a.rx_frame_errors = b->rx_frame_errors; - a.rx_fifo_errors = b->rx_fifo_errors; - a.rx_missed_errors = b->rx_missed_errors; - - a.tx_aborted_errors = b->tx_aborted_errors; - a.tx_carrier_errors = b->tx_carrier_errors; - a.tx_fifo_errors = b->tx_fifo_errors; - a.tx_heartbeat_errors = b->tx_heartbeat_errors; - a.tx_window_errors = b->tx_window_errors; - - a.rx_compressed = b->rx_compressed; - a.tx_compressed = b->tx_compressed; - memcpy(v, &a, sizeof(a)); + memcpy(v, b, sizeof(*b)); } /* All VF info */
No need to use a temporary struct rtnl_link_stats64 variable, just copy the source to skb buffer. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> --- net/core/rtnetlink.c | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html