diff options
author | NeilBrown <neilb@suse.de> | 2012-11-18 21:11:26 -0500 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-11-20 03:42:56 -0500 |
commit | 4ac6875eeb97a49bad7bc8d56b5ec935904fc6e7 (patch) | |
tree | 3443bf90a75f43f118487bcb822ff5e511ee3e3b /drivers | |
parent | 5eff3c439d3478ba9e8ba5f8c0aaf6e6fadb6e58 (diff) |
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/md/raid5.c | 4 |
1 files changed, 4 insertions, 0 deletions
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) | |||
5529 | * discard data disk but write parity disk | 5529 | * discard data disk but write parity disk |
5530 | */ | 5530 | */ |
5531 | stripe = stripe * PAGE_SIZE; | 5531 | stripe = stripe * PAGE_SIZE; |
5532 | /* Round up to power of 2, as discard handling | ||
5533 | * currently assumes that */ | ||
5534 | while ((stripe-1) & stripe) | ||
5535 | stripe = (stripe | (stripe-1)) + 1; | ||
5532 | mddev->queue->limits.discard_alignment = stripe; | 5536 | mddev->queue->limits.discard_alignment = stripe; |
5533 | mddev->queue->limits.discard_granularity = stripe; | 5537 | mddev->queue->limits.discard_granularity = stripe; |
5534 | /* | 5538 | /* |