X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=lib%2Fratelimit.c;h=ce945c17980b9b8addd4c044e1080f73f21a4f3d;hb=refs%2Fheads%2Ftizen_8.0;hp=e01a93f46f833483680b876fe9df7573bf4c2281;hpb=a1240cf74e8228f7c80d44af17914c0ffc5633fb;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/lib/ratelimit.c b/lib/ratelimit.c index e01a93f..ce945c1 100644 --- a/lib/ratelimit.c +++ b/lib/ratelimit.c @@ -26,10 +26,16 @@ */ int ___ratelimit(struct ratelimit_state *rs, const char *func) { + /* Paired with WRITE_ONCE() in .proc_handler(). + * Changing two values seperately could be inconsistent + * and some message could be lost. (See: net_ratelimit_state). + */ + int interval = READ_ONCE(rs->interval); + int burst = READ_ONCE(rs->burst); unsigned long flags; int ret; - if (!rs->interval) + if (!interval) return 1; /* @@ -44,7 +50,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) if (!rs->begin) rs->begin = jiffies; - if (time_is_before_jiffies(rs->begin + rs->interval)) { + if (time_is_before_jiffies(rs->begin + interval)) { if (rs->missed) { if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) { printk_deferred(KERN_WARNING @@ -56,7 +62,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) rs->begin = jiffies; rs->printed = 0; } - if (rs->burst && rs->burst > rs->printed) { + if (burst && burst > rs->printed) { rs->printed++; ret = 1; } else {