All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dm: pass up rotational flag
@ 2011-05-25 20:50 Mandeep Singh Baines
  2011-05-26 18:23 ` Mike Snitzer
  2011-05-26 18:35 ` [PATCH v2] dm: pass up non-rotational flag Mike Snitzer
  0 siblings, 2 replies; 23+ messages in thread
From: Mandeep Singh Baines @ 2011-05-25 20:50 UTC (permalink / raw)
  To: linux-kernel, jrbarnette
  Cc: Mandeep Singh Baines, Neil Brown, Mike Snitzer, Jens Axboe,
	Martin K. Petersen, Alasdair G Kergon, dm-devel

Allow the NONROT flag to be passed through to linear mappings if all
underlying device are non-rotational. Tools like ureadahead will
schedule IOs differently based on the rotational flag.

With this patch, I see boot time go from 7.75 s to 7.46 s on my device.

Suggested-by: J. Richard Barnette <jrbarnette@chromium.org>
Signed-off-by: Mandeep Singh Baines <msb@chromium.org>
Cc: Neil Brown <neilb@suse.de>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: Jens Axboe <jaxboe@fusionio.com>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Alasdair G Kergon <agk@redhat.com>
Cc: dm-devel@redhat.com
---
 drivers/md/dm-table.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index cb8380c..40c6071 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -1177,6 +1177,30 @@ static void dm_table_set_integrity(struct dm_table *t)
 			       blk_get_integrity(template_disk));
 }
 
+static int device_nonrot(struct dm_target *ti, struct dm_dev *dev,
+			       sector_t start, sector_t len, void *data)
+{
+	struct request_queue *q = bdev_get_queue(dev->bdev);
+
+	return q && blk_queue_nonrot(q);
+}
+
+static bool dm_table_all_nonrot(struct dm_table *t)
+{
+	unsigned i = 0;
+
+	/* Ensure that all underlying device are non rotational. */
+	while (i < dm_table_get_num_targets(t)) {
+		struct dm_target *ti = dm_table_get_target(t, i++);
+
+		if (!ti->type->iterate_devices ||
+		    !ti->type->iterate_devices(ti, device_nonrot, NULL))
+			return false;
+	}
+
+	return true;
+}
+
 void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
 			       struct queue_limits *limits)
 {
@@ -1189,6 +1213,10 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
 		queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, q);
 	else
 		queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, q);
+	if (!dm_table_all_nonrot(t))
+		queue_flag_clear_unlocked(QUEUE_FLAG_NONROT, q);
+	else
+		queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q);
 
 	dm_table_set_integrity(t);
 
-- 
1.7.3.1

^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2011-07-13 15:46 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-25 20:50 [PATCH] dm: pass up rotational flag Mandeep Singh Baines
2011-05-26 18:23 ` Mike Snitzer
2011-05-26 18:29   ` Martin K. Petersen
2011-05-26 18:43     ` Mike Snitzer
2011-05-26 18:48       ` Martin K. Petersen
2011-05-26 19:14     ` Jens Axboe
2011-05-27  2:42       ` Martin K. Petersen
2011-05-27  2:42         ` [PATCH 1/3] block: Introduce blk_set_stacking_limits function Martin K. Petersen
2011-05-27 13:03           ` Mike Snitzer
2011-05-27  2:42         ` [PATCH 2/3] block: Move non-rotational flag to queue limits Martin K. Petersen
2011-05-27 13:02           ` Mike Snitzer
2011-05-31  2:19             ` Martin K. Petersen
2011-05-31 12:49               ` Mike Snitzer
2011-05-31 13:14               ` Jens Axboe
2011-05-31 14:28                 ` Martin K. Petersen
2011-05-31 14:28                   ` Martin K. Petersen
2011-05-31 14:43                   ` Jens Axboe
2011-05-27  2:42         ` [PATCH 3/3] block: Move discard and secure discard flags " Martin K. Petersen
2011-05-27 13:39           ` Mike Snitzer
2011-05-31  2:22             ` Martin K. Petersen
2011-07-13 15:46               ` Mike Snitzer
2011-05-27 16:20           ` Mandeep Singh Baines
2011-05-26 18:35 ` [PATCH v2] dm: pass up non-rotational flag Mike Snitzer

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.