From: ZhengYuan Liu <liuzhengyuan@xxxxxxxxxx> Once the data was written to cache device, r5c_handle_cached_data_endio would be called to set dev->written with null and return the bio to up layer. As a result, handle_stripe_clean_event has no chance to be called to decrease the counter of conf->pending_full_writes when the stripe was written to raid disks at reclaim stage. It should test the STRIPE_FULL_WRITE state and decrease the counter at somewhere when the full-write stripe was reclaimed, r5c_handle_stripe_written may be the right place to do that. Signed-off-by: ZhengYuan Liu <liuzhengyuan@xxxxxxxxxx> Signed-off-by: Song Liu <songliubraving@xxxxxx> --- drivers/md/raid5-cache.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index a94585d..8a035da 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c @@ -2044,6 +2044,10 @@ void r5c_handle_stripe_written(struct r5conf *conf, spin_unlock_irqrestore(&conf->log->stripe_in_cache_lock, flags); sh->log_start = MaxSector; clear_bit(STRIPE_R5C_PRIORITY, &sh->state); + + if (test_and_clear_bit(STRIPE_FULL_WRITE, &sh->state)) + if (atomic_dec_and_test(&conf->pending_full_writes)) + md_wakeup_thread(conf->mddev->thread); } if (do_wakeup) -- 2.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html