From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org
Cc: vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
ctalbott-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
rni-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Subject: [PATCH 6/8] blkcg: add request_queue->root_blkg
Date: Thu, 12 Apr 2012 16:29:38 -0700 [thread overview]
Message-ID: <1334273380-30233-7-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1334273380-30233-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
With per-queue policy activation, root blkg creation will be moved to
blkcg core. Add q->root_blkg in preparation. For blk-throtl, this
replaces throtl_data->root_tg; however, cfq needs to keep
cfqd->root_group for !CONFIG_CFQ_GROUP_IOSCHED.
This is to prepare for per-queue policy activation and doesn't cause
any functional difference.
Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Vivek Goyal <vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
block/blk-throttle.c | 16 ++++++++++------
block/cfq-iosched.c | 4 +++-
include/linux/blkdev.h | 2 ++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index 6f1bfdf..8c520fa 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -97,7 +97,6 @@ struct throtl_data
/* service tree for active throtl groups */
struct throtl_rb_root tg_service_tree;
- struct throtl_grp *root_tg;
struct request_queue *queue;
/* Total Number of queued bios on READ and WRITE lists */
@@ -131,6 +130,11 @@ static inline struct blkio_group *tg_to_blkg(struct throtl_grp *tg)
return pdata_to_blkg(tg);
}
+static inline struct throtl_grp *td_root_tg(struct throtl_data *td)
+{
+ return blkg_to_tg(td->queue->root_blkg);
+}
+
enum tg_state_flags {
THROTL_TG_FLAG_on_rr = 0, /* on round-robin busy list */
};
@@ -261,7 +265,7 @@ throtl_grp *throtl_lookup_tg(struct throtl_data *td, struct blkio_cgroup *blkcg)
* Avoid lookup in this case
*/
if (blkcg == &blkio_root_cgroup)
- return td->root_tg;
+ return td_root_tg(td);
return blkg_to_tg(blkg_lookup(blkcg, td->queue));
}
@@ -277,7 +281,7 @@ static struct throtl_grp *throtl_lookup_create_tg(struct throtl_data *td,
* Avoid lookup in this case
*/
if (blkcg == &blkio_root_cgroup) {
- tg = td->root_tg;
+ tg = td_root_tg(td);
} else {
struct blkio_group *blkg;
@@ -287,7 +291,7 @@ static struct throtl_grp *throtl_lookup_create_tg(struct throtl_data *td,
if (!IS_ERR(blkg))
tg = blkg_to_tg(blkg);
else if (!blk_queue_dead(q))
- tg = td->root_tg;
+ tg = td_root_tg(td);
}
return tg;
@@ -1245,12 +1249,12 @@ int blk_throtl_init(struct request_queue *q)
blkg = blkg_lookup_create(&blkio_root_cgroup, q, true);
if (!IS_ERR(blkg))
- td->root_tg = blkg_to_tg(blkg);
+ q->root_blkg = blkg;
spin_unlock_irq(q->queue_lock);
rcu_read_unlock();
- if (!td->root_tg) {
+ if (!q->root_blkg) {
kfree(td);
return -ENOMEM;
}
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 761a376..b70425f 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -3965,8 +3965,10 @@ static int cfq_init_queue(struct request_queue *q)
spin_lock_irq(q->queue_lock);
blkg = blkg_lookup_create(&blkio_root_cgroup, q, true);
- if (!IS_ERR(blkg))
+ if (!IS_ERR(blkg)) {
+ q->root_blkg = blkg;
cfqd->root_group = blkg_to_cfqg(blkg);
+ }
spin_unlock_irq(q->queue_lock);
rcu_read_unlock();
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index d2c69f8..b01c377 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -31,6 +31,7 @@ struct blk_trace;
struct request;
struct sg_io_hdr;
struct bsg_job;
+struct blkio_group;
#define BLKDEV_MIN_RQ 4
#define BLKDEV_MAX_RQ 128 /* Default maximum */
@@ -369,6 +370,7 @@ struct request_queue {
struct list_head icq_list;
#ifdef CONFIG_BLK_CGROUP
+ struct blkio_group *root_blkg;
struct list_head blkg_list;
#endif
--
1.7.7.3
WARNING: multiple messages have this Message-ID (diff)
From: Tejun Heo <tj@kernel.org>
To: axboe@kernel.dk
Cc: vgoyal@redhat.com, ctalbott@google.com, rni@google.com,
linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
containers@lists.linux-foundation.org, Tejun Heo <tj@kernel.org>
Subject: [PATCH 6/8] blkcg: add request_queue->root_blkg
Date: Thu, 12 Apr 2012 16:29:38 -0700 [thread overview]
Message-ID: <1334273380-30233-7-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1334273380-30233-1-git-send-email-tj@kernel.org>
With per-queue policy activation, root blkg creation will be moved to
blkcg core. Add q->root_blkg in preparation. For blk-throtl, this
replaces throtl_data->root_tg; however, cfq needs to keep
cfqd->root_group for !CONFIG_CFQ_GROUP_IOSCHED.
This is to prepare for per-queue policy activation and doesn't cause
any functional difference.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Vivek Goyal <vgoyal@redhat.com>
---
block/blk-throttle.c | 16 ++++++++++------
block/cfq-iosched.c | 4 +++-
include/linux/blkdev.h | 2 ++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index 6f1bfdf..8c520fa 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -97,7 +97,6 @@ struct throtl_data
/* service tree for active throtl groups */
struct throtl_rb_root tg_service_tree;
- struct throtl_grp *root_tg;
struct request_queue *queue;
/* Total Number of queued bios on READ and WRITE lists */
@@ -131,6 +130,11 @@ static inline struct blkio_group *tg_to_blkg(struct throtl_grp *tg)
return pdata_to_blkg(tg);
}
+static inline struct throtl_grp *td_root_tg(struct throtl_data *td)
+{
+ return blkg_to_tg(td->queue->root_blkg);
+}
+
enum tg_state_flags {
THROTL_TG_FLAG_on_rr = 0, /* on round-robin busy list */
};
@@ -261,7 +265,7 @@ throtl_grp *throtl_lookup_tg(struct throtl_data *td, struct blkio_cgroup *blkcg)
* Avoid lookup in this case
*/
if (blkcg == &blkio_root_cgroup)
- return td->root_tg;
+ return td_root_tg(td);
return blkg_to_tg(blkg_lookup(blkcg, td->queue));
}
@@ -277,7 +281,7 @@ static struct throtl_grp *throtl_lookup_create_tg(struct throtl_data *td,
* Avoid lookup in this case
*/
if (blkcg == &blkio_root_cgroup) {
- tg = td->root_tg;
+ tg = td_root_tg(td);
} else {
struct blkio_group *blkg;
@@ -287,7 +291,7 @@ static struct throtl_grp *throtl_lookup_create_tg(struct throtl_data *td,
if (!IS_ERR(blkg))
tg = blkg_to_tg(blkg);
else if (!blk_queue_dead(q))
- tg = td->root_tg;
+ tg = td_root_tg(td);
}
return tg;
@@ -1245,12 +1249,12 @@ int blk_throtl_init(struct request_queue *q)
blkg = blkg_lookup_create(&blkio_root_cgroup, q, true);
if (!IS_ERR(blkg))
- td->root_tg = blkg_to_tg(blkg);
+ q->root_blkg = blkg;
spin_unlock_irq(q->queue_lock);
rcu_read_unlock();
- if (!td->root_tg) {
+ if (!q->root_blkg) {
kfree(td);
return -ENOMEM;
}
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 761a376..b70425f 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -3965,8 +3965,10 @@ static int cfq_init_queue(struct request_queue *q)
spin_lock_irq(q->queue_lock);
blkg = blkg_lookup_create(&blkio_root_cgroup, q, true);
- if (!IS_ERR(blkg))
+ if (!IS_ERR(blkg)) {
+ q->root_blkg = blkg;
cfqd->root_group = blkg_to_cfqg(blkg);
+ }
spin_unlock_irq(q->queue_lock);
rcu_read_unlock();
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index d2c69f8..b01c377 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -31,6 +31,7 @@ struct blk_trace;
struct request;
struct sg_io_hdr;
struct bsg_job;
+struct blkio_group;
#define BLKDEV_MIN_RQ 4
#define BLKDEV_MAX_RQ 128 /* Default maximum */
@@ -369,6 +370,7 @@ struct request_queue {
struct list_head icq_list;
#ifdef CONFIG_BLK_CGROUP
+ struct blkio_group *root_blkg;
struct list_head blkg_list;
#endif
--
1.7.7.3
next prev parent reply other threads:[~2012-04-12 23:29 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-12 23:29 [PATCHSET] block: per-queue policy activation Tejun Heo
2012-04-12 23:29 ` Tejun Heo
[not found] ` <1334273380-30233-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-04-12 23:29 ` [PATCH 1/8] blkcg: kill blkio_list and replace blkio_list_lock with a mutex Tejun Heo
2012-04-12 23:29 ` Tejun Heo
[not found] ` <1334273380-30233-2-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-04-13 13:32 ` Vivek Goyal
2012-04-13 13:32 ` Vivek Goyal
[not found] ` <20120413133226.GB26383-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-13 16:55 ` Tejun Heo
2012-04-13 16:55 ` Tejun Heo
2012-04-13 16:55 ` Tejun Heo
2012-04-13 13:32 ` Vivek Goyal
2012-04-12 23:29 ` [PATCH 2/8] blkcg: use @pol instead of @plid in update_root_blkg_pd() and blkcg_print_blkgs() Tejun Heo
2012-04-12 23:29 ` Tejun Heo
2012-04-12 23:29 ` [PATCH 3/8] blkcg: remove static policy ID enums Tejun Heo
2012-04-12 23:29 ` Tejun Heo
2012-04-12 23:29 ` [PATCH 4/8] blkcg: make blkg_conf_prep() take @pol and return with queue lock held Tejun Heo
2012-04-12 23:29 ` Tejun Heo
2012-04-12 23:29 ` [PATCH 5/8] blkcg: make sure blkg_lookup() returns %NULL if @q is bypassing Tejun Heo
2012-04-12 23:29 ` Tejun Heo
[not found] ` <1334273380-30233-6-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-04-13 16:00 ` Vivek Goyal
2012-04-13 16:00 ` Vivek Goyal
[not found] ` <20120413160053.GE26383-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-13 17:03 ` Tejun Heo
2012-04-13 17:03 ` Tejun Heo
[not found] ` <20120413170334.GB12233-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-04-13 17:23 ` Vivek Goyal
2012-04-13 17:23 ` Vivek Goyal
2012-04-13 17:23 ` Vivek Goyal
[not found] ` <20120413172336.GF26383-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-13 17:28 ` Tejun Heo
2012-04-13 17:28 ` Tejun Heo
2012-04-13 17:28 ` Tejun Heo
2012-04-16 22:41 ` Paul E. McKenney
2012-04-16 22:41 ` Paul E. McKenney
2012-04-12 23:29 ` Tejun Heo [this message]
2012-04-12 23:29 ` [PATCH 6/8] blkcg: add request_queue->root_blkg Tejun Heo
2012-04-12 23:29 ` Tejun Heo
2012-04-12 23:29 ` [PATCH 7/8] blkcg: implement per-queue policy activation Tejun Heo
2012-04-12 23:29 ` Tejun Heo
[not found] ` <1334273380-30233-8-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-04-13 15:21 ` Vivek Goyal
2012-04-13 15:21 ` Vivek Goyal
2012-04-13 15:21 ` Vivek Goyal
[not found] ` <20120413152122.GC26383-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-13 15:23 ` Vivek Goyal
2012-04-13 15:23 ` Vivek Goyal
2012-04-13 15:23 ` Vivek Goyal
2012-04-13 18:12 ` Vivek Goyal
2012-04-13 18:12 ` Vivek Goyal
2012-04-13 18:12 ` Vivek Goyal
[not found] ` <20120413181257.GG26383-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-13 18:17 ` Tejun Heo
2012-04-13 18:17 ` Tejun Heo
2012-04-13 18:17 ` Tejun Heo
2012-04-12 23:29 ` [PATCH 8/8] blkcg: drop stuff unused after per-queue policy activation update Tejun Heo
2012-04-12 23:29 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1334273380-30233-7-git-send-email-tj@kernel.org \
--to=tj-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=ctalbott-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rni-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.