mirror of
https://github.com/versity/scoutfs.git
synced 2026-02-09 04:00:10 +00:00
scoutfs: add server work tracing
Add some server workqueue and work tracing to chase down the destruction of an active workqueue. Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
@@ -1759,6 +1759,51 @@ DEFINE_EVENT(scoutfs_net_class, scoutfs_client_recv_reply,
|
||||
TP_ARGS(sb, name, peer, nh)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(scoutfs_work_class,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret),
|
||||
TP_STRUCT__entry(
|
||||
__field(__u64, fsid)
|
||||
__field(__u64, data)
|
||||
__field(int, ret)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->fsid = FSID_ARG(sb);
|
||||
__entry->data = data;
|
||||
__entry->ret = ret;
|
||||
),
|
||||
TP_printk("fsid "FSID_FMT" data %llu ret %d",
|
||||
__entry->fsid, __entry->data, __entry->ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_commit_work_enter,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_commit_work_exit,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_recv_work_enter,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_recv_work_exit,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_work_enter,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_work_exit,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_workqueue_destroy,
|
||||
TP_PROTO(struct super_block *sb, u64 data, int ret),
|
||||
TP_ARGS(sb, data, ret)
|
||||
);
|
||||
|
||||
TRACE_EVENT(scoutfs_item_next_range_check,
|
||||
TP_PROTO(struct super_block *sb, int cached,
|
||||
struct scoutfs_key *key, struct scoutfs_key *pos,
|
||||
|
||||
@@ -533,6 +533,8 @@ static void scoutfs_server_commit_func(struct work_struct *work)
|
||||
struct llist_node *node;
|
||||
int ret;
|
||||
|
||||
trace_scoutfs_server_commit_work_enter(sb, 0, 0);
|
||||
|
||||
down_write(&server->commit_rwsem);
|
||||
|
||||
if (!scoutfs_btree_has_dirty(sb)) {
|
||||
@@ -577,6 +579,7 @@ out:
|
||||
}
|
||||
|
||||
up_write(&server->commit_rwsem);
|
||||
trace_scoutfs_server_commit_work_exit(sb, 0, ret);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1126,6 +1129,8 @@ static void scoutfs_server_recv_func(struct work_struct *work)
|
||||
struct kvec kv;
|
||||
int ret;
|
||||
|
||||
trace_scoutfs_server_recv_work_enter(sb, 0, 0);
|
||||
|
||||
req_wq = alloc_workqueue("scoutfs_server_requests",
|
||||
WQ_NON_REENTRANT, 0);
|
||||
if (!req_wq) {
|
||||
@@ -1221,6 +1226,8 @@ out:
|
||||
smp_mb();
|
||||
wake_up_process(server->listen_task);
|
||||
mutex_unlock(&server->mutex);
|
||||
|
||||
trace_scoutfs_server_recv_work_exit(sb, 0, ret);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1274,6 +1281,8 @@ static void scoutfs_server_func(struct work_struct *work)
|
||||
int optval;
|
||||
int ret;
|
||||
|
||||
trace_scoutfs_server_work_enter(sb, 0, 0);
|
||||
|
||||
init_waitqueue_head(&waitq);
|
||||
|
||||
ret = scoutfs_lock_global(sb, DLM_LOCK_EX, 0,
|
||||
@@ -1431,6 +1440,8 @@ out:
|
||||
|
||||
/* always requeues, cancel_delayed_work_sync cancels on shutdown */
|
||||
queue_delayed_work(server->wq, &server->dwork, HZ / 2);
|
||||
|
||||
trace_scoutfs_server_work_exit(sb, 0, ret);
|
||||
}
|
||||
|
||||
int scoutfs_server_setup(struct super_block *sb)
|
||||
@@ -1480,6 +1491,7 @@ void scoutfs_server_destroy(struct super_block *sb)
|
||||
/* recv work/compaction could have left commit_work queued */
|
||||
cancel_work_sync(&server->commit_work);
|
||||
|
||||
trace_scoutfs_server_workqueue_destroy(sb, 0, 0);
|
||||
destroy_workqueue(server->wq);
|
||||
|
||||
kfree(server);
|
||||
|
||||
Reference in New Issue
Block a user