We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 084a990 commit aa2cc35Copy full SHA for aa2cc35
lib/ratelimit.c
@@ -35,11 +35,24 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func)
35
unsigned long flags;
36
int ret;
37
38
+ /*
39
+ * Zero interval says never limit, otherwise, non-positive burst
40
+ * says always limit.
41
+ */
42
if (interval <= 0 || burst <= 0) {
43
ret = interval == 0 || burst > 0;
44
+ if (!(READ_ONCE(rs->flags) & RATELIMIT_INITIALIZED) || (!interval && !burst) ||
45
+ !raw_spin_trylock_irqsave(&rs->lock, flags)) {
46
+ if (!ret)
47
+ ratelimit_state_inc_miss(rs);
48
+ return ret;
49
+ }
50
+
51
+ /* Force re-initialization once re-enabled. */
52
+ rs->flags &= ~RATELIMIT_INITIALIZED;
53
if (!ret)
54
ratelimit_state_inc_miss(rs);
- return ret;
55
+ goto unlock_ret;
56
}
57
58
/*
0 commit comments