diff options
author | NeilBrown <neilb@suse.com> | 2017-06-05 08:05:13 +0200 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2017-06-06 01:04:35 +0200 |
commit | a415c0f10627913793709ddb75add09d2ea334dc (patch) | |
tree | b54d1e13bae320a52efe48d316c5e10ae0ee53dd /drivers/md/raid5.c | |
parent | Linux 4.12-rc4 (diff) | |
download | linux-a415c0f10627913793709ddb75add09d2ea334dc.tar.xz linux-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/raid5.c')
-rw-r--r-- | drivers/md/raid5.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 722064689e82..ec0f951ae19f 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -7118,6 +7118,9 @@ static int raid5_run(struct mddev *mddev) long long min_offset_diff = 0; int first = 1; + if (mddev_init_writes_pending(mddev) < 0) + return -ENOMEM; + if (mddev->recovery_cp != MaxSector) pr_notice("md/raid:%s: not clean -- starting background reconstruction\n", mdname(mddev)); |