]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: openvswitch: use u64 for meter bucket
authorTonghao Zhang <xiangxia.m.yue@gmail.com>
Fri, 24 Apr 2020 00:08:06 +0000 (08:08 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Oct 2020 11:14:42 +0000 (13:14 +0200)
[ Upstream commit e57358873bb5d6caa882b9684f59140912b37dde ]

When setting the meter rate to 4+Gbps, there is an
overflow, the meters don't work as expected.

Cc: Pravin B Shelar <pshelar@ovn.org>
Cc: Andy Zhou <azhou@ovn.org>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/openvswitch/meter.c
net/openvswitch/meter.h

index c038e021a591685cd9cca521c5b32259ea48bdbd..6f5131d1074b0c6c8eb2da0b9a9f8b0add1dadab 100644 (file)
@@ -255,7 +255,7 @@ static struct dp_meter *dp_meter_create(struct nlattr **a)
                 *
                 * Start with a full bucket.
                 */
-               band->bucket = (band->burst_size + band->rate) * 1000;
+               band->bucket = (band->burst_size + band->rate) * 1000ULL;
                band_max_delta_t = band->bucket / band->rate;
                if (band_max_delta_t > meter->max_delta_t)
                        meter->max_delta_t = band_max_delta_t;
index 964ace2650f89627531afb89d68c32011bc1792b..970557ed5b5b6c580496b1598ac4a964273a8b15 100644 (file)
@@ -26,7 +26,7 @@ struct dp_meter_band {
        u32 type;
        u32 rate;
        u32 burst_size;
-       u32 bucket; /* 1/1000 packets, or in bits */
+       u64 bucket; /* 1/1000 packets, or in bits */
        struct ovs_flow_stats stats;
 };