#define pr_fmt(fmt) …
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/stat.h>
#include <linux/jiffies.h>
#include <linux/list.h>
#include "drbd_int.h"
#include "drbd_req.h"
#include "drbd_debugfs.h"
static struct dentry *drbd_debugfs_root;
static struct dentry *drbd_debugfs_version;
static struct dentry *drbd_debugfs_resources;
static struct dentry *drbd_debugfs_minors;
static void seq_print_age_or_dash(struct seq_file *m, bool valid, unsigned long dt)
{ … }
static void __seq_print_rq_state_bit(struct seq_file *m,
bool is_set, char *sep, const char *set_name, const char *unset_name)
{ … }
static void seq_print_rq_state_bit(struct seq_file *m,
bool is_set, char *sep, const char *set_name)
{ … }
static void seq_print_request_state(struct seq_file *m, struct drbd_request *req)
{ … }
static void seq_print_one_request(struct seq_file *m, struct drbd_request *req, unsigned long now)
{ … }
#define RQ_HDR …
static void seq_print_minor_vnr_req(struct seq_file *m, struct drbd_request *req, unsigned long now)
{ … }
static void seq_print_resource_pending_meta_io(struct seq_file *m, struct drbd_resource *resource, unsigned long now)
{ … }
static void seq_print_waiting_for_AL(struct seq_file *m, struct drbd_resource *resource, unsigned long now)
{ … }
static void seq_print_device_bitmap_io(struct seq_file *m, struct drbd_device *device, unsigned long now)
{ … }
static void seq_print_resource_pending_bitmap_io(struct seq_file *m, struct drbd_resource *resource, unsigned long now)
{ … }
static void seq_print_peer_request_flags(struct seq_file *m, struct drbd_peer_request *peer_req)
{ … }
static void seq_print_peer_request(struct seq_file *m,
struct drbd_device *device, struct list_head *lh,
unsigned long now)
{ … }
static void seq_print_device_peer_requests(struct seq_file *m,
struct drbd_device *device, unsigned long now)
{ … }
static void seq_print_resource_pending_peer_requests(struct seq_file *m,
struct drbd_resource *resource, unsigned long now)
{ … }
static void seq_print_resource_transfer_log_summary(struct seq_file *m,
struct drbd_resource *resource,
struct drbd_connection *connection,
unsigned long now)
{ … }
static int in_flight_summary_show(struct seq_file *m, void *pos)
{ … }
static int drbd_single_open(struct file *file, int (*show)(struct seq_file *, void *),
void *data, struct kref *kref,
void (*release)(struct kref *))
{ … }
static int in_flight_summary_open(struct inode *inode, struct file *file)
{ … }
static int in_flight_summary_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations in_flight_summary_fops = …;
void drbd_debugfs_resource_add(struct drbd_resource *resource)
{ … }
static void drbd_debugfs_remove(struct dentry **dp)
{ … }
void drbd_debugfs_resource_cleanup(struct drbd_resource *resource)
{ … }
static void seq_print_one_timing_detail(struct seq_file *m,
const struct drbd_thread_timing_details *tdp,
unsigned long now)
{ … }
static void seq_print_timing_details(struct seq_file *m,
const char *title,
unsigned int cb_nr, struct drbd_thread_timing_details *tdp, unsigned long now)
{ … }
static int callback_history_show(struct seq_file *m, void *ignored)
{ … }
static int callback_history_open(struct inode *inode, struct file *file)
{ … }
static int callback_history_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations connection_callback_history_fops = …;
static int connection_oldest_requests_show(struct seq_file *m, void *ignored)
{ … }
static int connection_oldest_requests_open(struct inode *inode, struct file *file)
{ … }
static int connection_oldest_requests_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations connection_oldest_requests_fops = …;
void drbd_debugfs_connection_add(struct drbd_connection *connection)
{ … }
void drbd_debugfs_connection_cleanup(struct drbd_connection *connection)
{ … }
static void resync_dump_detail(struct seq_file *m, struct lc_element *e)
{ … }
static int device_resync_extents_show(struct seq_file *m, void *ignored)
{ … }
static int device_act_log_extents_show(struct seq_file *m, void *ignored)
{ … }
static int device_oldest_requests_show(struct seq_file *m, void *ignored)
{ … }
static int device_data_gen_id_show(struct seq_file *m, void *ignored)
{ … }
static int device_ed_gen_id_show(struct seq_file *m, void *ignored)
{ … }
#define drbd_debugfs_device_attr(name) …
drbd_debugfs_device_attr(…)
drbd_debugfs_device_attr(…)
drbd_debugfs_device_attr(…)
drbd_debugfs_device_attr(…)
drbd_debugfs_device_attr(…)
void drbd_debugfs_device_add(struct drbd_device *device)
{ … }
void drbd_debugfs_device_cleanup(struct drbd_device *device)
{ … }
void drbd_debugfs_peer_device_add(struct drbd_peer_device *peer_device)
{ … }
void drbd_debugfs_peer_device_cleanup(struct drbd_peer_device *peer_device)
{ … }
static int drbd_version_show(struct seq_file *m, void *ignored)
{ … }
static int drbd_version_open(struct inode *inode, struct file *file)
{ … }
static const struct file_operations drbd_version_fops = …;
void drbd_debugfs_cleanup(void)
{ … }
void __init drbd_debugfs_init(void)
{ … }