Blame view

kernel/linux-rt-4.4.41/include/linux/blktrace_api.h 3.31 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  #ifndef BLKTRACE_H
  #define BLKTRACE_H
  
  #include <linux/blkdev.h>
  #include <linux/relay.h>
  #include <linux/compat.h>
  #include <uapi/linux/blktrace_api.h>
  #include <linux/list.h>
  
  #if defined(CONFIG_BLK_DEV_IO_TRACE)
  
  #include <linux/sysfs.h>
  
  struct blk_trace {
  	int trace_state;
  	struct rchan *rchan;
  	unsigned long __percpu *sequence;
  	unsigned char __percpu *msg_data;
  	u16 act_mask;
  	u64 start_lba;
  	u64 end_lba;
  	u32 pid;
  	u32 dev;
  	struct dentry *dir;
  	struct dentry *dropped_file;
  	struct dentry *msg_file;
  	struct list_head running_list;
  	atomic_t dropped;
  };
  
  extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *);
  extern void blk_trace_shutdown(struct request_queue *);
  extern int do_blk_trace_setup(struct request_queue *q, char *name,
  			      dev_t dev, struct block_device *bdev,
  			      struct blk_user_trace_setup *buts);
  extern __printf(2, 3)
  void __trace_note_message(struct blk_trace *, const char *fmt, ...);
  
  /**
   * blk_add_trace_msg - Add a (simple) message to the blktrace stream
   * @q:		queue the io is for
   * @fmt:	format to print message in
   * args...	Variable argument list for format
   *
   * Description:
   *     Records a (simple) message onto the blktrace stream.
   *
   *     NOTE: BLK_TN_MAX_MSG characters are output at most.
   *     NOTE: Can not use 'static inline' due to presence of var args...
   *
   **/
  #define blk_add_trace_msg(q, fmt, ...)					\
  	do {								\
  		struct blk_trace *bt = (q)->blk_trace;			\
  		if (unlikely(bt))					\
  			__trace_note_message(bt, fmt, ##__VA_ARGS__);	\
  	} while (0)
  #define BLK_TN_MAX_MSG		128
  
  extern void blk_add_driver_data(struct request_queue *q, 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);
  extern void blk_trace_remove_sysfs(struct device *dev);
  extern int blk_trace_init_sysfs(struct device *dev);
  
  extern struct attribute_group blk_trace_attr_group;
  
  #else /* !CONFIG_BLK_DEV_IO_TRACE */
  # define blk_trace_ioctl(bdev, cmd, arg)		(-ENOTTY)
  # define blk_trace_shutdown(q)				do { } while (0)
  # define do_blk_trace_setup(q, name, dev, bdev, buts)	(-ENOTTY)
  # define blk_add_driver_data(q, rq, data, len)		do {} while (0)
  # define blk_trace_setup(q, name, dev, bdev, arg)	(-ENOTTY)
  # define blk_trace_startstop(q, start)			(-ENOTTY)
  # define blk_trace_remove(q)				(-ENOTTY)
  # define blk_add_trace_msg(q, fmt, ...)			do { } while (0)
  # define blk_trace_remove_sysfs(dev)			do { } while (0)
  static inline int blk_trace_init_sysfs(struct device *dev)
  {
  	return 0;
  }
  
  #endif /* CONFIG_BLK_DEV_IO_TRACE */
  
  #ifdef CONFIG_COMPAT
  
  struct compat_blk_user_trace_setup {
  	char name[BLKTRACE_BDEV_SIZE];
  	u16 act_mask;
  	u32 buf_size;
  	u32 buf_nr;
  	compat_u64 start_lba;
  	compat_u64 end_lba;
  	u32 pid;
  };
  #define BLKTRACESETUP32 _IOWR(0x12, 115, struct compat_blk_user_trace_setup)
  
  #endif
  
  #if defined(CONFIG_EVENT_TRACING) && defined(CONFIG_BLOCK)
  
  static inline int blk_cmd_buf_len(struct request *rq)
  {
  	return (rq->cmd_type == REQ_TYPE_BLOCK_PC) ? rq->cmd_len * 3 : 1;
  }
  
  extern void blk_dump_cmd(char *buf, struct request *rq);
  extern void blk_fill_rwbs(char *rwbs, u32 rw, int bytes);
  
  #endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */
  
  #endif