All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vivek Goyal <vgoyal@redhat.com>
To: linux-kernel@vger.kernel.org, jens.axboe@oracle.com
Cc: containers@lists.linux-foundation.org, dm-devel@redhat.com,
	nauman@google.com, dpshah@google.com, lizf@cn.fujitsu.com,
	mikew@google.com, fchecconi@gmail.com, paolo.valente@unimore.it,
	ryov@valinux.co.jp, fernando@oss.ntt.co.jp,
	s-uchida@ap.jp.nec.com, taka@valinux.co.jp,
	guijianfeng@cn.fujitsu.com, jmoyer@redhat.com,
	dhaval@linux.vnet.ibm.com, balbir@linux.vnet.ibm.com,
	righi.andrea@gmail.com, m-ikeda@ds.jp.nec.com, agk@redhat.com,
	vgoyal@redhat.com, akpm@linux-foundation.org,
	peterz@infradead.org, jmarchan@redhat.com,
	torvalds@linux-foundation.org, mingo@elte.hu, riel@redhat.com
Subject: [PATCH 25/28] io-controller: Per cgroup request descriptor support
Date: Thu, 24 Sep 2009 15:25:29 -0400	[thread overview]
Message-ID: <1253820332-10246-26-git-send-email-vgoyal@redhat.com> (raw)
In-Reply-To: <1253820332-10246-1-git-send-email-vgoyal@redhat.com>

o Currently a request queue has got fixed number of request descriptors for
  sync and async requests. Once the request descriptors are consumed, new
  processes are put to sleep and they effectively become serialized. Because
  sync and async queues are separate, async requests don't impact sync ones
  but if one is looking for fairness between async requests, that is not
  achievable if request queue descriptors become bottleneck.

o Make request descriptor's per io group so that if there is lots of IO
  going on in one cgroup, it does not impact the IO of other group.

o This patch implements the per cgroup request descriptors. request pool per
  queue is still common but every group will have its own wait list and its
  own count of request descriptors allocated to that group for sync and async
  queues. So effectively request_list becomes per io group property and not a
  global request queue feature.

o Currently one can define q->nr_requests to limit request descriptors
  allocated for the queue. Now there is another tunable q->nr_group_requests
  which controls the requests descriptr limit per group. q->nr_requests
  supercedes q->nr_group_requests to make sure if there are lots of groups
  present, we don't end up allocating too many request descriptors on the
  queue.

Signed-off-by: Nauman Rafique <nauman@google.com>
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Acked-by: Rik van Riel <riel@redhat.com>
---
 block/blk-core.c             |  323 +++++++++++++++++++++++++++++++++---------
 block/blk-settings.c         |    1 +
 block/blk-sysfs.c            |   59 ++++++--
 block/elevator-fq.c          |   36 +++++
 block/elevator-fq.h          |   29 ++++
 block/elevator.c             |    7 +-
 include/linux/blkdev.h       |   47 ++++++-
 include/trace/events/block.h |    6 +-
 kernel/trace/blktrace.c      |    6 +-
 9 files changed, 427 insertions(+), 87 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index 47cce59..a84dfb7 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -460,20 +460,53 @@ void blk_cleanup_queue(struct request_queue *q)
 }
 EXPORT_SYMBOL(blk_cleanup_queue);
 
-static int blk_init_free_list(struct request_queue *q)
+struct request_list *
+blk_get_request_list(struct request_queue *q, struct bio *bio)
+{
+#ifdef CONFIG_GROUP_IOSCHED
+	/*
+	 * Determine which request list bio will be allocated from. This
+	 * is dependent on which io group bio belongs to
+	 */
+	return elv_get_request_list_bio(q, bio);
+#else
+	return &q->rq;
+#endif
+}
+
+static struct request_list *rq_rl(struct request_queue *q, struct request *rq)
+{
+#ifdef CONFIG_GROUP_IOSCHED
+	int priv = rq->cmd_flags & REQ_ELVPRIV;
+
+	return elv_get_request_list_rq(q, rq, priv);
+#else
+	return &q->rq;
+#endif
+}
+
+void blk_init_request_list(struct request_list *rl)
 {
-	struct request_list *rl = &q->rq;
 
 	rl->count[BLK_RW_SYNC] = rl->count[BLK_RW_ASYNC] = 0;
-	rl->starved[BLK_RW_SYNC] = rl->starved[BLK_RW_ASYNC] = 0;
-	rl->elvpriv = 0;
 	init_waitqueue_head(&rl->wait[BLK_RW_SYNC]);
 	init_waitqueue_head(&rl->wait[BLK_RW_ASYNC]);
+}
 
-	rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab,
-				mempool_free_slab, request_cachep, q->node);
+static int blk_init_free_list(struct request_queue *q)
+{
+	/*
+	 * In case of group scheduling, request list is inside group and is
+	 * initialized when group is instanciated.
+	 */
+#ifndef CONFIG_GROUP_IOSCHED
+	blk_init_request_list(&q->rq);
+#endif
+	q->rq_data.rq_pool = mempool_create_node(BLKDEV_MIN_RQ,
+				mempool_alloc_slab, mempool_free_slab,
+				request_cachep, q->node);
 
-	if (!rl->rq_pool)
+	if (!q->rq_data.rq_pool)
 		return -ENOMEM;
 
 	return 0;
@@ -581,6 +614,9 @@ blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id)
 	q->queue_flags		= QUEUE_FLAG_DEFAULT;
 	q->queue_lock		= lock;
 
+	/* init starved waiter wait queue */
+	init_waitqueue_head(&q->rq_data.starved_wait);
+
 	/*
 	 * This also sets hw/phys segments, boundary and size
 	 */
@@ -615,14 +651,14 @@ static inline void blk_free_request(struct request_queue *q, struct request *rq)
 {
 	if (rq->cmd_flags & REQ_ELVPRIV)
 		elv_put_request(q, rq);
-	mempool_free(rq, q->rq.rq_pool);
+	mempool_free(rq, q->rq_data.rq_pool);
 }
 
 static struct request *
 blk_alloc_request(struct request_queue *q, struct bio *bio, int flags, int priv,
 					gfp_t gfp_mask)
 {
-	struct request *rq = mempool_alloc(q->rq.rq_pool, gfp_mask);
+	struct request *rq = mempool_alloc(q->rq_data.rq_pool, gfp_mask);
 
 	if (!rq)
 		return NULL;
@@ -633,7 +669,7 @@ blk_alloc_request(struct request_queue *q, struct bio *bio, int flags, int priv,
 
 	if (priv) {
 		if (unlikely(elv_set_request(q, rq, bio, gfp_mask))) {
-			mempool_free(rq, q->rq.rq_pool);
+			mempool_free(rq, q->rq_data.rq_pool);
 			return NULL;
 		}
 		rq->cmd_flags |= REQ_ELVPRIV;
@@ -676,18 +712,18 @@ static void ioc_set_batching(struct request_queue *q, struct io_context *ioc)
 	ioc->last_waited = jiffies;
 }
 
-static void __freed_request(struct request_queue *q, int sync)
+static void __freed_request(struct request_queue *q, int sync,
+					struct request_list *rl)
 {
-	struct request_list *rl = &q->rq;
-
-	if (rl->count[sync] < queue_congestion_off_threshold(q))
+	if (q->rq_data.count[sync] < queue_congestion_off_threshold(q))
 		blk_clear_queue_congested(q, sync);
 
-	if (rl->count[sync] + 1 <= q->nr_requests) {
+	if (q->rq_data.count[sync] + 1 <= q->nr_requests)
+		blk_clear_queue_full(q, sync);
+
+	if (rl->count[sync] + 1 <= q->nr_group_requests) {
 		if (waitqueue_active(&rl->wait[sync]))
 			wake_up(&rl->wait[sync]);
-
-		blk_clear_queue_full(q, sync);
 	}
 }
 
@@ -695,63 +731,130 @@ static void __freed_request(struct request_queue *q, int sync)
  * A request has just been released.  Account for it, update the full and
  * congestion status, wake up any waiters.   Called under q->queue_lock.
  */
-static void freed_request(struct request_queue *q, int sync, int priv)
+static void freed_request(struct request_queue *q, int sync, int priv,
+					struct request_list *rl)
 {
-	struct request_list *rl = &q->rq;
+	/*
+	 * There is a window during request allocation where request is
+	 * mapped to one group but by the time a queue for the group is
+	 * allocated, it is possible that original cgroup/io group has been
+	 * deleted and now io queue is allocated in a different group (root)
+	 * altogether.
+	 *
+	 * One solution to the problem is that rq should take io group
+	 * reference. But it looks too much to do that to solve this issue.
+	 * The only side affect to the hard to hit issue seems to be that
+	 * we will try to decrement the rl->count for a request list which
+	 * did not allocate that request. Chcek for rl->count going less than
+	 * zero and do not decrement it if that's the case.
+	 */
+
+	if (priv && rl->count[sync] > 0)
+		rl->count[sync]--;
+
+	BUG_ON(!q->rq_data.count[sync]);
+	q->rq_data.count[sync]--;
 
-	rl->count[sync]--;
 	if (priv)
-		rl->elvpriv--;
+		q->rq_data.elvpriv--;
 
-	__freed_request(q, sync);
+	__freed_request(q, sync, rl);
 
 	if (unlikely(rl->starved[sync ^ 1]))
-		__freed_request(q, sync ^ 1);
+		__freed_request(q, sync ^ 1, rl);
+
+	/* Wake up the starved process on global list, if any */
+	if (unlikely(q->rq_data.starved)) {
+		if (waitqueue_active(&q->rq_data.starved_wait))
+			wake_up(&q->rq_data.starved_wait);
+		q->rq_data.starved--;
+	}
+}
+
+/*
+ * Returns whether one can sleep on this request list or not. There are
+ * cases (elevator switch) where request list might not have allocated
+ * any request descriptor but we deny request allocation due to gloabl
+ * limits. In that case one should sleep on global list as on this request
+ * list no wakeup will take place.
+ *
+ * Also sets the request list starved flag if there are no requests pending
+ * in the direction of rq.
+ *
+ * Return 1 --> sleep on request list, 0 --> sleep on global list
+ */
+static int can_sleep_on_request_list(struct request_list *rl, int is_sync)
+{
+	if (unlikely(rl->count[is_sync] == 0)) {
+		/*
+		 * If there is a request pending in other direction
+		 * in same io group, then set the starved flag of
+		 * the group request list. Otherwise, we need to
+		 * make this process sleep in global starved list
+		 * to make sure it will not sleep indefinitely.
+		 */
+		if (rl->count[is_sync ^ 1] != 0) {
+			rl->starved[is_sync] = 1;
+			return 1;
+		} else
+			return 0;
+	}
+
+	return 1;
 }
 
 /*
  * Get a free request, queue_lock must be held.
- * Returns NULL on failure, with queue_lock held.
+ * Returns NULL on failure, with queue_lock held. Also sets the "reason" field
+ * in case of failure. This reason field helps caller decide to whether sleep
+ * on per group list or global per queue list.
+ * reason = 0 sleep on per group list
+ * reason = 1 sleep on global list
+ *
  * Returns !NULL on success, with queue_lock *not held*.
  */
 static struct request *get_request(struct request_queue *q, int rw_flags,
-				   struct bio *bio, gfp_t gfp_mask)
+					struct bio *bio, gfp_t gfp_mask,
+					struct request_list *rl, int *reason)
 {
 	struct request *rq = NULL;
-	struct request_list *rl = &q->rq;
 	struct io_context *ioc = NULL;
 	const bool is_sync = rw_is_sync(rw_flags) != 0;
 	int may_queue, priv;
+	int sleep_on_global = 0;
 
 	may_queue = elv_may_queue(q, rw_flags);
 	if (may_queue == ELV_MQUEUE_NO)
 		goto rq_starved;
 
-	if (rl->count[is_sync]+1 >= queue_congestion_on_threshold(q)) {
-		if (rl->count[is_sync]+1 >= q->nr_requests) {
-			ioc = current_io_context(GFP_ATOMIC, q->node);
-			/*
-			 * The queue will fill after this allocation, so set
-			 * it as full, and mark this process as "batching".
-			 * This process will be allowed to complete a batch of
-			 * requests, others will be blocked.
-			 */
-			if (!blk_queue_full(q, is_sync)) {
-				ioc_set_batching(q, ioc);
-				blk_set_queue_full(q, is_sync);
-			} else {
-				if (may_queue != ELV_MQUEUE_MUST
-						&& !ioc_batching(q, ioc)) {
-					/*
-					 * The queue is full and the allocating
-					 * process is not a "batcher", and not
-					 * exempted by the IO scheduler
-					 */
-					goto out;
-				}
+	if (q->rq_data.count[is_sync]+1 >= queue_congestion_on_threshold(q))
+		blk_set_queue_congested(q, is_sync);
+
+	/* queue full seems redundant now */
+	if (q->rq_data.count[is_sync]+1 >= q->nr_requests)
+		blk_set_queue_full(q, is_sync);
+
+	if (rl->count[is_sync]+1 >= q->nr_group_requests) {
+		ioc = current_io_context(GFP_ATOMIC, q->node);
+		/*
+		 * The queue request descriptor group will fill after this
+		 * allocation, so set it as full, and mark this process as
+		 * "batching". This process will be allowed to complete a
+		 * batch of requests, others will be blocked.
+		 */
+		if (rl->count[is_sync] <= q->nr_group_requests)
+			ioc_set_batching(q, ioc);
+		else {
+			if (may_queue != ELV_MQUEUE_MUST
+					&& !ioc_batching(q, ioc)) {
+				/*
+				 * The queue is full and the allocating
+				 * process is not a "batcher", and not
+				 * exempted by the IO scheduler
+				 */
+				goto out;
 			}
 		}
-		blk_set_queue_congested(q, is_sync);
 	}
 
 	/*
@@ -759,21 +862,60 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
 	 * limit of requests, otherwise we could have thousands of requests
 	 * allocated with any setting of ->nr_requests
 	 */
-	if (rl->count[is_sync] >= (3 * q->nr_requests / 2))
+
+	if (q->rq_data.count[is_sync] >= (3 * q->nr_requests / 2)) {
+		/*
+		 * Queue is too full for allocation. On which request queue
+		 * the task should sleep? Generally it should sleep on its
+		 * request list but if elevator switch is happening, in that
+		 * window, request descriptors are allocated from global
+		 * pool and are not accounted against any particular request
+		 * list as group is going away.
+		 *
+		 * So it might happen that request list does not have any
+		 * requests allocated at all and if process sleeps on per
+		 * group request list, it will not be woken up. In such case,
+		 * make it sleep on global starved list.
+		 */
+		if (test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags)
+		    || !can_sleep_on_request_list(rl, is_sync))
+			sleep_on_global = 1;
+		goto out;
+	}
+
+	/*
+	 * Allocation of request is allowed from queue perspective. Now check
+	 * from per group request list
+	 */
+
+	if (rl->count[is_sync] >= (3 * q->nr_group_requests / 2))
 		goto out;
 
-	rl->count[is_sync]++;
 	rl->starved[is_sync] = 0;
 
+	q->rq_data.count[is_sync]++;
+
 	priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
-	if (priv)
-		rl->elvpriv++;
+	if (priv) {
+		q->rq_data.elvpriv++;
+		/*
+		 * Account the request to request list only if request is
+		 * going to elevator. During elevator switch, there will
+		 * be small window where group is going away and new group
+		 * will not be allocated till elevator switch is complete.
+		 * So till then instead of slowing down the application,
+		 * we will continue to allocate request from total common
+		 * pool instead of per group limit
+		 */
+		rl->count[is_sync]++;
+	}
 
 	if (blk_queue_io_stat(q))
 		rw_flags |= REQ_IO_STAT;
 	spin_unlock_irq(q->queue_lock);
 
 	rq = blk_alloc_request(q, bio, rw_flags, priv, gfp_mask);
+
 	if (unlikely(!rq)) {
 		/*
 		 * Allocation failed presumably due to memory. Undo anything
@@ -783,7 +925,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
 		 * wait queue, but this is pretty rare.
 		 */
 		spin_lock_irq(q->queue_lock);
-		freed_request(q, is_sync, priv);
+		freed_request(q, is_sync, priv, rl);
 
 		/*
 		 * in the very unlikely event that allocation failed and no
@@ -793,9 +935,8 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
 		 * rq mempool into READ and WRITE
 		 */
 rq_starved:
-		if (unlikely(rl->count[is_sync] == 0))
-			rl->starved[is_sync] = 1;
-
+		if (!can_sleep_on_request_list(rl, is_sync))
+			sleep_on_global = 1;
 		goto out;
 	}
 
@@ -810,6 +951,8 @@ rq_starved:
 
 	trace_block_getrq(q, bio, rw_flags & 1);
 out:
+	if (reason && sleep_on_global)
+		*reason = 1;
 	return rq;
 }
 
@@ -823,16 +966,39 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
 					struct bio *bio)
 {
 	const bool is_sync = rw_is_sync(rw_flags) != 0;
+	int sleep_on_global = 0;
 	struct request *rq;
+	struct request_list *rl = blk_get_request_list(q, bio);
 
-	rq = get_request(q, rw_flags, bio, GFP_NOIO);
+	rq = get_request(q, rw_flags, bio, GFP_NOIO, rl, &sleep_on_global);
 	while (!rq) {
 		DEFINE_WAIT(wait);
 		struct io_context *ioc;
-		struct request_list *rl = &q->rq;
 
-		prepare_to_wait_exclusive(&rl->wait[is_sync], &wait,
-				TASK_UNINTERRUPTIBLE);
+		if (sleep_on_global) {
+			/*
+			 * Task failed allocation and needs to wait and
+			 * try again. There are no requests pending from
+			 * the io group hence need to sleep on global
+			 * wait queue. Most likely the allocation failed
+			 * because of memory issues.
+			 */
+
+			q->rq_data.starved++;
+			prepare_to_wait_exclusive(&q->rq_data.starved_wait,
+					&wait, TASK_UNINTERRUPTIBLE);
+		} else {
+			/*
+			 * We are about to sleep on a request list and we
+			 * drop queue lock. After waking up, we will do
+			 * finish_wait() on request list and in the mean
+			 * time group might be gone. Take a reference to
+			 * the group now.
+			 */
+			prepare_to_wait_exclusive(&rl->wait[is_sync], &wait,
+					TASK_UNINTERRUPTIBLE);
+			elv_get_rl_iog(rl);
+		}
 
 		trace_block_sleeprq(q, bio, rw_flags & 1);
 
@@ -850,9 +1016,25 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
 		ioc_set_batching(q, ioc);
 
 		spin_lock_irq(q->queue_lock);
-		finish_wait(&rl->wait[is_sync], &wait);
 
-		rq = get_request(q, rw_flags, bio, GFP_NOIO);
+		if (sleep_on_global) {
+			finish_wait(&q->rq_data.starved_wait, &wait);
+			sleep_on_global = 0;
+		} else {
+			/*
+			 * We had taken a reference to the rl/iog. Put that now
+			 */
+			finish_wait(&rl->wait[is_sync], &wait);
+			elv_put_rl_iog(rl);
+		}
+
+		/*
+		 * After the sleep check the rl again in case cgrop bio
+		 * belonged to is gone and it is mapped to root group now
+		 */
+		rl = blk_get_request_list(q, bio);
+		rq = get_request(q, rw_flags, bio, GFP_NOIO, rl,
+					&sleep_on_global);
 	};
 
 	return rq;
@@ -861,14 +1043,16 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
 struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask)
 {
 	struct request *rq;
+	struct request_list *rl;
 
 	BUG_ON(rw != READ && rw != WRITE);
 
 	spin_lock_irq(q->queue_lock);
+	rl = blk_get_request_list(q, NULL);
 	if (gfp_mask & __GFP_WAIT) {
 		rq = get_request_wait(q, rw, NULL);
 	} else {
-		rq = get_request(q, rw, NULL, gfp_mask);
+		rq = get_request(q, rw, NULL, gfp_mask, rl, NULL);
 		if (!rq)
 			spin_unlock_irq(q->queue_lock);
 	}
@@ -1085,12 +1269,19 @@ void __blk_put_request(struct request_queue *q, struct request *req)
 	if (req->cmd_flags & REQ_ALLOCED) {
 		int is_sync = rq_is_sync(req) != 0;
 		int priv = req->cmd_flags & REQ_ELVPRIV;
+		struct request_list *rl = rq_rl(q, req);
 
 		BUG_ON(!list_empty(&req->queuelist));
 		BUG_ON(!hlist_unhashed(&req->hash));
 
+		/*
+		 * Call freed request before actually freeing the request
+		 * freeing the request might cause freeing up of io queue, and
+		 * in turn io group. That mean rl pointer will no more be
+		 * valid.
+		 */
+		freed_request(q, is_sync, priv, rl);
 		blk_free_request(q, req);
-		freed_request(q, is_sync, priv);
 	}
 }
 EXPORT_SYMBOL_GPL(__blk_put_request);
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 476d870..c3102c7 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -149,6 +149,7 @@ void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn)
 	 * set defaults
 	 */
 	q->nr_requests = BLKDEV_MAX_RQ;
+	q->nr_group_requests = BLKDEV_MAX_GROUP_RQ;
 
 	q->make_request_fn = mfn;
 	blk_queue_dma_alignment(q, 511);
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index d3aa2aa..0ddf245 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -38,42 +38,67 @@ static ssize_t queue_requests_show(struct request_queue *q, char *page)
 static ssize_t
 queue_requests_store(struct request_queue *q, const char *page, size_t count)
 {
-	struct request_list *rl = &q->rq;
+	struct request_list *rl;
 	unsigned long nr;
 	int ret = queue_var_store(&nr, page, count);
 	if (nr < BLKDEV_MIN_RQ)
 		nr = BLKDEV_MIN_RQ;
 
 	spin_lock_irq(q->queue_lock);
+	rl = blk_get_request_list(q, NULL);
 	q->nr_requests = nr;
 	blk_queue_congestion_threshold(q);
 
-	if (rl->count[BLK_RW_SYNC] >= queue_congestion_on_threshold(q))
+	if (q->rq_data.count[BLK_RW_SYNC] >= queue_congestion_on_threshold(q))
 		blk_set_queue_congested(q, BLK_RW_SYNC);
-	else if (rl->count[BLK_RW_SYNC] < queue_congestion_off_threshold(q))
+	else if (q->rq_data.count[BLK_RW_SYNC] <
+				queue_congestion_off_threshold(q))
 		blk_clear_queue_congested(q, BLK_RW_SYNC);
 
-	if (rl->count[BLK_RW_ASYNC] >= queue_congestion_on_threshold(q))
+	if (q->rq_data.count[BLK_RW_ASYNC] >= queue_congestion_on_threshold(q))
 		blk_set_queue_congested(q, BLK_RW_ASYNC);
-	else if (rl->count[BLK_RW_ASYNC] < queue_congestion_off_threshold(q))
+	else if (q->rq_data.count[BLK_RW_ASYNC] <
+				queue_congestion_off_threshold(q))
 		blk_clear_queue_congested(q, BLK_RW_ASYNC);
 
-	if (rl->count[BLK_RW_SYNC] >= q->nr_requests) {
+	if (q->rq_data.count[BLK_RW_SYNC] >= q->nr_requests) {
 		blk_set_queue_full(q, BLK_RW_SYNC);
-	} else if (rl->count[BLK_RW_SYNC]+1 <= q->nr_requests) {
+	} else if (q->rq_data.count[BLK_RW_SYNC]+1 <= q->nr_requests) {
 		blk_clear_queue_full(q, BLK_RW_SYNC);
 		wake_up(&rl->wait[BLK_RW_SYNC]);
 	}
 
-	if (rl->count[BLK_RW_ASYNC] >= q->nr_requests) {
+	if (q->rq_data.count[BLK_RW_ASYNC] >= q->nr_requests) {
 		blk_set_queue_full(q, BLK_RW_ASYNC);
-	} else if (rl->count[BLK_RW_ASYNC]+1 <= q->nr_requests) {
+	} else if (q->rq_data.count[BLK_RW_ASYNC]+1 <= q->nr_requests) {
 		blk_clear_queue_full(q, BLK_RW_ASYNC);
 		wake_up(&rl->wait[BLK_RW_ASYNC]);
 	}
 	spin_unlock_irq(q->queue_lock);
 	return ret;
 }
+#ifdef CONFIG_GROUP_IOSCHED
+static ssize_t queue_group_requests_show(struct request_queue *q, char *page)
+{
+	return queue_var_show(q->nr_group_requests, (page));
+}
+
+static ssize_t
+queue_group_requests_store(struct request_queue *q, const char *page,
+					size_t count)
+{
+	unsigned long nr;
+	int ret = queue_var_store(&nr, page, count);
+
+	if (nr < BLKDEV_MIN_RQ)
+		nr = BLKDEV_MIN_RQ;
+
+	spin_lock_irq(q->queue_lock);
+	q->nr_group_requests = nr;
+	spin_unlock_irq(q->queue_lock);
+	return ret;
+}
+#endif
 
 static ssize_t queue_ra_show(struct request_queue *q, char *page)
 {
@@ -240,6 +265,14 @@ static struct queue_sysfs_entry queue_requests_entry = {
 	.store = queue_requests_store,
 };
 
+#ifdef CONFIG_GROUP_IOSCHED
+static struct queue_sysfs_entry queue_group_requests_entry = {
+	.attr = {.name = "nr_group_requests", .mode = S_IRUGO | S_IWUSR },
+	.show = queue_group_requests_show,
+	.store = queue_group_requests_store,
+};
+#endif
+
 static struct queue_sysfs_entry queue_ra_entry = {
 	.attr = {.name = "read_ahead_kb", .mode = S_IRUGO | S_IWUSR },
 	.show = queue_ra_show,
@@ -314,6 +347,9 @@ static struct queue_sysfs_entry queue_iostats_entry = {
 
 static struct attribute *default_attrs[] = {
 	&queue_requests_entry.attr,
+#ifdef CONFIG_GROUP_IOSCHED
+	&queue_group_requests_entry.attr,
+#endif
 	&queue_ra_entry.attr,
 	&queue_max_hw_sectors_entry.attr,
 	&queue_max_sectors_entry.attr,
@@ -393,12 +429,11 @@ static void blk_release_queue(struct kobject *kobj)
 {
 	struct request_queue *q =
 		container_of(kobj, struct request_queue, kobj);
-	struct request_list *rl = &q->rq;
 
 	blk_sync_queue(q);
 
-	if (rl->rq_pool)
-		mempool_destroy(rl->rq_pool);
+	if (q->rq_data.rq_pool)
+		mempool_destroy(q->rq_data.rq_pool);
 
 	if (q->queue_tags)
 		__blk_queue_free_tags(q);
diff --git a/block/elevator-fq.c b/block/elevator-fq.c
index 3089175..5ecc519 100644
--- a/block/elevator-fq.c
+++ b/block/elevator-fq.c
@@ -1245,6 +1245,39 @@ static struct io_cgroup *cgroup_to_io_cgroup(struct cgroup *cgroup)
 			    struct io_cgroup, css);
 }
 
+struct request_list *
+elv_get_request_list_bio(struct request_queue *q, struct bio *bio)
+{
+	struct io_group *iog;
+
+	if (!elv_iosched_fair_queuing_enabled(q->elevator))
+		iog = q->elevator->efqd->root_group;
+	else
+		iog = elv_io_get_io_group_bio(q, bio, 1);
+
+	BUG_ON(!iog);
+	return &iog->rl;
+}
+
+struct request_list *
+elv_get_request_list_rq(struct request_queue *q, struct request *rq, int priv)
+{
+	struct io_group *iog;
+
+	if (!elv_iosched_fair_queuing_enabled(q->elevator))
+		return &q->elevator->efqd->root_group->rl;
+
+	BUG_ON(priv && !rq->ioq);
+
+	if (priv)
+		iog = ioq_to_io_group(rq->ioq);
+	else
+		iog = q->elevator->efqd->root_group;
+
+	BUG_ON(!iog);
+	return &iog->rl;
+}
+
 /*
  * Search the io_group for efqd into the hash table (by now only a list)
  * of bgrp.  Must be called under rcu_read_lock().
@@ -1601,6 +1634,8 @@ io_group_chain_alloc(struct request_queue *q, void *key, struct cgroup *cgroup)
 		elv_get_iog(iog);
 		io_group_path(iog);
 
+		blk_init_request_list(&iog->rl);
+
 		if (leaf == NULL) {
 			leaf = iog;
 			prev = leaf;
@@ -1830,6 +1865,7 @@ static struct io_group *io_alloc_root_group(struct request_queue *q,
 	for (i = 0; i < IO_IOPRIO_CLASSES; i++)
 		iog->sched_data.service_tree[i] = ELV_SERVICE_TREE_INIT;
 
+	blk_init_request_list(&iog->rl);
 	spin_lock_irq(&iocg->lock);
 	rcu_assign_pointer(iog->key, key);
 	hlist_add_head_rcu(&iog->group_node, &iocg->group_data);
diff --git a/block/elevator-fq.h b/block/elevator-fq.h
index be66d28..c9ea0a1 100644
--- a/block/elevator-fq.h
+++ b/block/elevator-fq.h
@@ -140,6 +140,9 @@ struct io_group {
 
 	/* Single ioq per group, used for noop, deadline, anticipatory */
 	struct io_queue *ioq;
+
+	/* request list associated with the group */
+	struct request_list rl;
 };
 
 struct io_cgroup {
@@ -440,11 +443,31 @@ static inline void elv_get_iog(struct io_group *iog)
 	atomic_inc(&iog->ref);
 }
 
+static inline struct io_group *rl_iog(struct request_list *rl)
+{
+	return container_of(rl, struct io_group, rl);
+}
+
+static inline void elv_get_rl_iog(struct request_list *rl)
+{
+	elv_get_iog(rl_iog(rl));
+}
+
+static inline void elv_put_rl_iog(struct request_list *rl)
+{
+	elv_put_iog(rl_iog(rl));
+}
+
 extern int elv_set_request_ioq(struct request_queue *q, struct request *rq,
 					struct bio *bio, gfp_t gfp_mask);
 extern void elv_reset_request_ioq(struct request_queue *q, struct request *rq);
 extern struct io_queue *elv_lookup_ioq_bio(struct request_queue *q,
 						struct bio *bio);
+struct request_list *
+elv_get_request_list_bio(struct request_queue *q, struct bio *bio);
+
+struct request_list *
+elv_get_request_list_rq(struct request_queue *q, struct request *rq, int priv);
 
 #else /* !GROUP_IOSCHED */
 
@@ -484,6 +507,9 @@ elv_lookup_ioq_bio(struct request_queue *q, struct bio *bio)
 	return NULL;
 }
 
+static inline void elv_get_rl_iog(struct request_list *rl) { }
+static inline void elv_put_rl_iog(struct request_list *rl) { }
+
 #endif /* GROUP_IOSCHED */
 
 extern ssize_t elv_slice_sync_show(struct elevator_queue *q, char *name);
@@ -594,6 +620,9 @@ static inline struct io_queue *elv_lookup_ioq_bio(struct request_queue *q,
 	return NULL;
 }
 
+static inline void elv_get_rl_iog(struct request_list *rl) { }
+static inline void elv_put_rl_iog(struct request_list *rl) { }
+
 #endif /* CONFIG_ELV_FAIR_QUEUING */
 #endif /* _ELV_SCHED_H */
 #endif /* CONFIG_BLOCK */
diff --git a/block/elevator.c b/block/elevator.c
index 4ed37b6..b23db03 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -678,7 +678,7 @@ void elv_quiesce_start(struct request_queue *q)
 	 * make sure we don't have any requests in flight
 	 */
 	elv_drain_elevator(q);
-	while (q->rq.elvpriv) {
+	while (q->rq_data.elvpriv) {
 		__blk_run_queue(q);
 		spin_unlock_irq(q->queue_lock);
 		msleep(10);
@@ -777,8 +777,9 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
 	}
 
 	if (unplug_it && blk_queue_plugged(q)) {
-		int nrq = q->rq.count[BLK_RW_SYNC] + q->rq.count[BLK_RW_ASYNC]
-				- queue_in_flight(q);
+		int nrq = q->rq_data.count[BLK_RW_SYNC] +
+				q->rq_data.count[BLK_RW_ASYNC] -
+				queue_in_flight(q);
 
 		if (nrq >= q->unplug_thresh)
 			__generic_unplug_device(q);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 7cff5f2..74deb17 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -32,21 +32,51 @@ struct request;
 struct sg_io_hdr;
 
 #define BLKDEV_MIN_RQ	4
+
+#ifdef CONFIG_GROUP_IOSCHED
+#define BLKDEV_MAX_RQ	512	/* Default maximum for queue */
+#define BLKDEV_MAX_GROUP_RQ    128      /* Default maximum per group*/
+#else
 #define BLKDEV_MAX_RQ	128	/* Default maximum */
+/*
+ * This is eqivalent to case of only one group present (root group). Let
+ * it consume all the request descriptors available on the queue .
+ */
+#define BLKDEV_MAX_GROUP_RQ    BLKDEV_MAX_RQ      /* Default maximum */
+#endif
 
 struct request;
 typedef void (rq_end_io_fn)(struct request *, int);
 
 struct request_list {
 	/*
-	 * count[], starved[], and wait[] are indexed by
+	 * count[], starved and wait[] are indexed by
 	 * BLK_RW_SYNC/BLK_RW_ASYNC
 	 */
 	int count[2];
 	int starved[2];
+	wait_queue_head_t wait[2];
+};
+
+/*
+ * This data structures keeps track of mempool of requests for the queue
+ * and some overall statistics.
+ */
+struct request_data {
+	/*
+	 * Per queue request descriptor count. This is in addition to per
+	 * cgroup count
+	 */
+	int count[2];
 	int elvpriv;
 	mempool_t *rq_pool;
-	wait_queue_head_t wait[2];
+	int starved;
+	/*
+	 * Global list for starved tasks. A task will be queued here if
+	 * it could not allocate request descriptor and the associated
+	 * group request list does not have any requests pending.
+	 */
+	wait_queue_head_t starved_wait;
 };
 
 /*
@@ -339,10 +369,17 @@ struct request_queue
 	struct request		*last_merge;
 	struct elevator_queue	*elevator;
 
+#ifndef CONFIG_GROUP_IOSCHED
 	/*
 	 * the queue request freelist, one for reads and one for writes
+	 * In case of group io scheduling, this request list is per group
+	 * and is present in group data structure.
 	 */
 	struct request_list	rq;
+#endif
+
+	/* Contains request pool and other data like starved data */
+	struct request_data	rq_data;
 
 	request_fn_proc		*request_fn;
 	make_request_fn		*make_request_fn;
@@ -405,6 +442,8 @@ struct request_queue
 	 * queue settings
 	 */
 	unsigned long		nr_requests;	/* Max # of requests */
+	/* Max # of per io group requests */
+	unsigned long		nr_group_requests;
 	unsigned int		nr_congestion_on;
 	unsigned int		nr_congestion_off;
 	unsigned int		nr_batching;
@@ -784,6 +823,10 @@ extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 			 struct scsi_ioctl_command __user *);
 
+extern void blk_init_request_list(struct request_list *rl);
+
+extern struct request_list *blk_get_request_list(struct request_queue *q,
+							struct bio *bio);
 /*
  * A queue has just exitted congestion.  Note this in the global counter of
  * congested queues, and wake up anyone who was waiting for requests to be
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index 9a74b46..af6c9e5 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -397,7 +397,8 @@ TRACE_EVENT(block_unplug_timer,
 	),
 
 	TP_fast_assign(
-		__entry->nr_rq	= q->rq.count[READ] + q->rq.count[WRITE];
+		__entry->nr_rq	= q->rq_data.count[READ] +
+					q->rq_data.count[WRITE];
 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
 	),
 
@@ -416,7 +417,8 @@ TRACE_EVENT(block_unplug_io,
 	),
 
 	TP_fast_assign(
-		__entry->nr_rq	= q->rq.count[READ] + q->rq.count[WRITE];
+		__entry->nr_rq	= q->rq_data.count[READ] +
+					q->rq_data.count[WRITE];
 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
 	),
 
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 7a34cb5..9a03980 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -786,7 +786,8 @@ static void blk_add_trace_unplug_io(struct request_queue *q)
 	struct blk_trace *bt = q->blk_trace;
 
 	if (bt) {
-		unsigned int pdu = q->rq.count[READ] + q->rq.count[WRITE];
+		unsigned int pdu = q->rq_data.count[READ] +
+					q->rq_data.count[WRITE];
 		__be64 rpdu = cpu_to_be64(pdu);
 
 		__blk_add_trace(bt, 0, 0, 0, BLK_TA_UNPLUG_IO, 0,
@@ -799,7 +800,8 @@ static void blk_add_trace_unplug_timer(struct request_queue *q)
 	struct blk_trace *bt = q->blk_trace;
 
 	if (bt) {
-		unsigned int pdu = q->rq.count[READ] + q->rq.count[WRITE];
+		unsigned int pdu = q->rq_data.count[READ] +
+					q->rq_data.count[WRITE];
 		__be64 rpdu = cpu_to_be64(pdu);
 
 		__blk_add_trace(bt, 0, 0, 0, BLK_TA_UNPLUG_TIMER, 0,
-- 
1.6.0.6


  parent reply	other threads:[~2009-09-24 19:28 UTC|newest]

Thread overview: 431+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-24 19:25 IO scheduler based IO controller V10 Vivek Goyal
2009-09-24 19:25 ` [PATCH 01/28] io-controller: Documentation Vivek Goyal
2009-09-24 19:25 ` [PATCH 02/28] io-controller: Core of the elevator fair queuing Vivek Goyal
2009-09-24 19:25 ` [PATCH 03/28] io-controller: Keep a cache of recently expired queues Vivek Goyal
2009-09-24 19:25 ` [PATCH 04/28] io-controller: Common flat fair queuing code in elevaotor layer Vivek Goyal
2009-09-24 19:25 ` [PATCH 05/28] io-controller: Modify cfq to make use of flat elevator fair queuing Vivek Goyal
2009-09-24 19:25 ` [PATCH 06/28] io-controller: Core scheduler changes to support hierarhical scheduling Vivek Goyal
2009-09-24 19:25 ` [PATCH 07/28] io-controller: cgroup related changes for hierarchical group support Vivek Goyal
2009-09-24 19:25 ` [PATCH 08/28] io-controller: Common hierarchical fair queuing code in elevaotor layer Vivek Goyal
2009-09-24 19:25 ` [PATCH 09/28] io-controller: cfq changes to use " Vivek Goyal
2009-09-24 19:25 ` [PATCH 10/28] io-controller: Export disk time used and nr sectors dipatched through cgroups Vivek Goyal
2009-09-24 19:25 ` [PATCH 11/28] io-controller: Debug hierarchical IO scheduling Vivek Goyal
2009-09-24 19:25 ` [PATCH 12/28] io-controller: Introduce group idling Vivek Goyal
2009-09-24 19:25 ` [PATCH 13/28] io-controller: Implement wait busy for io queues Vivek Goyal
2009-09-24 19:25 ` [PATCH 14/28] io-controller: Keep track of late preemptions Vivek Goyal
2009-09-24 19:25 ` [PATCH 15/28] io-controller: Allow CFQ specific extra preemptions Vivek Goyal
2009-09-25  6:24   ` Gui Jianfeng
2009-09-25  6:24     ` Gui Jianfeng
     [not found]   ` <1253820332-10246-16-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-25  6:24     ` Gui Jianfeng
2009-09-24 19:25 ` [PATCH 16/28] io-controller: Wait for requests to complete from last queue before new queue is scheduled Vivek Goyal
2009-09-24 19:25 ` [PATCH 17/28] io-controller: Separate out queue and data Vivek Goyal
2009-09-24 19:25 ` [PATCH 18/28] io-conroller: Prepare elevator layer for single queue schedulers Vivek Goyal
2009-09-24 19:25 ` [PATCH 20/28] io-controller: noop changes for hierarchical fair queuing Vivek Goyal
2009-09-24 19:25 ` [PATCH 21/28] io-controller: deadline " Vivek Goyal
2009-09-24 19:25 ` [PATCH 22/28] io-controller: anticipatory " Vivek Goyal
2009-09-24 19:25 ` [PATCH 23/28] io-controller: blkio_cgroup patches from Ryo to track async bios Vivek Goyal
2009-09-24 19:25 ` [PATCH 24/28] io-controller: map async requests to appropriate cgroup Vivek Goyal
     [not found] ` <1253820332-10246-1-git-send-email-vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-24 19:25   ` [PATCH 01/28] io-controller: Documentation Vivek Goyal
2009-09-24 19:25   ` [PATCH 02/28] io-controller: Core of the elevator fair queuing Vivek Goyal
2009-09-24 19:25   ` [PATCH 03/28] io-controller: Keep a cache of recently expired queues Vivek Goyal
2009-09-24 19:25   ` [PATCH 04/28] io-controller: Common flat fair queuing code in elevaotor layer Vivek Goyal
2009-09-24 19:25   ` [PATCH 05/28] io-controller: Modify cfq to make use of flat elevator fair queuing Vivek Goyal
2009-09-24 19:25   ` [PATCH 06/28] io-controller: Core scheduler changes to support hierarhical scheduling Vivek Goyal
2009-09-24 19:25   ` [PATCH 07/28] io-controller: cgroup related changes for hierarchical group support Vivek Goyal
2009-09-24 19:25   ` [PATCH 08/28] io-controller: Common hierarchical fair queuing code in elevaotor layer Vivek Goyal
2009-09-24 19:25   ` [PATCH 09/28] io-controller: cfq changes to use " Vivek Goyal
2009-09-24 19:25   ` [PATCH 10/28] io-controller: Export disk time used and nr sectors dipatched through cgroups Vivek Goyal
2009-09-24 19:25   ` [PATCH 11/28] io-controller: Debug hierarchical IO scheduling Vivek Goyal
2009-09-24 19:25   ` [PATCH 12/28] io-controller: Introduce group idling Vivek Goyal
2009-09-24 19:25   ` [PATCH 13/28] io-controller: Implement wait busy for io queues Vivek Goyal
2009-09-24 19:25   ` [PATCH 14/28] io-controller: Keep track of late preemptions Vivek Goyal
2009-09-24 19:25   ` [PATCH 15/28] io-controller: Allow CFQ specific extra preemptions Vivek Goyal
2009-09-24 19:25   ` [PATCH 16/28] io-controller: Wait for requests to complete from last queue before new queue is scheduled Vivek Goyal
2009-09-24 19:25   ` [PATCH 17/28] io-controller: Separate out queue and data Vivek Goyal
2009-09-24 19:25   ` [PATCH 18/28] io-conroller: Prepare elevator layer for single queue schedulers Vivek Goyal
2009-09-24 19:25   ` [PATCH 19/28] io-controller: Avoid expiring ioq for single ioq scheduler if only root group Vivek Goyal
2009-09-24 19:25     ` Vivek Goyal
2009-09-24 19:25   ` [PATCH 20/28] io-controller: noop changes for hierarchical fair queuing Vivek Goyal
2009-09-24 19:25   ` [PATCH 21/28] io-controller: deadline " Vivek Goyal
2009-09-24 19:25   ` [PATCH 22/28] io-controller: anticipatory " Vivek Goyal
2009-09-24 19:25   ` [PATCH 23/28] io-controller: blkio_cgroup patches from Ryo to track async bios Vivek Goyal
2009-09-24 19:25   ` [PATCH 24/28] io-controller: map async requests to appropriate cgroup Vivek Goyal
2009-09-24 19:25   ` [PATCH 25/28] io-controller: Per cgroup request descriptor support Vivek Goyal
2009-09-24 19:25   ` [PATCH 26/28] io-controller: Per io group bdi congestion interface Vivek Goyal
2009-09-24 19:25   ` [PATCH 27/28] io-controller: Support per cgroup per device weights and io class Vivek Goyal
2009-09-24 19:25   ` [PATCH 28/28] io-controller: debug elevator fair queuing support Vivek Goyal
2009-09-24 21:33   ` IO scheduler based IO controller V10 Andrew Morton
2009-09-25  2:20   ` Ulrich Lukas
2009-09-29  0:37   ` Nauman Rafique
2009-09-24 19:25 ` Vivek Goyal [this message]
2009-09-24 19:25 ` [PATCH 26/28] io-controller: Per io group bdi congestion interface Vivek Goyal
2009-09-24 19:25 ` [PATCH 27/28] io-controller: Support per cgroup per device weights and io class Vivek Goyal
2009-09-24 19:25 ` [PATCH 28/28] io-controller: debug elevator fair queuing support Vivek Goyal
2009-09-24 21:33 ` IO scheduler based IO controller V10 Andrew Morton
2009-09-24 21:33   ` Andrew Morton
2009-09-25  1:09   ` KAMEZAWA Hiroyuki
     [not found]     ` <20090925100952.55c2dd7a.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-09-25  1:18       ` KAMEZAWA Hiroyuki
2009-09-25  4:14       ` Vivek Goyal
2009-09-25  1:18     ` KAMEZAWA Hiroyuki
2009-09-25  1:18       ` KAMEZAWA Hiroyuki
2009-09-25  5:29       ` Balbir Singh
2009-09-25  7:09         ` Ryo Tsuruta
2009-09-25  7:09           ` Ryo Tsuruta
     [not found]         ` <20090925052911.GK4590-SINUvgVNF2CyUtPGxGje5AC/G2K4zDHf@public.gmane.org>
2009-09-25  7:09           ` Ryo Tsuruta
     [not found]       ` <20090925101821.1de8091a.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-09-25  5:29         ` Balbir Singh
2009-09-25  4:14     ` Vivek Goyal
2009-09-25  4:14       ` Vivek Goyal
2009-09-25  5:04   ` Vivek Goyal
2009-09-25  5:04     ` Vivek Goyal
     [not found]     ` <20090925050429.GB12555-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-25  9:07       ` Ryo Tsuruta
2009-09-25  9:07     ` Ryo Tsuruta
2009-09-25  9:07       ` Ryo Tsuruta
2009-09-25 14:33       ` Vivek Goyal
2009-09-25 14:33         ` Vivek Goyal
     [not found]         ` <20090925143337.GA15007-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-28  7:30           ` Ryo Tsuruta
2009-09-28  7:30         ` Ryo Tsuruta
     [not found]       ` <20090925.180724.104041942.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-09-25 14:33         ` Vivek Goyal
2009-09-25 15:04         ` Rik van Riel
2009-09-25 15:04       ` Rik van Riel
2009-09-25 15:04         ` Rik van Riel
2009-09-28  7:38         ` Ryo Tsuruta
2009-09-28  7:38           ` Ryo Tsuruta
     [not found]         ` <4ABCDBFF.1020203-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-28  7:38           ` Ryo Tsuruta
2009-10-08  4:42   ` More performance numbers (Was: Re: IO scheduler based IO controller V10) Vivek Goyal
2009-10-08  4:42     ` Vivek Goyal
2009-10-08  8:34     ` Andrea Righi
2009-10-08  8:34       ` Andrea Righi
     [not found]     ` <20091008044251.GA3490-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-08  8:34       ` Andrea Righi
     [not found]   ` <20090924143315.781cd0ac.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2009-09-25  1:09     ` IO scheduler based IO controller V10 KAMEZAWA Hiroyuki
2009-09-25  5:04     ` Vivek Goyal
2009-10-08  4:42     ` More performance numbers (Was: Re: IO scheduler based IO controller V10) Vivek Goyal
2009-10-10 19:53     ` Performance numbers with IO throttling patches " Vivek Goyal
2009-10-10 19:53   ` Vivek Goyal
2009-10-10 19:53     ` Vivek Goyal
     [not found]     ` <20091010195316.GB16510-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-10 22:27       ` Andrea Righi
2009-10-10 22:27     ` Andrea Righi
2009-10-10 22:27       ` Andrea Righi
2009-10-11 12:32       ` Vivek Goyal
2009-10-11 12:32         ` Vivek Goyal
2009-10-12 21:11       ` Vivek Goyal
2009-10-12 21:11         ` Vivek Goyal
2009-10-17 15:18         ` Andrea Righi
     [not found]         ` <20091012211120.GE7152-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-17 15:18           ` Andrea Righi
2009-10-12 21:11       ` Vivek Goyal
2009-09-25  2:20 ` IO scheduler based IO controller V10 Ulrich Lukas
     [not found]   ` <4ABC28DE.7050809-7vBoImwI/YtIVYojq0lqJrNAH6kLmebB@public.gmane.org>
2009-09-25 20:26     ` Vivek Goyal
2009-09-25 20:26   ` Vivek Goyal
2009-09-25 20:26     ` Vivek Goyal
2009-09-26 14:51     ` Mike Galbraith
     [not found]       ` <1253976676.7005.40.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-27  6:55         ` Mike Galbraith
2009-09-27  6:55       ` Mike Galbraith
     [not found]         ` <1254034500.7933.6.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-27 16:42           ` Jens Axboe
2009-09-27 16:42         ` Jens Axboe
     [not found]           ` <20090927164235.GA23126-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-09-27 18:15             ` Mike Galbraith
2009-09-30 19:58             ` Mike Galbraith
2009-09-27 18:15           ` Mike Galbraith
2009-09-28  4:04             ` Mike Galbraith
2009-09-28  5:55               ` Mike Galbraith
2009-09-28 17:48               ` Vivek Goyal
2009-09-28 17:48                 ` Vivek Goyal
2009-09-28 18:24                 ` Mike Galbraith
     [not found]                 ` <20090928174809.GB3643-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-28 18:24                   ` Mike Galbraith
     [not found]               ` <1254110648.7683.3.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-28  5:55                 ` Mike Galbraith
2009-09-28 17:48                 ` Vivek Goyal
     [not found]             ` <1254075359.7354.66.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-28  4:04               ` Mike Galbraith
2009-09-30 19:58           ` Mike Galbraith
     [not found]             ` <1254340730.7695.32.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-30 20:05               ` Mike Galbraith
2009-09-30 20:05             ` Mike Galbraith
2009-09-30 20:24               ` Vivek Goyal
2009-09-30 20:24                 ` Vivek Goyal
     [not found]                 ` <20090930202447.GA28236-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-01  7:33                   ` Mike Galbraith
2009-10-01  7:33                 ` Mike Galbraith
     [not found]                   ` <1254382405.7595.9.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-01 18:58                     ` Jens Axboe
2009-10-01 18:58                       ` Jens Axboe
2009-10-02  6:23                       ` Mike Galbraith
     [not found]                         ` <1254464628.7158.101.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02  8:04                           ` Jens Axboe
2009-10-02  8:04                         ` Jens Axboe
2009-10-02  8:04                           ` Jens Axboe
2009-10-02  8:53                           ` Mike Galbraith
     [not found]                             ` <1254473609.6378.24.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02  9:00                               ` Mike Galbraith
2009-10-02  9:55                               ` Jens Axboe
2009-10-02  9:00                             ` Mike Galbraith
2009-10-02  9:55                             ` Jens Axboe
2009-10-02 12:22                               ` Mike Galbraith
     [not found]                               ` <20091002095555.GB26962-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 12:22                                 ` Mike Galbraith
     [not found]                           ` <20091002080417.GG14918-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02  8:53                             ` Mike Galbraith
2009-10-02  9:24                             ` Ingo Molnar
2009-10-02  9:24                           ` Ingo Molnar
2009-10-02  9:24                             ` Ingo Molnar
2009-10-02  9:28                             ` Jens Axboe
2009-10-02  9:28                               ` Jens Axboe
     [not found]                               ` <20091002092839.GA26962-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 14:24                                 ` Linus Torvalds
2009-10-02 14:24                                   ` Linus Torvalds
2009-10-02 14:45                                   ` Mike Galbraith
2009-10-02 14:57                                     ` Jens Axboe
     [not found]                                     ` <1254494742.7307.37.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02 14:57                                       ` Jens Axboe
2009-10-02 14:56                                   ` Jens Axboe
2009-10-02 14:56                                     ` Jens Axboe
2009-10-02 15:14                                     ` Linus Torvalds
2009-10-02 15:14                                       ` Linus Torvalds
2009-10-02 16:01                                       ` jim owens
2009-10-02 16:01                                         ` jim owens
2009-10-02 17:11                                       ` Jens Axboe
2009-10-02 17:11                                         ` Jens Axboe
2009-10-02 17:20                                         ` Ingo Molnar
2009-10-02 17:20                                           ` Ingo Molnar
2009-10-02 17:25                                           ` Jens Axboe
2009-10-02 17:25                                             ` Jens Axboe
2009-10-02 17:28                                             ` Ingo Molnar
2009-10-02 17:28                                               ` Ingo Molnar
     [not found]                                               ` <20091002172842.GA4884-X9Un+BFzKDI@public.gmane.org>
2009-10-02 17:37                                                 ` Jens Axboe
2009-10-02 17:37                                               ` Jens Axboe
     [not found]                                                 ` <20091002173732.GK31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 17:56                                                   ` Ingo Molnar
2009-10-02 18:13                                                   ` Mike Galbraith
2009-10-02 17:56                                                 ` Ingo Molnar
2009-10-02 17:56                                                   ` Ingo Molnar
     [not found]                                                   ` <20091002175629.GA14860-X9Un+BFzKDI@public.gmane.org>
2009-10-02 18:04                                                     ` Jens Axboe
2009-10-02 18:04                                                   ` Jens Axboe
     [not found]                                                     ` <20091002180437.GL31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 18:22                                                       ` Mike Galbraith
2009-10-02 18:36                                                       ` Theodore Tso
2009-10-02 18:22                                                     ` Mike Galbraith
2009-10-02 18:26                                                       ` Jens Axboe
2009-10-02 18:33                                                         ` Mike Galbraith
     [not found]                                                         ` <20091002182608.GO31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 18:33                                                           ` Mike Galbraith
     [not found]                                                       ` <1254507754.8667.15.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02 18:26                                                         ` Jens Axboe
2009-10-02 18:36                                                     ` Theodore Tso
2009-10-02 18:45                                                       ` Jens Axboe
2009-10-02 18:45                                                         ` Jens Axboe
2009-10-02 19:01                                                         ` Ingo Molnar
2009-10-02 19:09                                                           ` Jens Axboe
2009-10-02 19:09                                                             ` Jens Axboe
     [not found]                                                           ` <20091002190110.GA25297-X9Un+BFzKDI@public.gmane.org>
2009-10-02 19:09                                                             ` Jens Axboe
     [not found]                                                         ` <20091002184549.GS31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 19:01                                                           ` Ingo Molnar
     [not found]                                                       ` <20091002183649.GE8161-3s7WtUTddSA@public.gmane.org>
2009-10-02 18:45                                                         ` Jens Axboe
2009-10-02 18:13                                                 ` Mike Galbraith
2009-10-02 18:19                                                   ` Jens Axboe
2009-10-02 18:57                                                     ` Mike Galbraith
2009-10-02 20:47                                                       ` Mike Galbraith
     [not found]                                                       ` <1254509838.8667.30.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02 20:47                                                         ` Mike Galbraith
2009-10-03  5:48                                                     ` Mike Galbraith
2009-10-03  5:56                                                       ` Mike Galbraith
2009-10-03  6:31                                                         ` tweaking IO latency [was Re: IO scheduler based IO controller V10] Mike Galbraith
2009-10-03  7:24                                                         ` IO scheduler based IO controller V10 Jens Axboe
2009-10-03  9:00                                                           ` Mike Galbraith
2009-10-03  9:12                                                             ` Corrado Zoccolo
2009-10-03  9:12                                                               ` Corrado Zoccolo
     [not found]                                                               ` <4e5e476b0910030212y50f97d97nc2e17c35d855cc63-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-10-03 13:18                                                                 ` Jens Axboe
2009-10-03 13:18                                                               ` Jens Axboe
2009-10-03 13:18                                                                 ` Jens Axboe
     [not found]                                                             ` <1254560434.17052.14.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03  9:12                                                               ` Corrado Zoccolo
2009-10-03 13:17                                                               ` Jens Axboe
2009-10-03 13:17                                                             ` Jens Axboe
2009-10-03 13:17                                                               ` Jens Axboe
     [not found]                                                           ` <20091003072401.GV31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03  9:00                                                             ` Mike Galbraith
2009-10-03 11:29                                                         ` Vivek Goyal
2009-10-03 11:29                                                           ` Vivek Goyal
     [not found]                                                           ` <20091003112915.GA12925-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-03 12:40                                                             ` Do not overload dispatch queue (Was: Re: IO scheduler based IO controller V10) Vivek Goyal
2009-10-03 12:40                                                           ` Vivek Goyal
2009-10-03 12:40                                                             ` Vivek Goyal
2009-10-03 13:21                                                             ` Jens Axboe
     [not found]                                                               ` <20091003132115.GB31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03 13:56                                                                 ` Vivek Goyal
2009-10-03 13:56                                                               ` Vivek Goyal
2009-10-03 13:56                                                                 ` Vivek Goyal
2009-10-03 14:02                                                                 ` Mike Galbraith
     [not found]                                                                   ` <1254578553.7499.5.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03 14:28                                                                     ` Jens Axboe
2009-10-03 14:28                                                                   ` Jens Axboe
2009-10-03 14:33                                                                     ` Mike Galbraith
2009-10-03 14:33                                                                       ` Mike Galbraith
2009-10-03 14:51                                                                     ` Mike Galbraith
2009-10-03 14:51                                                                       ` Mike Galbraith
     [not found]                                                                       ` <1254581496.8293.8.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03 15:14                                                                         ` Jens Axboe
2009-10-03 15:14                                                                       ` Jens Axboe
2009-10-03 15:14                                                                         ` Jens Axboe
     [not found]                                                                         ` <20091003151445.GF31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03 15:57                                                                           ` Mike Galbraith
2009-10-03 15:57                                                                             ` Mike Galbraith
2009-10-03 17:35                                                                             ` Jens Axboe
2009-10-03 17:35                                                                               ` Jens Axboe
     [not found]                                                                               ` <20091003173532.GG31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03 17:45                                                                                 ` Linus Torvalds
2009-10-03 17:45                                                                                   ` Linus Torvalds
     [not found]                                                                                   ` <alpine.LFD.2.01.0910031042560.6996-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-10-03 17:51                                                                                     ` Jens Axboe
2009-10-03 17:51                                                                                       ` Jens Axboe
2009-10-03 19:07                                                                                 ` Mike Galbraith
2009-10-03 19:07                                                                               ` Mike Galbraith
2009-10-03 19:07                                                                                 ` Mike Galbraith
2009-10-03 19:11                                                                                 ` Mike Galbraith
2009-10-03 19:11                                                                                   ` Mike Galbraith
2009-10-03 19:23                                                                                 ` Jens Axboe
2009-10-03 19:23                                                                                   ` Jens Axboe
2009-10-03 19:49                                                                                   ` Mike Galbraith
2009-10-03 19:49                                                                                     ` Mike Galbraith
2009-10-04 10:50                                                                                     ` Mike Galbraith
2009-10-04 11:33                                                                                       ` Mike Galbraith
     [not found]                                                                                       ` <1254653434.7237.18.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-04 17:39                                                                                         ` Jens Axboe
2009-10-04 17:39                                                                                           ` Jens Axboe
     [not found]                                                                                           ` <20091004173901.GD26573-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-04 18:23                                                                                             ` Mike Galbraith
2009-10-04 18:23                                                                                           ` Mike Galbraith
2009-10-04 18:23                                                                                             ` Mike Galbraith
     [not found]                                                                                             ` <1254680622.27889.2.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-04 18:38                                                                                               ` Jens Axboe
2009-10-04 18:38                                                                                             ` Jens Axboe
2009-10-04 18:38                                                                                               ` Jens Axboe
     [not found]                                                                                               ` <20091004183822.GF26573-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-04 19:47                                                                                                 ` Mike Galbraith
2009-10-04 19:47                                                                                               ` Mike Galbraith
2009-10-04 19:47                                                                                                 ` Mike Galbraith
2009-10-04 20:17                                                                                                 ` Jens Axboe
2009-10-04 20:17                                                                                                   ` Jens Axboe
     [not found]                                                                                                   ` <20091004201708.GJ26573-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-04 22:15                                                                                                     ` Mike Galbraith
2009-10-04 22:15                                                                                                   ` Mike Galbraith
2009-10-04 22:15                                                                                                     ` Mike Galbraith
     [not found]                                                                                                 ` <1254685638.7637.6.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-04 20:17                                                                                                   ` Jens Axboe
     [not found]                                                                                   ` <20091003192321.GA26573-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03 19:49                                                                                     ` Mike Galbraith
     [not found]                                                                                 ` <1254596864.7153.9.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03 19:11                                                                                   ` Mike Galbraith
2009-10-03 19:23                                                                                   ` Jens Axboe
     [not found]                                                                             ` <1254585420.7539.2.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03 17:35                                                                               ` Jens Axboe
     [not found]                                                                     ` <20091003142840.GE31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03 14:33                                                                       ` Mike Galbraith
2009-10-03 14:51                                                                       ` Mike Galbraith
     [not found]                                                                 ` <20091003135623.GD12925-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-03 14:02                                                                   ` Mike Galbraith
     [not found]                                                             ` <20091003124049.GB12925-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-03 13:21                                                               ` Jens Axboe
2009-10-03 13:57                                                               ` Mike Galbraith
2009-10-03 13:57                                                             ` Mike Galbraith
     [not found]                                                         ` <1254549378.8299.21.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03  6:31                                                           ` tweaking IO latency [was Re: IO scheduler based IO controller V10] Mike Galbraith
2009-10-03  7:24                                                           ` IO scheduler based IO controller V10 Jens Axboe
2009-10-03 11:29                                                           ` Vivek Goyal
     [not found]                                                       ` <1254548931.8299.18.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-03  5:56                                                         ` Mike Galbraith
2009-10-03  7:20                                                         ` Ingo Molnar
2009-10-03  7:20                                                       ` Ingo Molnar
2009-10-03  7:20                                                         ` Ingo Molnar
     [not found]                                                         ` <20091003072021.GB21407-X9Un+BFzKDI@public.gmane.org>
2009-10-03  7:25                                                           ` Jens Axboe
2009-10-03  7:25                                                         ` Jens Axboe
2009-10-03  7:25                                                           ` Jens Axboe
2009-10-03  8:53                                                           ` Mike Galbraith
     [not found]                                                           ` <20091003072540.GW31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-03  8:53                                                             ` Mike Galbraith
2009-10-03  9:01                                                             ` Corrado Zoccolo
2009-10-03  9:01                                                           ` Corrado Zoccolo
     [not found]                                                     ` <20091002181903.GN31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 18:57                                                       ` Mike Galbraith
2009-10-03  5:48                                                       ` Mike Galbraith
     [not found]                                                   ` <1254507215.8667.7.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02 18:19                                                     ` Jens Axboe
     [not found]                                             ` <20091002172554.GJ31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 17:28                                               ` Ingo Molnar
     [not found]                                           ` <20091002172046.GA2376-X9Un+BFzKDI@public.gmane.org>
2009-10-02 17:25                                             ` Jens Axboe
     [not found]                                         ` <20091002171129.GG31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 17:20                                           ` Ingo Molnar
     [not found]                                       ` <alpine.LFD.2.01.0910020811490.6996-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-10-02 16:01                                         ` jim owens
2009-10-02 17:11                                         ` Jens Axboe
2009-10-02 16:33                                     ` Ray Lee
2009-10-02 17:13                                       ` Jens Axboe
2009-10-02 17:13                                         ` Jens Axboe
     [not found]                                       ` <2c0942db0910020933l6d312c6ahae0e00619f598b39-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-10-02 17:13                                         ` Jens Axboe
     [not found]                                     ` <20091002145610.GD31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 15:14                                       ` Linus Torvalds
2009-10-02 16:33                                       ` Ray Lee
     [not found]                                   ` <alpine.LFD.2.01.0910020715160.6996-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-10-02 14:45                                     ` Mike Galbraith
2009-10-02 14:56                                     ` Jens Axboe
2009-10-02 16:22                                     ` Ingo Molnar
2009-10-02 16:22                                   ` Ingo Molnar
2009-10-02 16:22                                     ` Ingo Molnar
     [not found]                             ` <20091002092409.GA19529-X9Un+BFzKDI@public.gmane.org>
2009-10-02  9:28                               ` Jens Axboe
2009-10-02  9:36                               ` Mike Galbraith
2009-10-02  9:36                             ` Mike Galbraith
2009-10-02 16:37                               ` Ingo Molnar
2009-10-02 16:37                                 ` Ingo Molnar
     [not found]                               ` <1254476214.11022.8.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02 16:37                                 ` Ingo Molnar
     [not found]                       ` <20091001185816.GU14918-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02  6:23                         ` Mike Galbraith
2009-10-02 18:08                     ` Jens Axboe
2009-10-02 18:08                   ` Jens Axboe
2009-10-02 18:29                     ` Mike Galbraith
2009-10-02 18:36                       ` Jens Axboe
     [not found]                       ` <1254508197.8667.22.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-10-02 18:36                         ` Jens Axboe
     [not found]                     ` <20091002180857.GM31616-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2009-10-02 18:29                       ` Mike Galbraith
     [not found]               ` <1254341139.7695.36.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-30 20:24                 ` Vivek Goyal
2009-09-27 17:00     ` Corrado Zoccolo
2009-09-28 14:56       ` Vivek Goyal
2009-09-28 14:56         ` Vivek Goyal
     [not found]         ` <20090928145655.GB8192-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-28 15:35           ` Corrado Zoccolo
2009-09-28 15:35         ` Corrado Zoccolo
2009-09-28 17:14           ` Vivek Goyal
2009-09-28 17:14             ` Vivek Goyal
2009-09-29  7:10             ` Corrado Zoccolo
     [not found]             ` <20090928171420.GA3643-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-29  7:10               ` Corrado Zoccolo
2009-09-28 17:51           ` Mike Galbraith
2009-09-28 18:18             ` Vivek Goyal
2009-09-28 18:18               ` Vivek Goyal
2009-09-28 18:53               ` Mike Galbraith
2009-09-29  7:14                 ` Corrado Zoccolo
     [not found]                 ` <1254164034.9820.81.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-29  7:14                   ` Corrado Zoccolo
     [not found]               ` <20090928181846.GC3643-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-28 18:53                 ` Mike Galbraith
2009-09-29  5:55             ` Mike Galbraith
     [not found]             ` <1254160274.9820.25.camel-YqMYhexLQo1vAv1Ojkdn7Q@public.gmane.org>
2009-09-28 18:18               ` Vivek Goyal
2009-09-29  5:55               ` Mike Galbraith
     [not found]           ` <4e5e476b0909280835w3410d58aod93a29d1dcda8909-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-09-28 17:14             ` Vivek Goyal
2009-09-28 17:51             ` Mike Galbraith
     [not found]       ` <4e5e476b0909271000u69d79346s27cccad219e49902-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-09-28 14:56         ` Vivek Goyal
     [not found]     ` <20090925202636.GC15007-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-26 14:51       ` Mike Galbraith
2009-09-27 17:00       ` Corrado Zoccolo
2009-09-29  0:37 ` Nauman Rafique
2009-09-29  0:37   ` Nauman Rafique
2009-09-29  3:22   ` Vivek Goyal
2009-09-29  3:22     ` Vivek Goyal
     [not found]     ` <20090929032255.GA10664-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-29  9:56       ` Ryo Tsuruta
2009-09-29  9:56     ` Ryo Tsuruta
2009-09-29 10:49       ` Takuya Yoshikawa
2009-09-29 14:10       ` Vivek Goyal
2009-09-29 14:10         ` Vivek Goyal
2009-09-29 19:53         ` Nauman Rafique
     [not found]         ` <20090929141049.GA12141-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-09-29 19:53           ` Nauman Rafique
2009-09-30  8:43           ` Ryo Tsuruta
2009-09-30  8:43         ` Ryo Tsuruta
2009-09-30 11:05           ` Vivek Goyal
2009-09-30 11:05             ` Vivek Goyal
2009-10-01  6:41             ` Ryo Tsuruta
2009-10-01  6:41               ` Ryo Tsuruta
     [not found]               ` <20091001.154125.104044685.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-10-01 13:31                 ` Vivek Goyal
2009-10-01 13:31               ` Vivek Goyal
2009-10-01 13:31                 ` Vivek Goyal
2009-10-02  2:57                 ` Vivek Goyal
2009-10-02  2:57                   ` Vivek Goyal
2009-10-02 20:27                   ` Munehiro Ikeda
2009-10-02 20:27                     ` Munehiro Ikeda
     [not found]                     ` <4AC6623F.70600-MDRzhb/z0dd8UrSeD/g0lQ@public.gmane.org>
2009-10-05 10:38                       ` Ryo Tsuruta
2009-10-05 10:38                     ` Ryo Tsuruta
2009-10-05 10:38                       ` Ryo Tsuruta
     [not found]                       ` <20091005.193808.104033719.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-10-05 12:31                         ` Vivek Goyal
2009-10-05 12:31                       ` Vivek Goyal
2009-10-05 12:31                         ` Vivek Goyal
2009-10-05 14:55                         ` Ryo Tsuruta
2009-10-05 14:55                           ` Ryo Tsuruta
2009-10-05 17:10                           ` Vivek Goyal
2009-10-05 17:10                             ` Vivek Goyal
2009-10-05 18:11                             ` Nauman Rafique
2009-10-05 18:11                               ` Nauman Rafique
     [not found]                               ` <e98e18940910051111r110dc776l5105bf931761b842-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-10-06  7:17                                 ` Ryo Tsuruta
2009-10-06  7:17                               ` Ryo Tsuruta
2009-10-06  7:17                                 ` Ryo Tsuruta
2009-10-06 11:22                                 ` Vivek Goyal
2009-10-06 11:22                                   ` Vivek Goyal
2009-10-07 14:38                                   ` Ryo Tsuruta
2009-10-07 14:38                                     ` Ryo Tsuruta
2009-10-07 15:09                                     ` Vivek Goyal
2009-10-07 15:09                                       ` Vivek Goyal
2009-10-08  2:18                                       ` Ryo Tsuruta
2009-10-08  2:18                                         ` Ryo Tsuruta
     [not found]                                       ` <20091007150929.GB3674-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-08  2:18                                         ` Ryo Tsuruta
2009-10-07 16:41                                     ` Rik van Riel
2009-10-07 16:41                                       ` Rik van Riel
2009-10-07 20:23                                       ` Andy
     [not found]                                       ` <4ACCC4B7.4050805-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-08 10:22                                         ` Ryo Tsuruta
2009-10-08 10:22                                       ` Ryo Tsuruta
2009-10-08 10:22                                         ` Ryo Tsuruta
     [not found]                                     ` <20091007.233805.183040347.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-10-07 15:09                                       ` Vivek Goyal
2009-10-07 16:41                                       ` Rik van Riel
     [not found]                                   ` <20091006112201.GA27866-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-07 14:38                                     ` Ryo Tsuruta
     [not found]                                 ` <20091006.161744.189719641.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-10-06 11:22                                   ` Vivek Goyal
     [not found]                             ` <20091005171023.GG22143-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-05 18:11                               ` Nauman Rafique
     [not found]                           ` <20091005.235535.193690928.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-10-05 17:10                             ` Vivek Goyal
     [not found]                         ` <20091005123148.GB22143-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-05 14:55                           ` Ryo Tsuruta
     [not found]                   ` <20091002025731.GA2738-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-02 20:27                     ` Munehiro Ikeda
     [not found]                 ` <20091001133109.GA4058-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-02  2:57                   ` Vivek Goyal
     [not found]             ` <20090930110500.GA26631-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-10-01  6:41               ` Ryo Tsuruta
     [not found]           ` <20090930.174319.183036386.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-09-30 11:05             ` Vivek Goyal
     [not found]       ` <20090929.185653.183056711.ryov-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
2009-09-29 10:49         ` Takuya Yoshikawa
2009-09-29 14:10         ` Vivek Goyal
2009-09-30  3:11         ` Vivek Goyal
2009-09-30  3:11       ` Vivek Goyal
2009-09-30  3:11         ` Vivek Goyal
     [not found]   ` <e98e18940909281737q142c788dpd20b8bdc05dd0eff-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-09-29  3:22     ` Vivek Goyal

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=1253820332-10246-26-git-send-email-vgoyal@redhat.com \
    --to=vgoyal@redhat.com \
    --cc=agk@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=dhaval@linux.vnet.ibm.com \
    --cc=dm-devel@redhat.com \
    --cc=dpshah@google.com \
    --cc=fchecconi@gmail.com \
    --cc=fernando@oss.ntt.co.jp \
    --cc=guijianfeng@cn.fujitsu.com \
    --cc=jens.axboe@oracle.com \
    --cc=jmarchan@redhat.com \
    --cc=jmoyer@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=m-ikeda@ds.jp.nec.com \
    --cc=mikew@google.com \
    --cc=mingo@elte.hu \
    --cc=nauman@google.com \
    --cc=paolo.valente@unimore.it \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    --cc=righi.andrea@gmail.com \
    --cc=ryov@valinux.co.jp \
    --cc=s-uchida@ap.jp.nec.com \
    --cc=taka@valinux.co.jp \
    --cc=torvalds@linux-foundation.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.