Fix: pass proper args when writing commit counter
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 15 Apr 2014 16:50:12 +0000 (12:50 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 16 Apr 2014 21:59:50 +0000 (17:59 -0400)
commit7915e163192dc9674bcd7ce80338d9d8ebf23d4c
tree4f4f8de3a0bdb259337b87f2a4b1f4dab2c9d5ea
parentbfe529f90b1354246b5d8a18f49e30595c612041
Fix: pass proper args when writing commit counter

lib_ring_buffer_write_commit_counter()'s 'buf_offset' argument should
contain offset of beginning of area used by the record being comitted.

However, lib_ring_buffer_commit() passes ctx->buf_offset, that gets
advanced by lib_ring_buffer_write() and thus points to just-after-
end-of-record at lib_ring_buffer_commit() time. This causes
lib_ring_buffer_write_commit_counter() to return without changing
commit_hot[idx].seq, due to

if (unlikely(subbuf_offset(offset - commit_count, chan)))
return;

Since after-crash data extraction tool checks 'seq' field to find out
how much data is in buffer, this results into inavailability of
data from partially-filled subbuffer for after-crash analysis.

This patch modifies lib_ring_buffer_write_commit_counter() and all its
callers to pass and expect the end of the area. So code works as it
should, and complete information becomes visible in crash dump.

[ Changelog inspired from Nikita Yushchenko's original patch. ]

Fixes #784

Reported-by: Nikita Yushchenko <nyoushchenko@mvista.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lib/ringbuffer/frontend_api.h
lib/ringbuffer/frontend_internal.h
lib/ringbuffer/ring_buffer_frontend.c
This page took 0.026461 seconds and 4 git commands to generate.