Skip to content

Commit 60a9bb9

Browse files
Ye Binaxboe
Ye Bin
authored andcommitted
blktrace: introduce 'blk_trace_{start,stop}' helper
Introduce 'blk_trace_{start,stop}' helper. No functional changed. Signed-off-by: Ye Bin <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jens Axboe <[email protected]>
1 parent d4347d5 commit 60a9bb9

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

kernel/trace/blktrace.c

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,37 @@ static void put_probe_ref(void)
346346
mutex_unlock(&blk_probe_mutex);
347347
}
348348

349+
static int blk_trace_start(struct blk_trace *bt)
350+
{
351+
if (bt->trace_state != Blktrace_setup &&
352+
bt->trace_state != Blktrace_stopped)
353+
return -EINVAL;
354+
355+
blktrace_seq++;
356+
smp_mb();
357+
bt->trace_state = Blktrace_running;
358+
raw_spin_lock_irq(&running_trace_lock);
359+
list_add(&bt->running_list, &running_trace_list);
360+
raw_spin_unlock_irq(&running_trace_lock);
361+
trace_note_time(bt);
362+
363+
return 0;
364+
}
365+
366+
static int blk_trace_stop(struct blk_trace *bt)
367+
{
368+
if (bt->trace_state != Blktrace_running)
369+
return -EINVAL;
370+
371+
bt->trace_state = Blktrace_stopped;
372+
raw_spin_lock_irq(&running_trace_lock);
373+
list_del_init(&bt->running_list);
374+
raw_spin_unlock_irq(&running_trace_lock);
375+
relay_flush(bt->rchan);
376+
377+
return 0;
378+
}
379+
349380
static void blk_trace_cleanup(struct request_queue *q, struct blk_trace *bt)
350381
{
351382
synchronize_rcu();
@@ -658,44 +689,17 @@ static int compat_blk_trace_setup(struct request_queue *q, char *name,
658689

659690
static int __blk_trace_startstop(struct request_queue *q, int start)
660691
{
661-
int ret;
662692
struct blk_trace *bt;
663693

664694
bt = rcu_dereference_protected(q->blk_trace,
665695
lockdep_is_held(&q->debugfs_mutex));
666696
if (bt == NULL)
667697
return -EINVAL;
668698

669-
/*
670-
* For starting a trace, we can transition from a setup or stopped
671-
* trace. For stopping a trace, the state must be running
672-
*/
673-
ret = -EINVAL;
674-
if (start) {
675-
if (bt->trace_state == Blktrace_setup ||
676-
bt->trace_state == Blktrace_stopped) {
677-
blktrace_seq++;
678-
smp_mb();
679-
bt->trace_state = Blktrace_running;
680-
raw_spin_lock_irq(&running_trace_lock);
681-
list_add(&bt->running_list, &running_trace_list);
682-
raw_spin_unlock_irq(&running_trace_lock);
683-
684-
trace_note_time(bt);
685-
ret = 0;
686-
}
687-
} else {
688-
if (bt->trace_state == Blktrace_running) {
689-
bt->trace_state = Blktrace_stopped;
690-
raw_spin_lock_irq(&running_trace_lock);
691-
list_del_init(&bt->running_list);
692-
raw_spin_unlock_irq(&running_trace_lock);
693-
relay_flush(bt->rchan);
694-
ret = 0;
695-
}
696-
}
697-
698-
return ret;
699+
if (start)
700+
return blk_trace_start(bt);
701+
else
702+
return blk_trace_stop(bt);
699703
}
700704

701705
int blk_trace_startstop(struct request_queue *q, int start)
@@ -1614,13 +1618,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
16141618
if (bt == NULL)
16151619
return -EINVAL;
16161620

1617-
if (bt->trace_state == Blktrace_running) {
1618-
bt->trace_state = Blktrace_stopped;
1619-
raw_spin_lock_irq(&running_trace_lock);
1620-
list_del_init(&bt->running_list);
1621-
raw_spin_unlock_irq(&running_trace_lock);
1622-
relay_flush(bt->rchan);
1623-
}
1621+
blk_trace_stop(bt);
16241622

16251623
put_probe_ref();
16261624
synchronize_rcu();

0 commit comments

Comments
 (0)