aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2008-09-25 05:37:50 -0400
committerJens Axboe <jens.axboe@oracle.com>2008-10-09 02:56:19 -0400
commitf7d7b7a7a3db6526a84ea755c1c54a051e9a52de (patch)
tree4d02c3abfca1c6175527473dff12769b09b630bb
parent8bff7c6b0f63c7ee9c5e3a076338d74125b8debb (diff)
block: as/cfq ssd idle check update
We really need to know about the hardware tagging support as well, since if the SSD does not do tagging then we still want to idle. Otherwise have the same dependent sync IO vs flooding async IO problem as on rotational media. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--block/as-iosched.c4
-rw-r--r--block/cfq-iosched.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/block/as-iosched.c b/block/as-iosched.c
index 4c6fafbba933..71f0abb219ee 100644
--- a/block/as-iosched.c
+++ b/block/as-iosched.c
@@ -745,11 +745,13 @@ static int as_can_break_anticipation(struct as_data *ad, struct request *rq)
745 */ 745 */
746static int as_can_anticipate(struct as_data *ad, struct request *rq) 746static int as_can_anticipate(struct as_data *ad, struct request *rq)
747{ 747{
748#if 0 /* disable for now, we need to check tag level as well */
748 /* 749 /*
749 * SSD device without seek penalty, disable idling 750 * SSD device without seek penalty, disable idling
750 */ 751 */
751 if (blk_queue_nonrot(ad->q)) 752 if (blk_queue_nonrot(ad->q)) axman
752 return 0; 753 return 0;
754#endif
753 755
754 if (!ad->io_context) 756 if (!ad->io_context)
755 /* 757 /*
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 03a5953bb5df..6a062eebbd15 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -879,9 +879,11 @@ static void cfq_arm_slice_timer(struct cfq_data *cfqd)
879 unsigned long sl; 879 unsigned long sl;
880 880
881 /* 881 /*
882 * SSD device without seek penalty, disable idling 882 * SSD device without seek penalty, disable idling. But only do so
883 * for devices that support queuing, otherwise we still have a problem
884 * with sync vs async workloads.
883 */ 885 */
884 if (blk_queue_nonrot(cfqd->queue)) 886 if (blk_queue_nonrot(cfqd->queue) && cfqd->hw_tag)
885 return; 887 return;
886 888
887 WARN_ON(!RB_EMPTY_ROOT(&cfqq->sort_list)); 889 WARN_ON(!RB_EMPTY_ROOT(&cfqq->sort_list));