Skip to content

Commit

Permalink
blktrace: introduce 'blk_trace_{start,stop}' helper
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
Ye Bin authored and axboe committed Oct 20, 2022
1 parent d4347d5 commit 60a9bb9
Showing 1 changed file with 36 additions and 38 deletions.
74 changes: 36 additions & 38 deletions kernel/trace/blktrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,37 @@ static void put_probe_ref(void)
mutex_unlock(&blk_probe_mutex);
}

static int blk_trace_start(struct blk_trace *bt)
{
if (bt->trace_state != Blktrace_setup &&
bt->trace_state != Blktrace_stopped)
return -EINVAL;

blktrace_seq++;
smp_mb();
bt->trace_state = Blktrace_running;
raw_spin_lock_irq(&running_trace_lock);
list_add(&bt->running_list, &running_trace_list);
raw_spin_unlock_irq(&running_trace_lock);
trace_note_time(bt);

return 0;
}

static int blk_trace_stop(struct blk_trace *bt)
{
if (bt->trace_state != Blktrace_running)
return -EINVAL;

bt->trace_state = Blktrace_stopped;
raw_spin_lock_irq(&running_trace_lock);
list_del_init(&bt->running_list);
raw_spin_unlock_irq(&running_trace_lock);
relay_flush(bt->rchan);

return 0;
}

static void blk_trace_cleanup(struct request_queue *q, struct blk_trace *bt)
{
synchronize_rcu();
Expand Down Expand Up @@ -658,44 +689,17 @@ static int compat_blk_trace_setup(struct request_queue *q, char *name,

static int __blk_trace_startstop(struct request_queue *q, int start)
{
int ret;
struct blk_trace *bt;

bt = rcu_dereference_protected(q->blk_trace,
lockdep_is_held(&q->debugfs_mutex));
if (bt == NULL)
return -EINVAL;

/*
* For starting a trace, we can transition from a setup or stopped
* trace. For stopping a trace, the state must be running
*/
ret = -EINVAL;
if (start) {
if (bt->trace_state == Blktrace_setup ||
bt->trace_state == Blktrace_stopped) {
blktrace_seq++;
smp_mb();
bt->trace_state = Blktrace_running;
raw_spin_lock_irq(&running_trace_lock);
list_add(&bt->running_list, &running_trace_list);
raw_spin_unlock_irq(&running_trace_lock);

trace_note_time(bt);
ret = 0;
}
} else {
if (bt->trace_state == Blktrace_running) {
bt->trace_state = Blktrace_stopped;
raw_spin_lock_irq(&running_trace_lock);
list_del_init(&bt->running_list);
raw_spin_unlock_irq(&running_trace_lock);
relay_flush(bt->rchan);
ret = 0;
}
}

return ret;
if (start)
return blk_trace_start(bt);
else
return blk_trace_stop(bt);
}

int blk_trace_startstop(struct request_queue *q, int start)
Expand Down Expand Up @@ -1614,13 +1618,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
if (bt == NULL)
return -EINVAL;

if (bt->trace_state == Blktrace_running) {
bt->trace_state = Blktrace_stopped;
raw_spin_lock_irq(&running_trace_lock);
list_del_init(&bt->running_list);
raw_spin_unlock_irq(&running_trace_lock);
relay_flush(bt->rchan);
}
blk_trace_stop(bt);

put_probe_ref();
synchronize_rcu();
Expand Down

0 comments on commit 60a9bb9

Please sign in to comment.