From: NeilBrown <neilb@suse.de>
Date: Mon, 19 Nov 2012 02:11:26 +0000 (+1100)
Subject: md/raid5: round discard alignment up to power of 2.
X-Git-Tag: firefly_0821_release~3680^2~1414^2~16
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4ac6875eeb97a49bad7bc8d56b5ec935904fc6e7;p=firefly-linux-kernel-4.4.55.git

md/raid5: round discard alignment up to power of 2.

blkdev_issue_discard currently assumes that the granularity
is a power of 2.  So in raid5, round the chosen number up to
avoid embarrassment.

Cc: Shaohua Li <shli@kernel.org>
Signed-off-by: NeilBrown <neilb@suse.de>
---

diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index c5439dce0295..baea94f0670a 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5529,6 +5529,10 @@ static int run(struct mddev *mddev)
 		 * discard data disk but write parity disk
 		 */
 		stripe = stripe * PAGE_SIZE;
+		/* Round up to power of 2, as discard handling
+		 * currently assumes that */
+		while ((stripe-1) & stripe)
+			stripe = (stripe | (stripe-1)) + 1;
 		mddev->queue->limits.discard_alignment = stripe;
 		mddev->queue->limits.discard_granularity = stripe;
 		/*