diff options
author | NeilBrown <neilb@suse.de> | 2012-05-31 15:39:11 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-05-31 15:56:30 +1000 |
commit | aba336bd1d46d6b0404b06f6915ed76150739057 (patch) | |
tree | 6517e35ba3f6df77276d9c4e81d8ec726228aacd /drivers/md/raid10.c | |
parent | 2aa4ee2a8805ec0260dde971e9e6699917c868a7 (diff) | |
download | blackbird-obmc-linux-aba336bd1d46d6b0404b06f6915ed76150739057.tar.gz blackbird-obmc-linux-aba336bd1d46d6b0404b06f6915ed76150739057.zip |
md: raid1/raid10: fix problem with merge_bvec_fn
The new merge_bvec_fn which calls the corresponding function
in subsidiary devices requires that mddev->merge_check_needed
be set if any child has a merge_bvec_fn.
However were were only setting that when a device was hot-added,
not when a device was present from the start.
This bug was introduced in 3.4 so patch is suitable for 3.4.y
kernels. However that are conflicts in raid10.c so a separate
patch will be needed for 3.4.y.
Cc: stable@vger.kernel.org
Reported-by: Sebastian Riemer <sebastian.riemer@profitbricks.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r-- | drivers/md/raid10.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 987db37cb875..99ae6068e456 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -3475,6 +3475,7 @@ static int run(struct mddev *mddev) rdev_for_each(rdev, mddev) { long long diff; + struct request_queue *q; disk_idx = rdev->raid_disk; if (disk_idx < 0) @@ -3493,6 +3494,9 @@ static int run(struct mddev *mddev) goto out_free_conf; disk->rdev = rdev; } + q = bdev_get_queue(rdev->bdev); + if (q->merge_bvec_fn) + mddev->merge_check_needed = 1; diff = (rdev->new_data_offset - rdev->data_offset); if (!mddev->reshape_backwards) diff = -diff; |