diff options
| author | Borislav Petkov <bp@suse.de> | 2021-06-07 11:02:30 +0200 |
|---|---|---|
| committer | Borislav Petkov <bp@suse.de> | 2021-06-07 11:02:30 +0200 |
| commit | 0a5f38c81e500976781908e172b4e51ee427b4a9 (patch) | |
| tree | fa2dc3fa36d8c837be12db611356581bcbe4289d /net/openvswitch/meter.c | |
| parent | 7ee0e638a526b2d1f09c714f86d82dfd7628f322 (diff) | |
| parent | 614124bea77e452aa6df7a8714e8bc820b489922 (diff) | |
Merge tag 'v5.13-rc5' into x86/cleanups
Pick up dependent changes in order to base further cleanups ontop.
Signed-off-by: Borislav Petkov <bp@suse.de>
Diffstat (limited to 'net/openvswitch/meter.c')
| -rw-r--r-- | net/openvswitch/meter.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c index 96b524ceabca..896b8f5bc885 100644 --- a/net/openvswitch/meter.c +++ b/net/openvswitch/meter.c @@ -611,6 +611,14 @@ bool ovs_meter_execute(struct datapath *dp, struct sk_buff *skb, spin_lock(&meter->lock); long_delta_ms = (now_ms - meter->used); /* ms */ + if (long_delta_ms < 0) { + /* This condition means that we have several threads fighting + * for a meter lock, and the one who received the packets a + * bit later wins. Assuming that all racing threads received + * packets at the same time to avoid overflow. + */ + long_delta_ms = 0; + } /* Make sure delta_ms will not be too large, so that bucket will not * wrap around below. |
