summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2012-10-22 10:44:55 +1100
committerNeilBrown <neilb@suse.de>2012-10-22 10:44:55 +1100
commit0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef (patch)
treef77875630f9081d381838db0ce82aa1e6686e3ff
parentae9d2b8ac0e88e868088a8fbdcf92cafc220a0d3 (diff)
downloadlinux-stable-0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef.tar.gz
linux-stable-0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef.tar.bz2
linux-stable-0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef.zip
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>
-rw-r--r--drivers/md/faulty.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/faulty.c b/drivers/md/faulty.c
index 45135f69509c..5e7dc772f5de 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;