On Sun, May 13, 2012 at 07:56:01PM +0300, Dan Carpenter wrote:
On Fri, May 11, 2012 at 05:17:17PM -0700, Anton Vorontsov wrote:
This is a longstanding bug, almost unnoticeable when calling persistent_ram_write() for small buffers.
But when called for large data buffers, the write routine behaves incorrectly, as the size may never update: instead of clamping the size to the maximum buffer size, buffer_size_add_clamp() returns an error (which is never checked by the write routine, btw).
To fix this, we now use buffer_size_add() that actually clamps the size to the max value.
Also remove buffer_size_add_clamp(), it is no longer needed.
Say if you did notice it, what would that look like? It's just that something gets lost instead of written to the screen right?
Yep. Suppose the ring buffer size is 4096 bytes, when somebody tries to write a data in a 2000 bytes chunk, the first write will succeed (buffer size will be 2000), but the second now 3000-bytes write will left the size equal to 2000, instead of clamping it to 4096.
When we had a large buffer but a small writes (e.g. ram_console usage scenario), this is almost unnoticeable. But when we started using large writes the bug showed up.
Thanks,