tree 3ecd6a17dd99f2f1879b3e1fed58f52e6d35633c
parent 71c0805cb48462c99fbe0e5fcc6c12d7b9929c09
author NeilBrown <[EMAIL PROTECTED]> Sat, 10 Sep 2005 06:23:52 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Sat, 10 Sep 2005 06:39:11 -0700

[PATCH] md: fix bitmap/read_sb_page so that it handles errors properly.

read_sb_page() assumed that if sync_page_io fails, the device would be marked
faultly.  However it isn't.  So in the face of error, read_sb_page would loop
forever.

Redo the logic so that this cannot happen.

Signed-off-by: Neil Brown <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 drivers/md/bitmap.c |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -270,19 +270,20 @@ static struct page *read_sb_page(mddev_t
 
        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)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to