~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/blktrace_api.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef BLKTRACE_H
  3 #define BLKTRACE_H
  4 
  5 #include <linux/blk-mq.h>
  6 #include <linux/relay.h>
  7 #include <linux/compat.h>
  8 #include <uapi/linux/blktrace_api.h>
  9 #include <linux/list.h>
 10 #include <linux/blk_types.h>
 11 
 12 #if defined(CONFIG_BLK_DEV_IO_TRACE)
 13 
 14 #include <linux/sysfs.h>
 15 
 16 struct blk_trace {
 17         int trace_state;
 18         struct rchan *rchan;
 19         unsigned long __percpu *sequence;
 20         unsigned char __percpu *msg_data;
 21         u16 act_mask;
 22         u64 start_lba;
 23         u64 end_lba;
 24         u32 pid;
 25         u32 dev;
 26         struct dentry *dir;
 27         struct list_head running_list;
 28         atomic_t dropped;
 29 };
 30 
 31 extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *);
 32 extern void blk_trace_shutdown(struct request_queue *);
 33 __printf(3, 4) void __blk_trace_note_message(struct blk_trace *bt,
 34                 struct cgroup_subsys_state *css, const char *fmt, ...);
 35 
 36 /**
 37  * blk_add_trace_msg - Add a (simple) message to the blktrace stream
 38  * @q:          queue the io is for
 39  * @fmt:        format to print message in
 40  * args...      Variable argument list for format
 41  *
 42  * Description:
 43  *     Records a (simple) message onto the blktrace stream.
 44  *
 45  *     NOTE: BLK_TN_MAX_MSG characters are output at most.
 46  *     NOTE: Can not use 'static inline' due to presence of var args...
 47  *
 48  **/
 49 #define blk_add_cgroup_trace_msg(q, css, fmt, ...)                      \
 50         do {                                                            \
 51                 struct blk_trace *bt;                                   \
 52                                                                         \
 53                 rcu_read_lock();                                        \
 54                 bt = rcu_dereference((q)->blk_trace);                   \
 55                 if (unlikely(bt))                                       \
 56                         __blk_trace_note_message(bt, css, fmt, ##__VA_ARGS__);\
 57                 rcu_read_unlock();                                      \
 58         } while (0)
 59 #define blk_add_trace_msg(q, fmt, ...)                                  \
 60         blk_add_cgroup_trace_msg(q, NULL, fmt, ##__VA_ARGS__)
 61 #define BLK_TN_MAX_MSG          128
 62 
 63 static inline bool blk_trace_note_message_enabled(struct request_queue *q)
 64 {
 65         struct blk_trace *bt;
 66         bool ret;
 67 
 68         rcu_read_lock();
 69         bt = rcu_dereference(q->blk_trace);
 70         ret = bt && (bt->act_mask & BLK_TC_NOTIFY);
 71         rcu_read_unlock();
 72         return ret;
 73 }
 74 
 75 extern void blk_add_driver_data(struct request *rq, void *data, size_t len);
 76 extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
 77                            struct block_device *bdev,
 78                            char __user *arg);
 79 extern int blk_trace_startstop(struct request_queue *q, int start);
 80 extern int blk_trace_remove(struct request_queue *q);
 81 
 82 #else /* !CONFIG_BLK_DEV_IO_TRACE */
 83 # define blk_trace_ioctl(bdev, cmd, arg)                (-ENOTTY)
 84 # define blk_trace_shutdown(q)                          do { } while (0)
 85 # define blk_add_driver_data(rq, data, len)             do {} while (0)
 86 # define blk_trace_setup(q, name, dev, bdev, arg)       (-ENOTTY)
 87 # define blk_trace_startstop(q, start)                  (-ENOTTY)
 88 # define blk_add_trace_msg(q, fmt, ...)                 do { } while (0)
 89 # define blk_add_cgroup_trace_msg(q, cg, fmt, ...)      do { } while (0)
 90 # define blk_trace_note_message_enabled(q)              (false)
 91 
 92 static inline int blk_trace_remove(struct request_queue *q)
 93 {
 94         return -ENOTTY;
 95 }
 96 #endif /* CONFIG_BLK_DEV_IO_TRACE */
 97 
 98 #ifdef CONFIG_COMPAT
 99 
100 struct compat_blk_user_trace_setup {
101         char name[BLKTRACE_BDEV_SIZE];
102         u16 act_mask;
103         u32 buf_size;
104         u32 buf_nr;
105         compat_u64 start_lba;
106         compat_u64 end_lba;
107         u32 pid;
108 };
109 #define BLKTRACESETUP32 _IOWR(0x12, 115, struct compat_blk_user_trace_setup)
110 
111 #endif
112 
113 void blk_fill_rwbs(char *rwbs, blk_opf_t opf);
114 
115 static inline sector_t blk_rq_trace_sector(struct request *rq)
116 {
117         /*
118          * Tracing should ignore starting sector for passthrough requests and
119          * requests where starting sector didn't get set.
120          */
121         if (blk_rq_is_passthrough(rq) || blk_rq_pos(rq) == (sector_t)-1)
122                 return 0;
123         return blk_rq_pos(rq);
124 }
125 
126 static inline unsigned int blk_rq_trace_nr_sectors(struct request *rq)
127 {
128         return blk_rq_is_passthrough(rq) ? 0 : blk_rq_sectors(rq);
129 }
130 
131 #endif
132 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php