diff options
Diffstat (limited to 'drivers/md/raid5-cache.c')
-rw-r--r-- | drivers/md/raid5-cache.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index 1b1ab4a1d132..a227a9f3ee65 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c | |||
@@ -1087,7 +1087,7 @@ static int r5l_recovery_log(struct r5l_log *log) | |||
1087 | * 1's seq + 10 and let superblock points to meta2. The same recovery will | 1087 | * 1's seq + 10 and let superblock points to meta2. The same recovery will |
1088 | * not think meta 3 is a valid meta, because its seq doesn't match | 1088 | * not think meta 3 is a valid meta, because its seq doesn't match |
1089 | */ | 1089 | */ |
1090 | if (ctx.seq > log->last_cp_seq + 1) { | 1090 | if (ctx.seq > log->last_cp_seq) { |
1091 | int ret; | 1091 | int ret; |
1092 | 1092 | ||
1093 | ret = r5l_log_write_empty_meta_block(log, ctx.pos, ctx.seq + 10); | 1093 | ret = r5l_log_write_empty_meta_block(log, ctx.pos, ctx.seq + 10); |
@@ -1096,6 +1096,8 @@ static int r5l_recovery_log(struct r5l_log *log) | |||
1096 | log->seq = ctx.seq + 11; | 1096 | log->seq = ctx.seq + 11; |
1097 | log->log_start = r5l_ring_add(log, ctx.pos, BLOCK_SECTORS); | 1097 | log->log_start = r5l_ring_add(log, ctx.pos, BLOCK_SECTORS); |
1098 | r5l_write_super(log, ctx.pos); | 1098 | r5l_write_super(log, ctx.pos); |
1099 | log->last_checkpoint = ctx.pos; | ||
1100 | log->next_checkpoint = ctx.pos; | ||
1099 | } else { | 1101 | } else { |
1100 | log->log_start = ctx.pos; | 1102 | log->log_start = ctx.pos; |
1101 | log->seq = ctx.seq; | 1103 | log->seq = ctx.seq; |
@@ -1154,6 +1156,7 @@ create: | |||
1154 | if (create_super) { | 1156 | if (create_super) { |
1155 | log->last_cp_seq = prandom_u32(); | 1157 | log->last_cp_seq = prandom_u32(); |
1156 | cp = 0; | 1158 | cp = 0; |
1159 | r5l_log_write_empty_meta_block(log, cp, log->last_cp_seq); | ||
1157 | /* | 1160 | /* |
1158 | * Make sure super points to correct address. Log might have | 1161 | * Make sure super points to correct address. Log might have |
1159 | * data very soon. If super hasn't correct log tail address, | 1162 | * data very soon. If super hasn't correct log tail address, |
@@ -1168,6 +1171,7 @@ create: | |||
1168 | if (log->max_free_space > RECLAIM_MAX_FREE_SPACE) | 1171 | if (log->max_free_space > RECLAIM_MAX_FREE_SPACE) |
1169 | log->max_free_space = RECLAIM_MAX_FREE_SPACE; | 1172 | log->max_free_space = RECLAIM_MAX_FREE_SPACE; |
1170 | log->last_checkpoint = cp; | 1173 | log->last_checkpoint = cp; |
1174 | log->next_checkpoint = cp; | ||
1171 | 1175 | ||
1172 | __free_page(page); | 1176 | __free_page(page); |
1173 | 1177 | ||