All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: axboe@kernel.dk
Cc: linux-kernel@vger.kernel.org, lizefan@huawei.com,
	containers@lists.linux-foundation.org, cgroups@vger.kernel.org,
	vgoyal@redhat.com, Tejun Heo <tj@kernel.org>
Subject: [PATCH 17/31] blk-throttle: move bio_lists[] and friends to throtl_service_queue
Date: Wed,  1 May 2013 17:39:35 -0700	[thread overview]
Message-ID: <1367455189-6957-18-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1367455189-6957-1-git-send-email-tj@kernel.org>

throtl_service_queues will eventually form a tree which is anchored at
throtl_data->service_queue and queue bios will climb the tree to the
top service_queue to be executed.

This patch moves bio_lists[] and nr_queued[] from throtl_grp to its
service_queue to prepare for that.  As currently only the
throtl_data->service_queue is in use, this patch just ends up moving
throtl_grp->bio_lists[] and ->nr_queued[] to
throtl_grp->service_queue.bio_lists[] and ->nr_queued[] without making
any functional differences.

Signed-off-by: Tejun Heo <tj@kernel.org>
---
 block/blk-throttle.c | 63 ++++++++++++++++++++++++++++++++--------------------
 1 file changed, 39 insertions(+), 24 deletions(-)

diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index ee615af..bebe14b 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -27,6 +27,17 @@ static struct blkcg_policy blkcg_policy_throtl;
 static struct workqueue_struct *kthrotld_workqueue;
 
 struct throtl_service_queue {
+	/*
+	 * Bios queued directly to this service_queue or dispatched from
+	 * children throtl_grp's.
+	 */
+	struct bio_list		bio_lists[2];	/* queued bios [READ/WRITE] */
+	unsigned int		nr_queued[2];	/* number of queued bios */
+
+	/*
+	 * RB tree of active children throtl_grp's, which are sorted by
+	 * their ->disptime.
+	 */
 	struct rb_root		pending_tree;	/* RB tree of active tgs */
 	struct rb_node		*first_pending;	/* first node in the tree */
 	unsigned int		nr_pending;	/* # queued in the tree */
@@ -69,12 +80,6 @@ struct throtl_grp {
 
 	unsigned int flags;
 
-	/* Two lists for READ and WRITE */
-	struct bio_list bio_lists[2];
-
-	/* Number of queued bios on READ and WRITE lists */
-	unsigned int nr_queued[2];
-
 	/* bytes per second rate limits */
 	uint64_t bps[2];
 
@@ -193,6 +198,8 @@ alloc_stats:
 /* init a service_queue, assumes the caller zeroed it */
 static void throtl_service_queue_init(struct throtl_service_queue *sq)
 {
+	bio_list_init(&sq->bio_lists[0]);
+	bio_list_init(&sq->bio_lists[1]);
 	sq->pending_tree = RB_ROOT;
 }
 
@@ -204,8 +211,6 @@ static void throtl_pd_init(struct blkcg_gq *blkg)
 	throtl_service_queue_init(&tg->service_queue);
 	RB_CLEAR_NODE(&tg->rb_node);
 	tg->td = blkg->q->td;
-	bio_list_init(&tg->bio_lists[0]);
-	bio_list_init(&tg->bio_lists[1]);
 
 	tg->bps[READ] = -1;
 	tg->bps[WRITE] = -1;
@@ -624,7 +629,8 @@ static bool tg_may_dispatch(struct throtl_grp *tg, struct bio *bio,
 	 * this function with a different bio if there are other bios
 	 * queued.
 	 */
-	BUG_ON(tg->nr_queued[rw] && bio != bio_list_peek(&tg->bio_lists[rw]));
+	BUG_ON(tg->service_queue.nr_queued[rw] &&
+	       bio != bio_list_peek(&tg->service_queue.bio_lists[rw]));
 
 	/* If tg->bps = -1, then BW is unlimited */
 	if (tg->bps[rw] == -1 && tg->iops[rw] == -1) {
@@ -703,12 +709,13 @@ static void throtl_charge_bio(struct throtl_grp *tg, struct bio *bio)
 static void throtl_add_bio_tg(struct bio *bio, struct throtl_grp *tg,
 			      struct throtl_service_queue *parent_sq)
 {
+	struct throtl_service_queue *sq = &tg->service_queue;
 	bool rw = bio_data_dir(bio);
 
-	bio_list_add(&tg->bio_lists[rw], bio);
+	bio_list_add(&sq->bio_lists[rw], bio);
 	/* Take a bio reference on tg */
 	blkg_get(tg_to_blkg(tg));
-	tg->nr_queued[rw]++;
+	sq->nr_queued[rw]++;
 	tg->td->nr_queued[rw]++;
 	throtl_enqueue_tg(tg, parent_sq);
 }
@@ -716,13 +723,14 @@ static void throtl_add_bio_tg(struct bio *bio, struct throtl_grp *tg,
 static void tg_update_disptime(struct throtl_grp *tg,
 			       struct throtl_service_queue *parent_sq)
 {
+	struct throtl_service_queue *sq = &tg->service_queue;
 	unsigned long read_wait = -1, write_wait = -1, min_wait = -1, disptime;
 	struct bio *bio;
 
-	if ((bio = bio_list_peek(&tg->bio_lists[READ])))
+	if ((bio = bio_list_peek(&sq->bio_lists[READ])))
 		tg_may_dispatch(tg, bio, &read_wait);
 
-	if ((bio = bio_list_peek(&tg->bio_lists[WRITE])))
+	if ((bio = bio_list_peek(&sq->bio_lists[WRITE])))
 		tg_may_dispatch(tg, bio, &write_wait);
 
 	min_wait = min(read_wait, write_wait);
@@ -737,10 +745,11 @@ static void tg_update_disptime(struct throtl_grp *tg,
 static void tg_dispatch_one_bio(struct throtl_grp *tg, bool rw,
 				struct bio_list *bl)
 {
+	struct throtl_service_queue *sq = &tg->service_queue;
 	struct bio *bio;
 
-	bio = bio_list_pop(&tg->bio_lists[rw]);
-	tg->nr_queued[rw]--;
+	bio = bio_list_pop(&sq->bio_lists[rw]);
+	sq->nr_queued[rw]--;
 	/* Drop bio reference on blkg */
 	blkg_put(tg_to_blkg(tg));
 
@@ -756,6 +765,7 @@ static void tg_dispatch_one_bio(struct throtl_grp *tg, bool rw,
 
 static int throtl_dispatch_tg(struct throtl_grp *tg, struct bio_list *bl)
 {
+	struct throtl_service_queue *sq = &tg->service_queue;
 	unsigned int nr_reads = 0, nr_writes = 0;
 	unsigned int max_nr_reads = throtl_grp_quantum*3/4;
 	unsigned int max_nr_writes = throtl_grp_quantum - max_nr_reads;
@@ -763,7 +773,7 @@ static int throtl_dispatch_tg(struct throtl_grp *tg, struct bio_list *bl)
 
 	/* Try to dispatch 75% READS and 25% WRITES */
 
-	while ((bio = bio_list_peek(&tg->bio_lists[READ])) &&
+	while ((bio = bio_list_peek(&sq->bio_lists[READ])) &&
 	       tg_may_dispatch(tg, bio, NULL)) {
 
 		tg_dispatch_one_bio(tg, bio_data_dir(bio), bl);
@@ -773,7 +783,7 @@ static int throtl_dispatch_tg(struct throtl_grp *tg, struct bio_list *bl)
 			break;
 	}
 
-	while ((bio = bio_list_peek(&tg->bio_lists[WRITE])) &&
+	while ((bio = bio_list_peek(&sq->bio_lists[WRITE])) &&
 	       tg_may_dispatch(tg, bio, NULL)) {
 
 		tg_dispatch_one_bio(tg, bio_data_dir(bio), bl);
@@ -790,10 +800,10 @@ static int throtl_select_dispatch(struct throtl_service_queue *parent_sq,
 				  struct bio_list *bl)
 {
 	unsigned int nr_disp = 0;
-	struct throtl_grp *tg;
 
 	while (1) {
-		tg = throtl_rb_first(parent_sq);
+		struct throtl_grp *tg = throtl_rb_first(parent_sq);
+		struct throtl_service_queue *sq = &tg->service_queue;
 
 		if (!tg)
 			break;
@@ -805,7 +815,7 @@ static int throtl_select_dispatch(struct throtl_service_queue *parent_sq,
 
 		nr_disp += throtl_dispatch_tg(tg, bl);
 
-		if (tg->nr_queued[0] || tg->nr_queued[1])
+		if (sq->nr_queued[0] || sq->nr_queued[1])
 			tg_update_disptime(tg, parent_sq);
 
 		if (nr_disp >= throtl_quantum)
@@ -1046,6 +1056,7 @@ bool blk_throtl_bio(struct request_queue *q, struct bio *bio)
 {
 	struct throtl_data *td = q->td;
 	struct throtl_grp *tg;
+	struct throtl_service_queue *sq;
 	bool rw = bio_data_dir(bio), update_disptime = true;
 	struct blkcg *blkcg;
 	bool throttled = false;
@@ -1080,7 +1091,9 @@ bool blk_throtl_bio(struct request_queue *q, struct bio *bio)
 	if (unlikely(!tg))
 		goto out_unlock;
 
-	if (tg->nr_queued[rw]) {
+	sq = &tg->service_queue;
+
+	if (sq->nr_queued[rw]) {
 		/*
 		 * There is already another bio queued in same dir. No
 		 * need to update dispatch time.
@@ -1115,7 +1128,7 @@ queue_bio:
 			rw == READ ? 'R' : 'W',
 			tg->bytes_disp[rw], bio->bi_size, tg->bps[rw],
 			tg->io_disp[rw], tg->iops[rw],
-			tg->nr_queued[READ], tg->nr_queued[WRITE]);
+			sq->nr_queued[READ], sq->nr_queued[WRITE]);
 
 	bio_associate_current(bio);
 	throtl_add_bio_tg(bio, tg, &q->td->service_queue);
@@ -1154,11 +1167,13 @@ void blk_throtl_drain(struct request_queue *q)
 	bio_list_init(&bl);
 
 	while ((tg = throtl_rb_first(parent_sq))) {
+		struct throtl_service_queue *sq = &tg->service_queue;
+
 		throtl_dequeue_tg(tg, parent_sq);
 
-		while ((bio = bio_list_peek(&tg->bio_lists[READ])))
+		while ((bio = bio_list_peek(&sq->bio_lists[READ])))
 			tg_dispatch_one_bio(tg, bio_data_dir(bio), &bl);
-		while ((bio = bio_list_peek(&tg->bio_lists[WRITE])))
+		while ((bio = bio_list_peek(&sq->bio_lists[WRITE])))
 			tg_dispatch_one_bio(tg, bio_data_dir(bio), &bl);
 	}
 	spin_unlock_irq(q->queue_lock);
-- 
1.8.1.4

  parent reply	other threads:[~2013-05-02  0:39 UTC|newest]

Thread overview: 154+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-02  0:39 [PATCHSET] blk-throttle: implement proper hierarchy support Tejun Heo
2013-05-02  0:39 ` Tejun Heo
2013-05-02  0:39 ` [PATCH 11/31] blk-throttle: rename throtl_rb_root to throtl_service_queue Tejun Heo
2013-05-02  0:39 ` Tejun Heo [this message]
2013-05-02  0:39 ` [PATCH 20/31] blk-throttle: add throtl_service_queue->parent_sq Tejun Heo
2013-05-02  0:39 ` [PATCH 21/31] blk-throttle: implement sq_to_tg(), sq_to_td() and throtl_log() Tejun Heo
     [not found]   ` <1367455189-6957-22-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-06 17:36     ` Vivek Goyal
2013-05-06 17:36       ` Vivek Goyal
     [not found]       ` <20130506173644.GD11731-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-06 18:38         ` Tejun Heo
2013-05-06 18:38           ` Tejun Heo
2013-05-06 20:38         ` Tejun Heo
2013-05-06 20:38           ` Tejun Heo
     [not found]           ` <20130506203827.GE800-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-06 20:39             ` Tejun Heo
2013-05-06 20:39               ` Tejun Heo
2013-05-06 20:39             ` Tejun Heo
2013-05-06 20:41             ` Vivek Goyal
2013-05-06 20:41               ` Vivek Goyal
     [not found]               ` <20130506204141.GF11731-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-06 20:43                 ` Tejun Heo
2013-05-06 20:43                   ` Tejun Heo
2013-05-06 20:43                 ` Tejun Heo
2013-05-02  0:39 ` [PATCH 22/31] blk-throttle: set REQ_THROTTLED from throtl_charge_bio() and gate stats update with it Tejun Heo
2013-05-02  0:39 ` [PATCH 23/31] blk-throttle: separate out throtl_service_queue->pending_timer from throtl_data->dispatch_work Tejun Heo
2013-05-02  0:39 ` [PATCH 24/31] blk-throttle: implement dispatch looping Tejun Heo
2013-05-02  0:39 ` [PATCH 26/31] blk-throttle: make blk_throtl_drain() ready for hierarchy Tejun Heo
2013-05-02  0:39 ` [PATCH 27/31] blk-throttle: make blk_throtl_bio() " Tejun Heo
     [not found] ` <1367455189-6957-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-02  0:39   ` [PATCH 01/31] blkcg: fix error return path in blkg_create() Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 02/31] blkcg: move blkg_for_each_descendant_pre() to block/blk-cgroup.h Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 03/31] blkcg: implement blkg_for_each_descendant_post() Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 04/31] blkcg: invoke blkcg_policy->pd_init() after parent is linked Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 05/31] blkcg: move bulk of blkcg_gq release operations to the RCU callback Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 06/31] blk-throttle: remove spurious throtl_enqueue_tg() call from throtl_select_dispatch() Tejun Heo
2013-05-02  0:39   ` Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 07/31] blk-throttle: removed deferred config application mechanism Tejun Heo
2013-05-02  0:39     ` Tejun Heo
     [not found]     ` <1367455189-6957-8-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-02 14:49       ` Vivek Goyal
2013-05-02 14:49         ` Vivek Goyal
     [not found]         ` <20130502144912.GE30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 17:27           ` Tejun Heo
2013-05-02 17:27             ` Tejun Heo
2013-05-02  0:39   ` [PATCH 08/31] blk-throttle: collapse throtl_dispatch() into the work function Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 09/31] blk-throttle: relocate throtl_schedule_delayed_work() Tejun Heo
2013-05-02  0:39   ` Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 10/31] blk-throttle: remove pointless throtl_nr_queued() optimizations Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 11/31] blk-throttle: rename throtl_rb_root to throtl_service_queue Tejun Heo
2013-05-02  0:39   ` [PATCH 12/31] blk-throttle: simplify throtl_grp flag handling Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 13/31] blk-throttle: add backlink pointer from throtl_grp to throtl_data Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 14/31] blk-throttle: pass around throtl_service_queue instead of throtl_data Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 15/31] blk-throttle: reorganize throtl_service_queue passed around as argument Tejun Heo
2013-05-02  0:39     ` Tejun Heo
     [not found]     ` <1367455189-6957-16-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-02 15:21       ` Vivek Goyal
2013-05-02 15:21         ` Vivek Goyal
     [not found]         ` <20130502152148.GF30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 17:29           ` Tejun Heo
2013-05-02 17:29             ` Tejun Heo
2013-05-02  0:39   ` [PATCH 16/31] blk-throttle: add throtl_grp->service_queue Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 17/31] blk-throttle: move bio_lists[] and friends to throtl_service_queue Tejun Heo
2013-05-02  0:39   ` [PATCH 18/31] blk-throttle: dispatch to throtl_data->service_queue.bio_lists[] Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 19/31] blk-throttle: generalize update_disptime optimization in blk_throtl_bio() Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 20/31] blk-throttle: add throtl_service_queue->parent_sq Tejun Heo
2013-05-02  0:39   ` [PATCH 21/31] blk-throttle: implement sq_to_tg(), sq_to_td() and throtl_log() Tejun Heo
2013-05-02  0:39   ` [PATCH 22/31] blk-throttle: set REQ_THROTTLED from throtl_charge_bio() and gate stats update with it Tejun Heo
2013-05-02  0:39   ` [PATCH 23/31] blk-throttle: separate out throtl_service_queue->pending_timer from throtl_data->dispatch_work Tejun Heo
2013-05-02  0:39   ` [PATCH 24/31] blk-throttle: implement dispatch looping Tejun Heo
2013-05-02  0:39   ` [PATCH 25/31] blk-throttle: dispatch from throtl_pending_timer_fn() Tejun Heo
2013-05-02  0:39   ` Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` [PATCH 26/31] blk-throttle: make blk_throtl_drain() ready for hierarchy Tejun Heo
2013-05-02  0:39   ` [PATCH 27/31] blk-throttle: make blk_throtl_bio() " Tejun Heo
2013-05-02  0:39   ` [PATCH 28/31] blk-throttle: make tg_dispatch_one_bio() " Tejun Heo
2013-05-02  0:39     ` Tejun Heo
2013-05-02  0:39   ` Tejun Heo
2013-05-02  0:39   ` [PATCH 29/31] blk-throttle: make throtl_pending_timer_fn() " Tejun Heo
2013-05-02  0:39   ` [PATCH 30/31] blk-throttle: implement throtl_grp->has_rules[] Tejun Heo
2013-05-02  0:39   ` [PATCH 31/31] blk-throttle: implement proper hierarchy support Tejun Heo
2013-05-02 17:34   ` [PATCHSET] " Vivek Goyal
2013-05-02 17:34     ` Vivek Goyal
     [not found]     ` <20130502173428.GA4771-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 17:57       ` Tejun Heo
2013-05-02 17:57         ` Tejun Heo
     [not found]         ` <20130502175701.GL19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 18:17           ` Vivek Goyal
2013-05-02 18:17             ` Vivek Goyal
     [not found]             ` <20130502181747.GH30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 18:29               ` Tejun Heo
2013-05-02 18:29               ` Tejun Heo
2013-05-02 18:29                 ` Tejun Heo
     [not found]                 ` <20130502182933.GN19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 18:45                   ` Vivek Goyal
2013-05-02 18:45                     ` Vivek Goyal
     [not found]                     ` <20130502184514.GI30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 18:49                       ` Tejun Heo
2013-05-02 18:49                         ` Tejun Heo
     [not found]                         ` <20130502184953.GP19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 19:07                           ` Vivek Goyal
2013-05-02 19:07                             ` Vivek Goyal
     [not found]                             ` <20130502190732.GK30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 19:11                               ` Tejun Heo
2013-05-02 19:11                                 ` Tejun Heo
     [not found]                                 ` <CAOS58YOk7G=dBG1v5Ed2z3biMMyKkkutp30vH5XC72z0_Z85cw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-05-02 19:31                                   ` Vivek Goyal
2013-05-02 19:31                                     ` Vivek Goyal
     [not found]                                     ` <20130502193139.GL30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 23:13                                       ` Tejun Heo
2013-05-02 23:13                                         ` Tejun Heo
     [not found]                                         ` <20130502231307.GT19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-03 17:56                                           ` Vivek Goyal
2013-05-03 17:56                                           ` Vivek Goyal
2013-05-03 17:56                                             ` Vivek Goyal
     [not found]                                             ` <20130503175652.GB6062-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-03 18:57                                               ` Tejun Heo
2013-05-03 18:57                                               ` Tejun Heo
2013-05-03 18:57                                                 ` Tejun Heo
     [not found]                                                 ` <20130503185751.GA22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-03 18:58                                                   ` Tejun Heo
2013-05-03 18:58                                                     ` Tejun Heo
2013-05-03 18:58                                                   ` Tejun Heo
2013-05-03 19:08                                                   ` Vivek Goyal
2013-05-03 19:08                                                     ` Vivek Goyal
     [not found]                                                     ` <20130503190823.GC6062-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-03 19:14                                                       ` Tejun Heo
2013-05-03 19:14                                                       ` Tejun Heo
2013-05-03 19:14                                                         ` Tejun Heo
     [not found]                                                         ` <20130503191418.GC22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-03 19:26                                                           ` Vivek Goyal
2013-05-03 19:26                                                             ` Vivek Goyal
2013-05-03 21:05                                                           ` Vivek Goyal
2013-05-03 21:05                                                           ` Vivek Goyal
2013-05-03 21:05                                                             ` Vivek Goyal
     [not found]                                                             ` <20130503210513.GE6062-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-03 23:54                                                               ` Tejun Heo
2013-05-03 23:54                                                                 ` Tejun Heo
     [not found]                                                                 ` <20130503235455.GE22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-06 17:33                                                                   ` Vivek Goyal
2013-05-06 17:33                                                                     ` Vivek Goyal
2013-05-03 19:08                                                   ` Vivek Goyal
2013-05-02 19:31                                   ` Vivek Goyal
2013-05-02 18:49                       ` Tejun Heo
2013-05-02 17:57       ` Tejun Heo
2013-05-02 18:08       ` Vivek Goyal
2013-05-02 18:08         ` Vivek Goyal
     [not found]         ` <20130502180815.GG30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 18:44           ` Tejun Heo
2013-05-02 18:44             ` Tejun Heo
     [not found]             ` <20130502184426.GO19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 18:59               ` Vivek Goyal
2013-05-02 18:59                 ` Vivek Goyal
2013-05-02 18:59               ` Vivek Goyal
2013-05-04  0:50   ` [PATCH 29.5/32] blk-throttle: add throtl_qnode for dispatch fairness Tejun Heo
2013-05-04  0:50     ` Tejun Heo
     [not found]     ` <20130504005044.GF22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-04  0:53       ` Tejun Heo
2013-05-04  0:53         ` Tejun Heo
2013-05-06 16:00       ` Vivek Goyal
2013-05-06 16:00         ` Vivek Goyal
     [not found]         ` <20130506160006.GA11731-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-06 18:35           ` Tejun Heo
2013-05-06 18:35             ` Tejun Heo
2013-05-06 16:00       ` Vivek Goyal
2013-05-02  0:39 ` [PATCH 29/31] blk-throttle: make throtl_pending_timer_fn() ready for hierarchy Tejun Heo
2013-05-02  0:39 ` [PATCH 30/31] blk-throttle: implement throtl_grp->has_rules[] Tejun Heo
2013-05-02  0:39 ` [PATCH 31/31] blk-throttle: implement proper hierarchy support 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=1367455189-6957-18-git-send-email-tj@kernel.org \
    --to=tj@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=cgroups@vger.kernel.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=vgoyal@redhat.com \
    /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.