[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