blk-cgroup: move struct blkcg to block/blk-cgroup.h
authorChristoph Hellwig <hch@lst.de>
Wed, 20 Apr 2022 04:27:15 +0000 (06:27 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 2 May 2022 20:06:20 +0000 (14:06 -0600)
There is no real need to expose the blkcg structure to the whole kernel.
Move it to the private header an expose a helper to let the writeback
code access the cgwb_list member.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Tejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/20220420042723.1010598-8-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup.c
block/blk-cgroup.h
include/linux/backing-dev.h
include/linux/blk-cgroup.h
mm/backing-dev.c

index 3af0d4a..bb52797 100644 (file)
@@ -1005,6 +1005,13 @@ static struct cftype blkcg_legacy_files[] = {
        { }     /* terminate */
 };
 
+#ifdef CONFIG_CGROUP_WRITEBACK
+struct list_head *blkcg_get_cgwb_list(struct cgroup_subsys_state *css)
+{
+       return &css_to_blkcg(css)->cgwb_list;
+}
+#endif
+
 /*
  * blkcg destruction is a three-stage process.
  *
@@ -1112,7 +1119,7 @@ void blkcg_unpin_online(struct cgroup_subsys_state *blkcg_css)
 static void blkcg_css_offline(struct cgroup_subsys_state *css)
 {
        /* this prevents anyone from attaching or migrating to this blkcg */
-       wb_blkcg_offline(css_to_blkcg(css));
+       wb_blkcg_offline(css);
 
        /* put the base online pin allowing step 2 to be triggered */
        blkcg_unpin_online(css);
index 49e88fc..b00fb11 100644 (file)
 #include <linux/blk-cgroup.h>
 #include <linux/blk-mq.h>
 
+struct blkcg_gq;
+struct blkg_policy_data;
+
+
 /* percpu_counter batch for blkg_[rw]stats, per-cpu drift doesn't matter */
 #define BLKG_STAT_CPU_BATCH    (INT_MAX / 2)
 
 #ifdef CONFIG_BLK_CGROUP
+struct blkcg {
+       struct cgroup_subsys_state      css;
+       spinlock_t                      lock;
+       refcount_t                      online_pin;
+
+       struct radix_tree_root          blkg_tree;
+       struct blkcg_gq __rcu           *blkg_hint;
+       struct hlist_head               blkg_list;
+
+       struct blkcg_policy_data        *cpd[BLKCG_MAX_POLS];
+
+       struct list_head                all_blkcgs_node;
+#ifdef CONFIG_BLK_CGROUP_FC_APPID
+       char                            fc_app_id[FC_APPID_LEN];
+#endif
+#ifdef CONFIG_CGROUP_WRITEBACK
+       struct list_head                cgwb_list;
+#endif
+};
+
+static inline struct blkcg *css_to_blkcg(struct cgroup_subsys_state *css)
+{
+       return css ? container_of(css, struct blkcg, css) : NULL;
+}
 
 /*
  * A blkcg_gq (blkg) is association between a block cgroup (blkcg) and a
index 87ce24d..2bd073f 100644 (file)
@@ -17,8 +17,6 @@
 #include <linux/backing-dev-defs.h>
 #include <linux/slab.h>
 
-struct blkcg;
-
 static inline struct backing_dev_info *bdi_get(struct backing_dev_info *bdi)
 {
        kref_get(&bdi->refcnt);
@@ -154,7 +152,7 @@ struct bdi_writeback *wb_get_create(struct backing_dev_info *bdi,
                                    struct cgroup_subsys_state *memcg_css,
                                    gfp_t gfp);
 void wb_memcg_offline(struct mem_cgroup *memcg);
-void wb_blkcg_offline(struct blkcg *blkcg);
+void wb_blkcg_offline(struct cgroup_subsys_state *css);
 
 /**
  * inode_cgwb_enabled - test whether cgroup writeback is enabled on an inode
@@ -378,7 +376,7 @@ static inline void wb_memcg_offline(struct mem_cgroup *memcg)
 {
 }
 
-static inline void wb_blkcg_offline(struct blkcg *blkcg)
+static inline void wb_blkcg_offline(struct cgroup_subsys_state *css)
 {
 }
 
index 0fb7459..d7b1880 100644 (file)
@@ -37,29 +37,6 @@ enum blkg_iostat_type {
        BLKG_IOSTAT_NR,
 };
 
-struct blkcg_gq;
-struct blkg_policy_data;
-
-struct blkcg {
-       struct cgroup_subsys_state      css;
-       spinlock_t                      lock;
-       refcount_t                      online_pin;
-
-       struct radix_tree_root          blkg_tree;
-       struct blkcg_gq __rcu           *blkg_hint;
-       struct hlist_head               blkg_list;
-
-       struct blkcg_policy_data        *cpd[BLKCG_MAX_POLS];
-
-       struct list_head                all_blkcgs_node;
-#ifdef CONFIG_BLK_CGROUP_FC_APPID
-       char                            fc_app_id[FC_APPID_LEN];
-#endif
-#ifdef CONFIG_CGROUP_WRITEBACK
-       struct list_head                cgwb_list;
-#endif
-};
-
 struct blkg_iostat {
        u64                             bytes[BLKG_IOSTAT_NR];
        u64                             ios[BLKG_IOSTAT_NR];
@@ -114,11 +91,6 @@ extern struct cgroup_subsys_state * const blkcg_root_css;
 void blkcg_schedule_throttle(struct request_queue *q, bool use_memdelay);
 void blkcg_maybe_throttle_current(void);
 
-static inline struct blkcg *css_to_blkcg(struct cgroup_subsys_state *css)
-{
-       return css ? container_of(css, struct blkcg, css) : NULL;
-}
-
 /**
  * bio_blkcg - grab the blkcg associated with a bio
  * @bio: target bio
@@ -137,12 +109,10 @@ static inline struct blkcg *bio_blkcg(struct bio *bio)
 bool blk_cgroup_congested(void);
 void blkcg_pin_online(struct cgroup_subsys_state *blkcg_css);
 void blkcg_unpin_online(struct cgroup_subsys_state *blkcg_css);
+struct list_head *blkcg_get_cgwb_list(struct cgroup_subsys_state *css);
 
 #else  /* CONFIG_BLK_CGROUP */
 
-struct blkcg {
-};
-
 struct blkcg_gq {
 };
 
index 93cddbc..98f8f62 100644 (file)
@@ -445,7 +445,6 @@ static int cgwb_create(struct backing_dev_info *bdi,
 {
        struct mem_cgroup *memcg;
        struct cgroup_subsys_state *blkcg_css;
-       struct blkcg *blkcg;
        struct list_head *memcg_cgwb_list, *blkcg_cgwb_list;
        struct bdi_writeback *wb;
        unsigned long flags;
@@ -453,9 +452,8 @@ static int cgwb_create(struct backing_dev_info *bdi,
 
        memcg = mem_cgroup_from_css(memcg_css);
        blkcg_css = cgroup_get_e_css(memcg_css->cgroup, &io_cgrp_subsys);
-       blkcg = css_to_blkcg(blkcg_css);
        memcg_cgwb_list = &memcg->cgwb_list;
-       blkcg_cgwb_list = &blkcg->cgwb_list;
+       blkcg_cgwb_list = blkcg_get_cgwb_list(blkcg_css);
 
        /* look up again under lock and discard on blkcg mismatch */
        spin_lock_irqsave(&cgwb_lock, flags);
@@ -723,18 +721,19 @@ void wb_memcg_offline(struct mem_cgroup *memcg)
 
 /**
  * wb_blkcg_offline - kill all wb's associated with a blkcg being offlined
- * @blkcg: blkcg being offlined
+ * @css: blkcg being offlined
  *
  * Also prevents creation of any new wb's associated with @blkcg.
  */
-void wb_blkcg_offline(struct blkcg *blkcg)
+void wb_blkcg_offline(struct cgroup_subsys_state *css)
 {
        struct bdi_writeback *wb, *next;
+       struct list_head *list = blkcg_get_cgwb_list(css);
 
        spin_lock_irq(&cgwb_lock);
-       list_for_each_entry_safe(wb, next, &blkcg->cgwb_list, blkcg_node)
+       list_for_each_entry_safe(wb, next, list, blkcg_node)
                cgwb_kill(wb);
-       blkcg->cgwb_list.next = NULL;   /* prevent new wb's */
+       list->next = NULL;      /* prevent new wb's */
        spin_unlock_irq(&cgwb_lock);
 }