diff options
author | Eric Sandeen <sandeen@redhat.com> | 2012-10-22 10:44:55 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-10-22 10:44:55 +1100 |
commit | 0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef (patch) | |
tree | f77875630f9081d381838db0ce82aa1e6686e3ff /drivers/md/faulty.c | |
parent | ae9d2b8ac0e88e868088a8fbdcf92cafc220a0d3 (diff) | |
download | op-kernel-dev-0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef.zip op-kernel-dev-0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef.tar.gz |
md faulty: use disk_stack_limits()
in:
fe86cdce block: do not artificially constrain max_sectors for stacking drivers
max_sectors defaults to UINT_MAX. md faulty wasn't using
disk_stack_limits(), so inherited this large value as well.
This triggered a bug in XFS when stressed over md_faulty, when
a very large bio_alloc() failed.
That was on an older kernel, and I can't reproduce exactly the
same thing upstream, but I think the fix is appropriate in any
case.
Thanks to Mike Snitzer for pointing out the problem.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/faulty.c')
-rw-r--r-- | drivers/md/faulty.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/faulty.c b/drivers/md/faulty.c index 45135f6..5e7dc77 100644 --- a/drivers/md/faulty.c +++ b/drivers/md/faulty.c @@ -315,8 +315,11 @@ static int run(struct mddev *mddev) } conf->nfaults = 0; - rdev_for_each(rdev, mddev) + rdev_for_each(rdev, mddev) { conf->rdev = rdev; + disk_stack_limits(mddev->gendisk, rdev->bdev, + rdev->data_offset << 9); + } md_set_array_sectors(mddev, faulty_size(mddev, 0, 0)); mddev->private = conf; |