[kernel/f18] Actually add patch from last commit.
Josh Boyer
jwboyer at fedoraproject.org
Wed Apr 17 23:11:36 UTC 2013
commit 7be76a42257fda33c97db70334f6f419e28f747a
Author: Josh Boyer <jwboyer at redhat.com>
Date: Wed Apr 17 19:11:03 2013 -0400
Actually add patch from last commit.
Sigh and stuff.
...-Handle-REQ_WRITE_SAME-flag-in-write-bios.patch | 95 ++++++++++++++++++++
1 files changed, 95 insertions(+), 0 deletions(-)
---
diff --git a/md-raid1-10-Handle-REQ_WRITE_SAME-flag-in-write-bios.patch b/md-raid1-10-Handle-REQ_WRITE_SAME-flag-in-write-bios.patch
new file mode 100644
index 0000000..d9d66e2
--- /dev/null
+++ b/md-raid1-10-Handle-REQ_WRITE_SAME-flag-in-write-bios.patch
@@ -0,0 +1,95 @@
+From c8dc9c654794a765ca61baed07f84ed8aaa7ca8c Mon Sep 17 00:00:00 2001
+From: Joe Lawrence <Joe.Lawrence at stratus.com>
+Date: Thu, 21 Feb 2013 13:28:09 +1100
+Subject: [PATCH] md: raid1,10: Handle REQ_WRITE_SAME flag in write bios
+
+Set mddev queue's max_write_same_sectors to its chunk_sector value (before
+disk_stack_limits merges the underlying disk limits.) With that in place,
+be sure to handle writes coming down from the block layer that have the
+REQ_WRITE_SAME flag set. That flag needs to be copied into any newly cloned
+write bio.
+
+Signed-off-by: Joe Lawrence <joe.lawrence at stratus.com>
+Acked-by: "Martin K. Petersen" <martin.petersen at oracle.com>
+Signed-off-by: NeilBrown <neilb at suse.de>
+---
+ drivers/md/raid1.c | 7 ++++++-
+ drivers/md/raid10.c | 9 +++++++--
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
+index d5bddfc..6e5d5a5 100644
+--- a/drivers/md/raid1.c
++++ b/drivers/md/raid1.c
+@@ -1000,6 +1000,7 @@ static void make_request(struct mddev *mddev, struct bio * bio)
+ const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | REQ_FUA));
+ const unsigned long do_discard = (bio->bi_rw
+ & (REQ_DISCARD | REQ_SECURE));
++ const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME);
+ struct md_rdev *blocked_rdev;
+ struct blk_plug_cb *cb;
+ struct raid1_plug_cb *plug = NULL;
+@@ -1301,7 +1302,8 @@ read_again:
+ conf->mirrors[i].rdev->data_offset);
+ mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
+ mbio->bi_end_io = raid1_end_write_request;
+- mbio->bi_rw = WRITE | do_flush_fua | do_sync | do_discard;
++ mbio->bi_rw =
++ WRITE | do_flush_fua | do_sync | do_discard | do_same;
+ mbio->bi_private = r1_bio;
+
+ atomic_inc(&r1_bio->remaining);
+@@ -2818,6 +2820,9 @@ static int run(struct mddev *mddev)
+ if (IS_ERR(conf))
+ return PTR_ERR(conf);
+
++ if (mddev->queue)
++ blk_queue_max_write_same_sectors(mddev->queue,
++ mddev->chunk_sectors);
+ rdev_for_each(rdev, mddev) {
+ if (!mddev->gendisk)
+ continue;
+diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
+index 64d4824..1a74c12 100644
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -1105,6 +1105,7 @@ static void make_request(struct mddev *mddev, struct bio * bio)
+ const unsigned long do_fua = (bio->bi_rw & REQ_FUA);
+ const unsigned long do_discard = (bio->bi_rw
+ & (REQ_DISCARD | REQ_SECURE));
++ const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME);
+ unsigned long flags;
+ struct md_rdev *blocked_rdev;
+ struct blk_plug_cb *cb;
+@@ -1460,7 +1461,8 @@ retry_write:
+ rdev));
+ mbio->bi_bdev = rdev->bdev;
+ mbio->bi_end_io = raid10_end_write_request;
+- mbio->bi_rw = WRITE | do_sync | do_fua | do_discard;
++ mbio->bi_rw =
++ WRITE | do_sync | do_fua | do_discard | do_same;
+ mbio->bi_private = r10_bio;
+
+ atomic_inc(&r10_bio->remaining);
+@@ -1502,7 +1504,8 @@ retry_write:
+ r10_bio, rdev));
+ mbio->bi_bdev = rdev->bdev;
+ mbio->bi_end_io = raid10_end_write_request;
+- mbio->bi_rw = WRITE | do_sync | do_fua | do_discard;
++ mbio->bi_rw =
++ WRITE | do_sync | do_fua | do_discard | do_same;
+ mbio->bi_private = r10_bio;
+
+ atomic_inc(&r10_bio->remaining);
+@@ -3569,6 +3572,8 @@ static int run(struct mddev *mddev)
+ if (mddev->queue) {
+ blk_queue_max_discard_sectors(mddev->queue,
+ mddev->chunk_sectors);
++ blk_queue_max_write_same_sectors(mddev->queue,
++ mddev->chunk_sectors);
+ blk_queue_io_min(mddev->queue, chunk_size);
+ if (conf->geo.raid_disks % conf->geo.near_copies)
+ blk_queue_io_opt(mddev->queue, chunk_size * conf->geo.raid_disks);
+--
+1.8.1.4
+
More information about the scm-commits
mailing list