1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _BLK_CGROUP_H
3  #define _BLK_CGROUP_H
4  /*
5   * Common Block IO controller cgroup interface
6   *
7   * Based on ideas and code from CFQ, CFS and BFQ:
8   * Copyright (C) 2003 Jens Axboe <axboe@kernel.dk>
9   *
10   * Copyright (C) 2008 Fabio Checconi <fabio@gandalf.sssup.it>
11   *		      Paolo Valente <paolo.valente@unimore.it>
12   *
13   * Copyright (C) 2009 Vivek Goyal <vgoyal@redhat.com>
14   * 	              Nauman Rafique <nauman@google.com>
15   */
16  
17  #include <linux/types.h>
18  
19  struct bio;
20  struct cgroup_subsys_state;
21  struct gendisk;
22  
23  #define FC_APPID_LEN              129
24  
25  #ifdef CONFIG_BLK_CGROUP
26  extern struct cgroup_subsys_state * const blkcg_root_css;
27  
28  void blkcg_schedule_throttle(struct gendisk *disk, bool use_memdelay);
29  void blkcg_maybe_throttle_current(void);
30  bool blk_cgroup_congested(void);
31  void blkcg_pin_online(struct cgroup_subsys_state *blkcg_css);
32  void blkcg_unpin_online(struct cgroup_subsys_state *blkcg_css);
33  struct list_head *blkcg_get_cgwb_list(struct cgroup_subsys_state *css);
34  struct cgroup_subsys_state *bio_blkcg_css(struct bio *bio);
35  
36  #else	/* CONFIG_BLK_CGROUP */
37  
38  #define blkcg_root_css	((struct cgroup_subsys_state *)ERR_PTR(-EINVAL))
39  
blkcg_maybe_throttle_current(void)40  static inline void blkcg_maybe_throttle_current(void) { }
blk_cgroup_congested(void)41  static inline bool blk_cgroup_congested(void) { return false; }
bio_blkcg_css(struct bio * bio)42  static inline struct cgroup_subsys_state *bio_blkcg_css(struct bio *bio)
43  {
44  	return NULL;
45  }
46  #endif	/* CONFIG_BLK_CGROUP */
47  
48  int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len);
49  char *blkcg_get_fc_appid(struct bio *bio);
50  
51  #endif	/* _BLK_CGROUP_H */
52