diff options
Diffstat (limited to 'drivers/md/raid5.c')
| -rw-r--r-- | drivers/md/raid5.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index cc055da02e2a..cbb15716a5db 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -687,7 +687,8 @@ get_active_stripe(struct r5conf *conf, sector_t sector,  			} else {  				if (!test_bit(STRIPE_HANDLE, &sh->state))  					atomic_inc(&conf->active_stripes); -				BUG_ON(list_empty(&sh->lru)); +				BUG_ON(list_empty(&sh->lru) && +				       !test_bit(STRIPE_EXPANDING, &sh->state));  				list_del_init(&sh->lru);  				if (sh->group) {  					sh->group->stripes_cnt--; @@ -3608,7 +3609,7 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)  			 */  			set_bit(R5_Insync, &dev->flags); -		if (rdev && test_bit(R5_WriteError, &dev->flags)) { +		if (test_bit(R5_WriteError, &dev->flags)) {  			/* This flag does not apply to '.replacement'  			 * only to .rdev, so make sure to check that*/  			struct md_rdev *rdev2 = rcu_dereference( @@ -3621,7 +3622,7 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)  			} else  				clear_bit(R5_WriteError, &dev->flags);  		} -		if (rdev && test_bit(R5_MadeGood, &dev->flags)) { +		if (test_bit(R5_MadeGood, &dev->flags)) {  			/* This flag does not apply to '.replacement'  			 * only to .rdev, so make sure to check that*/  			struct md_rdev *rdev2 = rcu_dereference(  | 
