#ifndef BLKTRACE_H
#define BLKTRACE_H
#include <linux/blk-mq.h>
#include <linux/relay.h>
#include <linux/compat.h>
#include <uapi/linux/blktrace_api.h>
#include <linux/list.h>
#include <linux/blk_types.h>
#if defined(CONFIG_BLK_DEV_IO_TRACE)
#include <linux/sysfs.h>
struct blk_trace { … };
extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *);
extern void blk_trace_shutdown(struct request_queue *);
__printf(3, 4) void __blk_trace_note_message(struct blk_trace *bt,
struct cgroup_subsys_state *css, const char *fmt, ...);
#define blk_add_cgroup_trace_msg(q, css, fmt, ...) …
#define blk_add_trace_msg(q, fmt, ...) …
#define BLK_TN_MAX_MSG …
static inline bool blk_trace_note_message_enabled(struct request_queue *q)
{ … }
extern void blk_add_driver_data(struct request *rq, void *data, size_t len);
extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
struct block_device *bdev,
char __user *arg);
extern int blk_trace_startstop(struct request_queue *q, int start);
extern int blk_trace_remove(struct request_queue *q);
#else
#define blk_trace_ioctl …
#define blk_trace_shutdown …
#define blk_add_driver_data …
#define blk_trace_setup …
#define blk_trace_startstop …
#define blk_add_trace_msg …
#define blk_add_cgroup_trace_msg …
#define blk_trace_note_message_enabled …
static inline int blk_trace_remove(struct request_queue *q)
{
return -ENOTTY;
}
#endif
#ifdef CONFIG_COMPAT
struct compat_blk_user_trace_setup { … };
#define BLKTRACESETUP32 …
#endif
void blk_fill_rwbs(char *rwbs, blk_opf_t opf);
static inline sector_t blk_rq_trace_sector(struct request *rq)
{ … }
static inline unsigned int blk_rq_trace_nr_sectors(struct request *rq)
{ … }
#endif