Blame view

block/blk-cgroup.h 11.3 KB
31e4c28d9   Vivek Goyal   blkio: Introduce ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  #ifndef _BLK_CGROUP_H
  #define _BLK_CGROUP_H
  /*
   * Common Block IO controller cgroup interface
   *
   * Based on ideas and code from CFQ, CFS and BFQ:
   * Copyright (C) 2003 Jens Axboe <axboe@kernel.dk>
   *
   * Copyright (C) 2008 Fabio Checconi <fabio@gandalf.sssup.it>
   *		      Paolo Valente <paolo.valente@unimore.it>
   *
   * Copyright (C) 2009 Vivek Goyal <vgoyal@redhat.com>
   * 	              Nauman Rafique <nauman@google.com>
   */
  
  #include <linux/cgroup.h>
575969a0d   Vivek Goyal   blk-cgroup: Make ...
17
  #include <linux/u64_stats_sync.h>
31e4c28d9   Vivek Goyal   blkio: Introduce ...
18

062a644d6   Vivek Goyal   blk-cgroup: Prepa...
19
20
  enum blkio_policy_id {
  	BLKIO_POLICY_PROP = 0,		/* Proportional Bandwidth division */
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
21
  	BLKIO_POLICY_THROTL,		/* Throttling */
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
22
  };
9355aede5   Vivek Goyal   blkio-throttle: l...
23
24
  /* Max limits for throttle policy */
  #define THROTL_IOPS_MAX		UINT_MAX
67523c48a   Ben Blum   cgroups: blkio su...
25
26
27
28
29
30
31
  #if defined(CONFIG_BLK_CGROUP) || defined(CONFIG_BLK_CGROUP_MODULE)
  
  #ifndef CONFIG_BLK_CGROUP
  /* When blk-cgroup is a module, its subsys_id isn't a compile-time constant */
  extern struct cgroup_subsys blkio_subsys;
  #define blkio_subsys_id blkio_subsys.subsys_id
  #endif
2f5ea4771   Jens Axboe   cfq-iosched: fix ...
32

84c124da9   Divyesh Shah   blkio: Changes to...
33
34
35
36
37
  enum stat_type {
  	/* Total time spent (in ns) between request dispatch to the driver and
  	 * request completion for IOs doen by this cgroup. This may not be
  	 * accurate when NCQ is turned on. */
  	BLKIO_STAT_SERVICE_TIME = 0,
84c124da9   Divyesh Shah   blkio: Changes to...
38
39
  	/* Total time spent waiting in scheduler queue in ns */
  	BLKIO_STAT_WAIT_TIME,
cdc1184cf   Divyesh Shah   blkio: Add io_que...
40
41
  	/* Number of IOs queued up */
  	BLKIO_STAT_QUEUED,
84c124da9   Divyesh Shah   blkio: Changes to...
42
43
  	/* All the single valued stats go below this */
  	BLKIO_STAT_TIME,
a23e68695   Vivek Goyal   blk-cgroup: move ...
44
  #ifdef CONFIG_DEBUG_BLK_CGROUP
167400d34   Justin TerAvest   blk-cgroup: Add u...
45
46
  	/* Time not charged to this cgroup */
  	BLKIO_STAT_UNACCOUNTED_TIME,
cdc1184cf   Divyesh Shah   blkio: Add io_que...
47
  	BLKIO_STAT_AVG_QUEUE_SIZE,
812df48d1   Divyesh Shah   blkio: Add more d...
48
49
50
  	BLKIO_STAT_IDLE_TIME,
  	BLKIO_STAT_EMPTY_TIME,
  	BLKIO_STAT_GROUP_WAIT_TIME,
84c124da9   Divyesh Shah   blkio: Changes to...
51
52
53
  	BLKIO_STAT_DEQUEUE
  #endif
  };
5624a4e44   Vivek Goyal   blk-throttle: Mak...
54
55
56
57
58
59
60
  /* Per cpu stats */
  enum stat_type_cpu {
  	BLKIO_STAT_CPU_SECTORS,
  	/* Total bytes transferred */
  	BLKIO_STAT_CPU_SERVICE_BYTES,
  	/* Total IOs serviced, post merge */
  	BLKIO_STAT_CPU_SERVICED,
317389a77   Vivek Goyal   cfq-iosched: Make...
61
62
  	/* Number of IOs merged */
  	BLKIO_STAT_CPU_MERGED,
5624a4e44   Vivek Goyal   blk-throttle: Mak...
63
64
  	BLKIO_STAT_CPU_NR
  };
84c124da9   Divyesh Shah   blkio: Changes to...
65
66
67
68
69
70
  enum stat_sub_type {
  	BLKIO_STAT_READ = 0,
  	BLKIO_STAT_WRITE,
  	BLKIO_STAT_SYNC,
  	BLKIO_STAT_ASYNC,
  	BLKIO_STAT_TOTAL
303a3acb2   Divyesh Shah   blkio: Add io con...
71
  };
812df48d1   Divyesh Shah   blkio: Add more d...
72
73
74
75
76
77
  /* blkg state flags */
  enum blkg_state_flags {
  	BLKG_waiting = 0,
  	BLKG_idling,
  	BLKG_empty,
  };
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
78
79
80
81
82
83
84
85
  /* cgroup files owned by proportional weight policy */
  enum blkcg_file_name_prop {
  	BLKIO_PROP_weight = 1,
  	BLKIO_PROP_weight_device,
  	BLKIO_PROP_io_service_bytes,
  	BLKIO_PROP_io_serviced,
  	BLKIO_PROP_time,
  	BLKIO_PROP_sectors,
167400d34   Justin TerAvest   blk-cgroup: Add u...
86
  	BLKIO_PROP_unaccounted_time,
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
87
88
89
90
91
92
93
94
95
96
  	BLKIO_PROP_io_service_time,
  	BLKIO_PROP_io_wait_time,
  	BLKIO_PROP_io_merged,
  	BLKIO_PROP_io_queued,
  	BLKIO_PROP_avg_queue_size,
  	BLKIO_PROP_group_wait_time,
  	BLKIO_PROP_idle_time,
  	BLKIO_PROP_empty_time,
  	BLKIO_PROP_dequeue,
  };
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
97
98
99
100
  /* cgroup files owned by throttle policy */
  enum blkcg_file_name_throtl {
  	BLKIO_THROTL_read_bps_device,
  	BLKIO_THROTL_write_bps_device,
7702e8f45   Vivek Goyal   blk-cgroup: cgrou...
101
102
  	BLKIO_THROTL_read_iops_device,
  	BLKIO_THROTL_write_iops_device,
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
103
104
105
  	BLKIO_THROTL_io_service_bytes,
  	BLKIO_THROTL_io_serviced,
  };
31e4c28d9   Vivek Goyal   blkio: Introduce ...
106
107
108
109
110
  struct blkio_cgroup {
  	struct cgroup_subsys_state css;
  	unsigned int weight;
  	spinlock_t lock;
  	struct hlist_head blkg_list;
34d0f179d   Gui Jianfeng   io-controller: Ad...
111
  	struct list_head policy_list; /* list of blkio_policy_node */
31e4c28d9   Vivek Goyal   blkio: Introduce ...
112
  };
303a3acb2   Divyesh Shah   blkio: Add io con...
113
114
115
  struct blkio_group_stats {
  	/* total disk time and nr sectors dispatched by this group */
  	uint64_t time;
cdc1184cf   Divyesh Shah   blkio: Add io_que...
116
  	uint64_t stat_arr[BLKIO_STAT_QUEUED + 1][BLKIO_STAT_TOTAL];
303a3acb2   Divyesh Shah   blkio: Add io con...
117
  #ifdef CONFIG_DEBUG_BLK_CGROUP
a23e68695   Vivek Goyal   blk-cgroup: move ...
118
119
  	/* Time not charged to this cgroup */
  	uint64_t unaccounted_time;
cdc1184cf   Divyesh Shah   blkio: Add io_que...
120
121
122
123
  	/* Sum of number of IOs queued across all samples */
  	uint64_t avg_queue_size_sum;
  	/* Count of samples taken for average */
  	uint64_t avg_queue_size_samples;
303a3acb2   Divyesh Shah   blkio: Add io con...
124
125
  	/* How many times this group has been removed from service tree */
  	unsigned long dequeue;
812df48d1   Divyesh Shah   blkio: Add more d...
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
  
  	/* Total time spent waiting for it to be assigned a timeslice. */
  	uint64_t group_wait_time;
  	uint64_t start_group_wait_time;
  
  	/* Time spent idling for this blkio_group */
  	uint64_t idle_time;
  	uint64_t start_idle_time;
  	/*
  	 * Total time when we have requests queued and do not contain the
  	 * current active queue.
  	 */
  	uint64_t empty_time;
  	uint64_t start_empty_time;
  	uint16_t flags;
303a3acb2   Divyesh Shah   blkio: Add io con...
141
142
  #endif
  };
5624a4e44   Vivek Goyal   blk-throttle: Mak...
143
144
145
146
  /* Per cpu blkio group stats */
  struct blkio_group_stats_cpu {
  	uint64_t sectors;
  	uint64_t stat_arr_cpu[BLKIO_STAT_CPU_NR][BLKIO_STAT_TOTAL];
575969a0d   Vivek Goyal   blk-cgroup: Make ...
147
  	struct u64_stats_sync syncp;
5624a4e44   Vivek Goyal   blk-throttle: Mak...
148
  };
31e4c28d9   Vivek Goyal   blkio: Introduce ...
149
150
151
152
  struct blkio_group {
  	/* An rcu protected unique identifier for the group */
  	void *key;
  	struct hlist_node blkcg_node;
b1c357696   Vivek Goyal   blkio: Take care ...
153
  	unsigned short blkcg_id;
2868ef7b3   Vivek Goyal   blkio: Some debug...
154
155
  	/* Store cgroup path */
  	char path[128];
220841906   Vivek Goyal   blkio: Export dis...
156
  	/* The device MKDEV(major, minor), this group has been created for */
84c124da9   Divyesh Shah   blkio: Changes to...
157
  	dev_t dev;
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
158
159
  	/* policy which owns this blk group */
  	enum blkio_policy_id plid;
220841906   Vivek Goyal   blkio: Export dis...
160

303a3acb2   Divyesh Shah   blkio: Add io con...
161
162
163
  	/* Need to serialize the stats in the case of reset/update */
  	spinlock_t stats_lock;
  	struct blkio_group_stats stats;
5624a4e44   Vivek Goyal   blk-throttle: Mak...
164
165
  	/* Per cpu stats pointer */
  	struct blkio_group_stats_cpu __percpu *stats_cpu;
31e4c28d9   Vivek Goyal   blkio: Introduce ...
166
  };
34d0f179d   Gui Jianfeng   io-controller: Ad...
167
168
169
  struct blkio_policy_node {
  	struct list_head node;
  	dev_t dev;
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
170
171
172
173
  	/* This node belongs to max bw policy or porportional weight policy */
  	enum blkio_policy_id plid;
  	/* cgroup file to which this rule belongs to */
  	int fileid;
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
174
175
176
177
  
  	union {
  		unsigned int weight;
  		/*
e890413af   Jie Liu   block: fix a typo...
178
  		 * Rate read/write in terms of bytes per second
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
179
180
181
182
  		 * Whether this rate represents read or write is determined
  		 * by file type "fileid".
  		 */
  		u64 bps;
7702e8f45   Vivek Goyal   blk-cgroup: cgrou...
183
  		unsigned int iops;
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
184
  	} val;
34d0f179d   Gui Jianfeng   io-controller: Ad...
185
186
187
188
  };
  
  extern unsigned int blkcg_get_weight(struct blkio_cgroup *blkcg,
  				     dev_t dev);
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
189
190
191
192
  extern uint64_t blkcg_get_read_bps(struct blkio_cgroup *blkcg,
  				     dev_t dev);
  extern uint64_t blkcg_get_write_bps(struct blkio_cgroup *blkcg,
  				     dev_t dev);
7702e8f45   Vivek Goyal   blk-cgroup: cgrou...
193
194
195
196
  extern unsigned int blkcg_get_read_iops(struct blkio_cgroup *blkcg,
  				     dev_t dev);
  extern unsigned int blkcg_get_write_iops(struct blkio_cgroup *blkcg,
  				     dev_t dev);
34d0f179d   Gui Jianfeng   io-controller: Ad...
197

3e2520668   Vivek Goyal   blkio: Implement ...
198
  typedef void (blkio_unlink_group_fn) (void *key, struct blkio_group *blkg);
fe0714377   Vivek Goyal   blkio: Recalculat...
199
200
201
202
203
204
205
206
207
208
209
  
  typedef void (blkio_update_group_weight_fn) (void *key,
  			struct blkio_group *blkg, unsigned int weight);
  typedef void (blkio_update_group_read_bps_fn) (void * key,
  			struct blkio_group *blkg, u64 read_bps);
  typedef void (blkio_update_group_write_bps_fn) (void *key,
  			struct blkio_group *blkg, u64 write_bps);
  typedef void (blkio_update_group_read_iops_fn) (void *key,
  			struct blkio_group *blkg, unsigned int read_iops);
  typedef void (blkio_update_group_write_iops_fn) (void *key,
  			struct blkio_group *blkg, unsigned int write_iops);
3e2520668   Vivek Goyal   blkio: Implement ...
210
211
212
213
  
  struct blkio_policy_ops {
  	blkio_unlink_group_fn *blkio_unlink_group_fn;
  	blkio_update_group_weight_fn *blkio_update_group_weight_fn;
4c9eefa16   Vivek Goyal   blk-cgroup: Intro...
214
215
  	blkio_update_group_read_bps_fn *blkio_update_group_read_bps_fn;
  	blkio_update_group_write_bps_fn *blkio_update_group_write_bps_fn;
7702e8f45   Vivek Goyal   blk-cgroup: cgrou...
216
217
  	blkio_update_group_read_iops_fn *blkio_update_group_read_iops_fn;
  	blkio_update_group_write_iops_fn *blkio_update_group_write_iops_fn;
3e2520668   Vivek Goyal   blkio: Implement ...
218
219
220
221
222
  };
  
  struct blkio_policy_type {
  	struct list_head list;
  	struct blkio_policy_ops ops;
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
223
  	enum blkio_policy_id plid;
3e2520668   Vivek Goyal   blkio: Implement ...
224
225
226
227
228
  };
  
  /* Blkio controller policy registration */
  extern void blkio_policy_register(struct blkio_policy_type *);
  extern void blkio_policy_unregister(struct blkio_policy_type *);
afc24d49c   Vivek Goyal   blk-cgroup: confi...
229
230
231
232
  static inline char *blkg_path(struct blkio_group *blkg)
  {
  	return blkg->path;
  }
2f5ea4771   Jens Axboe   cfq-iosched: fix ...
233
234
235
236
  #else
  
  struct blkio_group {
  };
3e2520668   Vivek Goyal   blkio: Implement ...
237
238
239
240
241
  struct blkio_policy_type {
  };
  
  static inline void blkio_policy_register(struct blkio_policy_type *blkiop) { }
  static inline void blkio_policy_unregister(struct blkio_policy_type *blkiop) { }
afc24d49c   Vivek Goyal   blk-cgroup: confi...
242
  static inline char *blkg_path(struct blkio_group *blkg) { return NULL; }
2f5ea4771   Jens Axboe   cfq-iosched: fix ...
243
  #endif
df457f845   Justin TerAvest   blk-cgroup: Lower...
244
  #define BLKIO_WEIGHT_MIN	10
31e4c28d9   Vivek Goyal   blkio: Introduce ...
245
246
  #define BLKIO_WEIGHT_MAX	1000
  #define BLKIO_WEIGHT_DEFAULT	500
2868ef7b3   Vivek Goyal   blkio: Some debug...
247
  #ifdef CONFIG_DEBUG_BLK_CGROUP
a11cdaa7a   Divyesh Shah   block: Update to ...
248
  void blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg);
9195291e5   Divyesh Shah   blkio: Increment ...
249
  void blkiocg_update_dequeue_stats(struct blkio_group *blkg,
220841906   Vivek Goyal   blkio: Export dis...
250
  				unsigned long dequeue);
812df48d1   Divyesh Shah   blkio: Add more d...
251
252
  void blkiocg_update_set_idle_time_stats(struct blkio_group *blkg);
  void blkiocg_update_idle_time_stats(struct blkio_group *blkg);
e5ff082e8   Vivek Goyal   blkio: Fix anothe...
253
  void blkiocg_set_start_empty_time(struct blkio_group *blkg);
812df48d1   Divyesh Shah   blkio: Add more d...
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
  
  #define BLKG_FLAG_FNS(name)						\
  static inline void blkio_mark_blkg_##name(				\
  		struct blkio_group_stats *stats)			\
  {									\
  	stats->flags |= (1 << BLKG_##name);				\
  }									\
  static inline void blkio_clear_blkg_##name(				\
  		struct blkio_group_stats *stats)			\
  {									\
  	stats->flags &= ~(1 << BLKG_##name);				\
  }									\
  static inline int blkio_blkg_##name(struct blkio_group_stats *stats)	\
  {									\
  	return (stats->flags & (1 << BLKG_##name)) != 0;		\
  }									\
  
  BLKG_FLAG_FNS(waiting)
  BLKG_FLAG_FNS(idling)
  BLKG_FLAG_FNS(empty)
  #undef BLKG_FLAG_FNS
2868ef7b3   Vivek Goyal   blkio: Some debug...
275
  #else
a11cdaa7a   Divyesh Shah   block: Update to ...
276
  static inline void blkiocg_update_avg_queue_size_stats(
cdc1184cf   Divyesh Shah   blkio: Add io_que...
277
  						struct blkio_group *blkg) {}
9195291e5   Divyesh Shah   blkio: Increment ...
278
279
  static inline void blkiocg_update_dequeue_stats(struct blkio_group *blkg,
  						unsigned long dequeue) {}
812df48d1   Divyesh Shah   blkio: Add more d...
280
281
282
  static inline void blkiocg_update_set_idle_time_stats(struct blkio_group *blkg)
  {}
  static inline void blkiocg_update_idle_time_stats(struct blkio_group *blkg) {}
e5ff082e8   Vivek Goyal   blkio: Fix anothe...
283
  static inline void blkiocg_set_start_empty_time(struct blkio_group *blkg) {}
2868ef7b3   Vivek Goyal   blkio: Some debug...
284
  #endif
67523c48a   Ben Blum   cgroups: blkio su...
285
  #if defined(CONFIG_BLK_CGROUP) || defined(CONFIG_BLK_CGROUP_MODULE)
31e4c28d9   Vivek Goyal   blkio: Introduce ...
286
287
  extern struct blkio_cgroup blkio_root_cgroup;
  extern struct blkio_cgroup *cgroup_to_blkio_cgroup(struct cgroup *cgroup);
70087dc38   Vivek Goyal   blk-throttle: Use...
288
  extern struct blkio_cgroup *task_blkio_cgroup(struct task_struct *tsk);
31e4c28d9   Vivek Goyal   blkio: Introduce ...
289
  extern void blkiocg_add_blkio_group(struct blkio_cgroup *blkcg,
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
290
291
  	struct blkio_group *blkg, void *key, dev_t dev,
  	enum blkio_policy_id plid);
5624a4e44   Vivek Goyal   blk-throttle: Mak...
292
  extern int blkio_alloc_blkg_stats(struct blkio_group *blkg);
31e4c28d9   Vivek Goyal   blkio: Introduce ...
293
294
295
  extern int blkiocg_del_blkio_group(struct blkio_group *blkg);
  extern struct blkio_group *blkiocg_lookup_group(struct blkio_cgroup *blkcg,
  						void *key);
303a3acb2   Divyesh Shah   blkio: Add io con...
296
  void blkiocg_update_timeslice_used(struct blkio_group *blkg,
167400d34   Justin TerAvest   blk-cgroup: Add u...
297
298
  					unsigned long time,
  					unsigned long unaccounted_time);
84c124da9   Divyesh Shah   blkio: Changes to...
299
300
301
302
  void blkiocg_update_dispatch_stats(struct blkio_group *blkg, uint64_t bytes,
  						bool direction, bool sync);
  void blkiocg_update_completion_stats(struct blkio_group *blkg,
  	uint64_t start_time, uint64_t io_start_time, bool direction, bool sync);
812d40264   Divyesh Shah   blkio: Add io_mer...
303
304
  void blkiocg_update_io_merged_stats(struct blkio_group *blkg, bool direction,
  					bool sync);
a11cdaa7a   Divyesh Shah   block: Update to ...
305
  void blkiocg_update_io_add_stats(struct blkio_group *blkg,
cdc1184cf   Divyesh Shah   blkio: Add io_que...
306
  		struct blkio_group *curr_blkg, bool direction, bool sync);
a11cdaa7a   Divyesh Shah   block: Update to ...
307
  void blkiocg_update_io_remove_stats(struct blkio_group *blkg,
cdc1184cf   Divyesh Shah   blkio: Add io_que...
308
  					bool direction, bool sync);
31e4c28d9   Vivek Goyal   blkio: Introduce ...
309
  #else
2f5ea4771   Jens Axboe   cfq-iosched: fix ...
310
  struct cgroup;
31e4c28d9   Vivek Goyal   blkio: Introduce ...
311
312
  static inline struct blkio_cgroup *
  cgroup_to_blkio_cgroup(struct cgroup *cgroup) { return NULL; }
70087dc38   Vivek Goyal   blk-throttle: Use...
313
314
  static inline struct blkio_cgroup *
  task_blkio_cgroup(struct task_struct *tsk) { return NULL; }
31e4c28d9   Vivek Goyal   blkio: Introduce ...
315
316
  
  static inline void blkiocg_add_blkio_group(struct blkio_cgroup *blkcg,
062a644d6   Vivek Goyal   blk-cgroup: Prepa...
317
318
  		struct blkio_group *blkg, void *key, dev_t dev,
  		enum blkio_policy_id plid) {}
31e4c28d9   Vivek Goyal   blkio: Introduce ...
319

5624a4e44   Vivek Goyal   blk-throttle: Mak...
320
  static inline int blkio_alloc_blkg_stats(struct blkio_group *blkg) { return 0; }
31e4c28d9   Vivek Goyal   blkio: Introduce ...
321
322
323
324
325
  static inline int
  blkiocg_del_blkio_group(struct blkio_group *blkg) { return 0; }
  
  static inline struct blkio_group *
  blkiocg_lookup_group(struct blkio_cgroup *blkcg, void *key) { return NULL; }
303a3acb2   Divyesh Shah   blkio: Add io con...
326
  static inline void blkiocg_update_timeslice_used(struct blkio_group *blkg,
167400d34   Justin TerAvest   blk-cgroup: Add u...
327
328
329
  						unsigned long time,
  						unsigned long unaccounted_time)
  {}
84c124da9   Divyesh Shah   blkio: Changes to...
330
331
332
333
334
  static inline void blkiocg_update_dispatch_stats(struct blkio_group *blkg,
  				uint64_t bytes, bool direction, bool sync) {}
  static inline void blkiocg_update_completion_stats(struct blkio_group *blkg,
  		uint64_t start_time, uint64_t io_start_time, bool direction,
  		bool sync) {}
812d40264   Divyesh Shah   blkio: Add io_mer...
335
336
  static inline void blkiocg_update_io_merged_stats(struct blkio_group *blkg,
  						bool direction, bool sync) {}
a11cdaa7a   Divyesh Shah   block: Update to ...
337
  static inline void blkiocg_update_io_add_stats(struct blkio_group *blkg,
cdc1184cf   Divyesh Shah   blkio: Add io_que...
338
  		struct blkio_group *curr_blkg, bool direction, bool sync) {}
a11cdaa7a   Divyesh Shah   block: Update to ...
339
  static inline void blkiocg_update_io_remove_stats(struct blkio_group *blkg,
cdc1184cf   Divyesh Shah   blkio: Add io_que...
340
  						bool direction, bool sync) {}
31e4c28d9   Vivek Goyal   blkio: Introduce ...
341
342
  #endif
  #endif /* _BLK_CGROUP_H */