[PATCH 2 of 3] md: Export preferred I/O sizes and physical alignment | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
5 files changed, 49 insertions(+)
drivers/md/linear.c | 8 ++++++++
drivers/md/raid0.c | 11 +++++++++++
drivers/md/raid1.c | 8 ++++++++
drivers/md/raid10.c | 9 +++++++++
drivers/md/raid5.c | 13 +++++++++++++
For each of the RAID levels set the preferred I/O hints according to
chunk size and stripe width.
Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
---
diff -r 3e5d8520d247 -r c7132bad88f3 drivers/md/linear.c
--- a/drivers/md/linear.c Thu Jun 05 01:07:51 2008 -0400
+++ b/drivers/md/linear.c Thu Jun 05 01:07:51 2008 -0400
@@ -135,6 +135,14 @@
blk_queue_stack_limits(mddev->queue,
rdev->bdev->bd_disk->queue);
+
+ if (rdev->raid_disk == 0)
+ disk_set_io_hints(mddev->gendisk,
+ bdev_phys_offset(rdev->bdev)
+ + rdev->data_offset,
+ bdev_optimal_io_block(rdev->bdev),
+ bdev_optimal_io_length(rdev->bdev));
+
/* as we don't honour merge_bvec_fn, we must never risk
* violating it, so limit ->max_sector to one PAGE, as
* a one page request is never in violation.
diff -r 3e5d8520d247 -r c7132bad88f3 drivers/md/raid0.c
--- a/drivers/md/raid0.c Thu Jun 05 01:07:51 2008 -0400
+++ b/drivers/md/raid0.c Thu Jun 05 01:07:51 2008 -0400
@@ -140,6 +140,17 @@
blk_queue_stack_limits(mddev->queue,
rdev1->bdev->bd_disk->queue);
+
+ if (rdev1->raid_disk == 0) {
+ disk_set_io_hints(mddev->gendisk,
+ bdev_phys_offset(rdev1->bdev)
+ + rdev1->data_offset,
+ mddev->chunk_size,
+ mddev->chunk_size * mddev->raid_disks);
+ printk(KERN_ERR "raid0: chunk_size=%u, disks=%u\n",
+ mddev->chunk_size, mddev->raid_disks);
+ }
+
/* as we don't honour merge_bvec_fn, we must never risk
* violating it, so limit ->max_sector to one PAGE, as
* a one page request is never in violation.
diff -r 3e5d8520d247 -r c7132bad88f3 drivers/md/raid1.c
--- a/drivers/md/raid1.c Thu Jun 05 01:07:51 2008 -0400
+++ b/drivers/md/raid1.c Thu Jun 05 01:07:51 2008 -0400
@@ -1970,6 +1970,14 @@
blk_queue_stack_limits(mddev->queue,
rdev->bdev->bd_disk->queue);
+
+ if (rdev->raid_disk == 0)
+ disk_set_io_hints(mddev->gendisk,
+ bdev_phys_offset(rdev->bdev)
+ + rdev->data_offset,
+ bdev_optimal_io_block(rdev->bdev),
+ bdev_optimal_io_length(rdev->bdev));
+
/* as we don't honour merge_bvec_fn, we must never risk
* violating it, so limit ->max_sector to one PAGE, as
* a one page request is never in violation.
diff -r 3e5d8520d247 -r c7132bad88f3 drivers/md/raid10.c
--- a/drivers/md/raid10.c Thu Jun 05 01:07:51 2008 -0400
+++ b/drivers/md/raid10.c Thu Jun 05 01:07:51 2008 -0400
@@ -2106,6 +2106,15 @@
blk_queue_stack_limits(mddev->queue,
rdev->bdev->bd_disk->queue);
+
+ if (rdev->raid_disk == 0)
+ disk_set_io_hints(mddev->gendisk,
+ bdev_phys_offset(rdev->bdev)
+ + rdev->data_offset,
+ mddev->chunk_size,
+ (mddev->chunk_size * mddev->raid_disks)
+ >> 1);
+
/* as we don't honour merge_bvec_fn, we must never risk
* violating it, so limit ->max_sector to one PAGE, as
* a one page request is never in violation.
diff -r 3e5d8520d247 -r c7132bad88f3 drivers/md/raid5.c
--- a/drivers/md/raid5.c Thu Jun 05 01:07:51 2008 -0400
+++ b/drivers/md/raid5.c Thu Jun 05 01:07:51 2008 -0400
@@ -4298,6 +4298,19 @@
raid_disk);
working_disks++;
}
+
+ if (rdev->raid_disk == 0) {
+ int disks = mddev->raid_disks - 1;
+
+ if (mddev->level == 6)
+ disks--;
+
+ disk_set_io_hints(mddev->gendisk,
+ bdev_phys_offset(rdev->bdev)
+ + rdev->data_offset,
+ mddev->chunk_size,
+ mddev->chunk_size * disks);
+ }
}
/*
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Site Home] [Kernel Newbies] [Share Photos] [IDE] [Security] [Git] [Netfilter] [Bugtraq] [Rubini] [Photo] [Yosemite] [Yosemite News] [MIPS Linux] [ARM Linux] [Linux Security] [Linux RAID] [Linux ATA RAID] [Samba] [Video 4 Linux] [Device Mapper] [Linux Resources]
![]() |