Browse Source

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 <liuzhengyuan@kylinos.cn>
Signed-off-by: Shaohua Li <shli@fb.com>
Zhengyuan Liu 8 years ago
parent
commit
3d7e7e1d9d
1 changed files with 3 additions and 5 deletions
  1. 3 5
      drivers/md/raid5-cache.c

+ 3 - 5
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;