Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3a46891 authored by Qu Wenruo's avatar Qu Wenruo Committed by Chris Mason
Browse files

btrfs: Add trace for btrfs_workqueue alloc/destroy



Since most of the btrfs_workqueue is printed as pointer address,
for easier analysis, add trace for btrfs_workqueue alloc/destroy.
So it is possible to determine the workqueue that a given work belongs
to(by comparing the wq pointer address with alloc trace event).

Signed-off-by: default avatarQu Wenruo <quenruo@cn.fujitsu.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent f094c9bd
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -56,7 +56,8 @@ struct btrfs_workqueue {
};

static inline struct __btrfs_workqueue
*__btrfs_alloc_workqueue(char *name, int flags, int max_active, int thresh)
*__btrfs_alloc_workqueue(const char *name, int flags, int max_active,
			 int thresh)
{
	struct __btrfs_workqueue *ret = kzalloc(sizeof(*ret), GFP_NOFS);

@@ -92,13 +93,14 @@ static inline struct __btrfs_workqueue
	INIT_LIST_HEAD(&ret->ordered_list);
	spin_lock_init(&ret->list_lock);
	spin_lock_init(&ret->thres_lock);
	trace_btrfs_workqueue_alloc(ret, name, flags & WQ_HIGHPRI);
	return ret;
}

static inline void
__btrfs_destroy_workqueue(struct __btrfs_workqueue *wq);

struct btrfs_workqueue *btrfs_alloc_workqueue(char *name,
struct btrfs_workqueue *btrfs_alloc_workqueue(const char *name,
					      int flags,
					      int max_active,
					      int thresh)
@@ -305,6 +307,7 @@ static inline void
__btrfs_destroy_workqueue(struct __btrfs_workqueue *wq)
{
	destroy_workqueue(wq->normal_wq);
	trace_btrfs_workqueue_destroy(wq);
	kfree(wq);
}

+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ struct btrfs_work {
	unsigned long flags;
};

struct btrfs_workqueue *btrfs_alloc_workqueue(char *name,
struct btrfs_workqueue *btrfs_alloc_workqueue(const char *name,
					      int flags,
					      int max_active,
					      int thresh);
+55 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ struct btrfs_free_cluster;
struct map_lookup;
struct extent_buffer;
struct btrfs_work;
struct __btrfs_workqueue;

#define show_ref_type(type)						\
	__print_symbolic(type,						\
@@ -1063,6 +1064,60 @@ DEFINE_EVENT(btrfs__work, btrfs_ordered_sched,
	TP_ARGS(work)
);

DECLARE_EVENT_CLASS(btrfs__workqueue,

	TP_PROTO(struct __btrfs_workqueue *wq, const char *name, int high),

	TP_ARGS(wq, name, high),

	TP_STRUCT__entry(
		__field(	void *,	wq			)
		__string(	name,	name			)
		__field(	int ,	high			)
	),

	TP_fast_assign(
		__entry->wq		= wq;
		__assign_str(name, name);
		__entry->high		= high;
	),

	TP_printk("name=%s%s, wq=%p", __get_str(name),
		  __print_flags(__entry->high, "",
				{(WQ_HIGHPRI),	"-high"}),
		  __entry->wq)
);

DEFINE_EVENT(btrfs__workqueue, btrfs_workqueue_alloc,

	TP_PROTO(struct __btrfs_workqueue *wq, const char *name, int high),

	TP_ARGS(wq, name, high)
);

DECLARE_EVENT_CLASS(btrfs__workqueue_done,

	TP_PROTO(struct __btrfs_workqueue *wq),

	TP_ARGS(wq),

	TP_STRUCT__entry(
		__field(	void *,	wq			)
	),

	TP_fast_assign(
		__entry->wq		= wq;
	),

	TP_printk("wq=%p", __entry->wq)
);

DEFINE_EVENT(btrfs__workqueue_done, btrfs_workqueue_destroy,

	TP_PROTO(struct __btrfs_workqueue *wq),

	TP_ARGS(wq)
);

#endif /* _TRACE_BTRFS_H */