summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid10.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2017-06-05 16:05:13 +1000
committerShaohua Li <shli@fb.com>2017-06-05 16:04:35 -0700
commita415c0f10627913793709ddb75add09d2ea334dc (patch)
treeb54d1e13bae320a52efe48d316c5e10ae0ee53dd /drivers/md/raid10.c
parent3c2993b8c6143d8a5793746a54eba8f86f95240f (diff)
downloadlinux-stable-a415c0f10627913793709ddb75add09d2ea334dc.tar.gz
linux-stable-a415c0f10627913793709ddb75add09d2ea334dc.tar.bz2
linux-stable-a415c0f10627913793709ddb75add09d2ea334dc.zip
md: initialise ->writes_pending in personality modules.
The new per-cpu counter for writes_pending is initialised in md_alloc(), which is not called by dm-raid. So dm-raid fails when md_write_start() is called. Move the initialization to the personality modules that need it. This way it is always initialised when needed, but isn't unnecessarily initialized (requiring memory allocation) when the personality doesn't use writes_pending. Reported-by: Heinz Mauelshagen <heinzm@redhat.com> Fixes: 4ad23a976413 ("MD: use per-cpu counter for writes_pending") Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r--drivers/md/raid10.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 4343d7ff9916..797ed60abd5e 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -3611,6 +3611,9 @@ static int raid10_run(struct mddev *mddev)
int first = 1;
bool discard_supported = false;
+ if (mddev_init_writes_pending(mddev) < 0)
+ return -ENOMEM;
+
if (mddev->private == NULL) {
conf = setup_conf(mddev);
if (IS_ERR(conf))