diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index d31c8d3d..0f88e423 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -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, diff --git a/kmod/src/server.c b/kmod/src/server.c index e7c0c3dd..1290f75b 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -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);