From 53f916e056f82a34c4d45cfe47ddfcce8b0bf5a9 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 23 Dec 2011 09:57:00 +1100 Subject: [PATCH] --- yaml --- r: 276983 b: refs/heads/master c: 30d7a4836847bdb10b32c78a4879d4aebe0f193b h: refs/heads/master i: 276981: 0d226c19c2f0ef2dbffeca13cc6297ba526ff9f4 276979: 1aaefafe8a009c9daddc28ef9a9fc6fd5239ee4b 276975: de73fd4f001c9134ab85e7b4efe0e8e8d5583508 v: v3 --- [refs] | 2 +- trunk/drivers/md/raid5.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 5e1dafc1c684..8f2319faaca8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 09cd9270ea52e0f9851528e8ed028073f96b3c34 +refs/heads/master: 30d7a4836847bdb10b32c78a4879d4aebe0f193b diff --git a/trunk/drivers/md/raid5.c b/trunk/drivers/md/raid5.c index 31670f8d6b65..858fdbb7eb07 100644 --- a/trunk/drivers/md/raid5.c +++ b/trunk/drivers/md/raid5.c @@ -3065,11 +3065,17 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s) } } else if (test_bit(In_sync, &rdev->flags)) set_bit(R5_Insync, &dev->flags); - else { + else if (sh->sector + STRIPE_SECTORS <= rdev->recovery_offset) /* in sync if before recovery_offset */ - if (sh->sector + STRIPE_SECTORS <= rdev->recovery_offset) - set_bit(R5_Insync, &dev->flags); - } + set_bit(R5_Insync, &dev->flags); + else if (test_bit(R5_UPTODATE, &dev->flags) && + test_bit(R5_Expanded, &dev->flags)) + /* If we've reshaped into here, we assume it is Insync. + * We will shortly update recovery_offset to make + * it official. + */ + set_bit(R5_Insync, &dev->flags); + if (rdev && test_bit(R5_WriteError, &dev->flags)) { clear_bit(R5_Insync, &dev->flags); if (!test_bit(Faulty, &rdev->flags)) {