Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

blktrace: only calculate trace length once

De-duplicate the calculation of the trace length instead of doing the
calculation twice, once for calling trace_buffer_lock_reserve() and once
for calling relay_reserve().

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Johannes Thumshirn and committed by
Jens Axboe
a65988a0 5c5028ee

+8 -6
+8 -6
kernel/trace/blktrace.c
··· 76 76 int cpu = smp_processor_id(); 77 77 bool blk_tracer = blk_tracer_enabled; 78 78 ssize_t cgid_len = cgid ? sizeof(cgid) : 0; 79 + size_t trace_len; 79 80 81 + trace_len = sizeof(*t) + cgid_len + len; 80 82 if (blk_tracer) { 81 83 buffer = blk_tr->array_buffer.buffer; 82 84 trace_ctx = tracing_gen_ctx_flags(0); 83 85 event = trace_buffer_lock_reserve(buffer, TRACE_BLK, 84 - sizeof(*t) + len + cgid_len, 85 - trace_ctx); 86 + trace_len, trace_ctx); 86 87 if (!event) 87 88 return; 88 89 t = ring_buffer_event_data(event); ··· 93 92 if (!bt->rchan) 94 93 return; 95 94 96 - t = relay_reserve(bt->rchan, sizeof(*t) + len + cgid_len); 95 + t = relay_reserve(bt->rchan, trace_len); 97 96 if (t) { 98 97 t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION; 99 98 t->time = ktime_to_ns(ktime_get()); ··· 229 228 bool blk_tracer = blk_tracer_enabled; 230 229 ssize_t cgid_len = cgid ? sizeof(cgid) : 0; 231 230 const enum req_op op = opf & REQ_OP_MASK; 231 + size_t trace_len; 232 232 233 233 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) 234 234 return; ··· 252 250 return; 253 251 cpu = raw_smp_processor_id(); 254 252 253 + trace_len = sizeof(*t) + pdu_len + cgid_len; 255 254 if (blk_tracer) { 256 255 tracing_record_cmdline(current); 257 256 258 257 buffer = blk_tr->array_buffer.buffer; 259 258 trace_ctx = tracing_gen_ctx_flags(0); 260 259 event = trace_buffer_lock_reserve(buffer, TRACE_BLK, 261 - sizeof(*t) + pdu_len + cgid_len, 262 - trace_ctx); 260 + trace_len, trace_ctx); 263 261 if (!event) 264 262 return; 265 263 t = ring_buffer_event_data(event); ··· 275 273 * from coming in and stepping on our toes. 276 274 */ 277 275 local_irq_save(flags); 278 - t = relay_reserve(bt->rchan, sizeof(*t) + pdu_len + cgid_len); 276 + t = relay_reserve(bt->rchan, trace_len); 279 277 if (t) { 280 278 sequence = per_cpu_ptr(bt->sequence, cpu); 281 279