]> 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:17:56 +0000 (13:17 +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 3323b79ff548dfbf7842b3ac3b825b7d0f7dcfde..b10734f18bbd60b5082e5e27932134960b0a9816 100644 (file)
@@ -251,7 +251,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 f645913870bd2b8a93116260769663303a4552e7..2e3fd6f1d7ebe364a46e91da1eb505630bbbaff9 100644 (file)
@@ -23,7 +23,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;
 };