From c4db1075377e1e1835ea282a45775a479edd507b Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 9 Sep 2005 16:23:52 -0700 Subject: [PATCH] --- yaml --- r: 8325 b: refs/heads/master c: ab904d634625ef8dc590240b7ee06c7b724e636b h: refs/heads/master i: 8323: 5452ea2004a7c3b57bf29795d9f7c2c5558c0427 v: v3 --- [refs] | 2 +- trunk/drivers/md/bitmap.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index e68499783fa0..aa160613b645 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 71c0805cb48462c99fbe0e5fcc6c12d7b9929c09 +refs/heads/master: ab904d634625ef8dc590240b7ee06c7b724e636b diff --git a/trunk/drivers/md/bitmap.c b/trunk/drivers/md/bitmap.c index c971d38f3a05..90fe70d76a31 100644 --- a/trunk/drivers/md/bitmap.c +++ b/trunk/drivers/md/bitmap.c @@ -270,19 +270,20 @@ static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long inde if (!page) return ERR_PTR(-ENOMEM); - do { - ITERATE_RDEV(mddev, rdev, tmp) - if (rdev->in_sync && !rdev->faulty) - goto found; - return ERR_PTR(-EIO); - found: + ITERATE_RDEV(mddev, rdev, tmp) { + if (! rdev->in_sync || rdev->faulty) + continue; + target = (rdev->sb_offset << 1) + offset + index * (PAGE_SIZE/512); - } while (!sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)); + if (sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)) { + page->index = index; + return page; + } + } + return ERR_PTR(-EIO); - page->index = index; - return page; } static int write_sb_page(mddev_t *mddev, long offset, struct page *page, int wait)