#ifdef CONFIG_DEBUG_FS
#include <linux/module.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/idr.h>
#include <linux/kref.h>
#include <linux/seq_file.h>
#include <linux/debugfs.h>
#include <linux/uaccess.h>
#include "tcp.h"
#include "nodemanager.h"
#define MLOG_MASK_PREFIX …
#include "masklog.h"
#include "tcp_internal.h"
#define O2NET_DEBUG_DIR …
#define SC_DEBUG_NAME …
#define NST_DEBUG_NAME …
#define STATS_DEBUG_NAME …
#define NODES_DEBUG_NAME …
#define SHOW_SOCK_CONTAINERS …
#define SHOW_SOCK_STATS …
static struct dentry *o2net_dentry;
static DEFINE_SPINLOCK(o2net_debug_lock);
static LIST_HEAD(sock_containers);
static LIST_HEAD(send_tracking);
void o2net_debug_add_nst(struct o2net_send_tracking *nst)
{ … }
void o2net_debug_del_nst(struct o2net_send_tracking *nst)
{ … }
static struct o2net_send_tracking
*next_nst(struct o2net_send_tracking *nst_start)
{ … }
static void *nst_seq_start(struct seq_file *seq, loff_t *pos)
{ … }
static void *nst_seq_next(struct seq_file *seq, void *v, loff_t *pos)
{ … }
static int nst_seq_show(struct seq_file *seq, void *v)
{ … }
static void nst_seq_stop(struct seq_file *seq, void *v)
{ … }
static const struct seq_operations nst_seq_ops = …;
static int nst_fop_open(struct inode *inode, struct file *file)
{ … }
static int nst_fop_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations nst_seq_fops = …;
void o2net_debug_add_sc(struct o2net_sock_container *sc)
{ … }
void o2net_debug_del_sc(struct o2net_sock_container *sc)
{ … }
struct o2net_sock_debug { … };
static struct o2net_sock_container
*next_sc(struct o2net_sock_container *sc_start)
{ … }
static void *sc_seq_start(struct seq_file *seq, loff_t *pos)
{ … }
static void *sc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
{ … }
#ifdef CONFIG_OCFS2_FS_STATS
#define sc_send_count(_s) …
#define sc_recv_count(_s) …
#define sc_tv_acquiry_total_ns(_s) …
#define sc_tv_send_total_ns(_s) …
#define sc_tv_status_total_ns(_s) …
#define sc_tv_process_total_ns(_s) …
#else
#define sc_send_count …
#define sc_recv_count …
#define sc_tv_acquiry_total_ns …
#define sc_tv_send_total_ns …
#define sc_tv_status_total_ns …
#define sc_tv_process_total_ns …
#endif
#define O2NET_STATS_STR_VERSION …
static void sc_show_sock_stats(struct seq_file *seq,
struct o2net_sock_container *sc)
{ … }
static void sc_show_sock_container(struct seq_file *seq,
struct o2net_sock_container *sc)
{ … }
static int sc_seq_show(struct seq_file *seq, void *v)
{ … }
static void sc_seq_stop(struct seq_file *seq, void *v)
{ … }
static const struct seq_operations sc_seq_ops = …;
static int sc_common_open(struct file *file, int ctxt)
{ … }
static int sc_fop_release(struct inode *inode, struct file *file)
{ … }
static int stats_fop_open(struct inode *inode, struct file *file)
{ … }
static const struct file_operations stats_seq_fops = …;
static int sc_fop_open(struct inode *inode, struct file *file)
{ … }
static const struct file_operations sc_seq_fops = …;
static int o2net_fill_bitmap(char *buf, int len)
{ … }
static int nodes_fop_open(struct inode *inode, struct file *file)
{ … }
static int o2net_debug_release(struct inode *inode, struct file *file)
{ … }
static ssize_t o2net_debug_read(struct file *file, char __user *buf,
size_t nbytes, loff_t *ppos)
{ … }
static const struct file_operations nodes_fops = …;
void o2net_debugfs_exit(void)
{ … }
void o2net_debugfs_init(void)
{ … }
#endif