From 3d7e7e1d9db048bc6c1503bca9c82193450fc476 Mon Sep 17 00:00:00 2001 From: Zhengyuan Liu Date: Sun, 4 Dec 2016 16:49:44 +0800 Subject: [PATCH] md/r5cache: do r5c_update_log_state after log recovery We should update log state after we did a log recovery, current completion may get wrong log state since log->log_start wasn't initalized until we called r5l_recovery_log. At log recovery stage, no lock needed as there is no race conditon. next_checkpoint field will be initialized in r5l_recovery_log too. Signed-off-by: Zhengyuan Liu Signed-off-by: Shaohua Li --- drivers/md/raid5-cache.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index 5efb876a588d..c3b3124e033b 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c @@ -2542,14 +2542,12 @@ create: if (log->max_free_space > RECLAIM_MAX_FREE_SPACE) log->max_free_space = RECLAIM_MAX_FREE_SPACE; log->last_checkpoint = cp; - log->next_checkpoint = cp; - mutex_lock(&log->io_mutex); - r5c_update_log_state(log); - mutex_unlock(&log->io_mutex); __free_page(page); - return r5l_recovery_log(log); + ret = r5l_recovery_log(log); + r5c_update_log_state(log); + return ret; ioerr: __free_page(page); return ret;