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 22:01:11 +0000 (18:01 -0400)
commit1f280b069d5fd9ca2cac2a957dab4f657d12a658
tree70a911a7b989a83b28d2ec78262fc4a5de13ab11
parentdca89bfb5d249756ba8d5c1544b843f3fcdcd26d
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.026068 seconds and 4 git commands to generate.