On Mon, Oct 24, 2016 at 04:15:59PM +0800, Zhengyuan Liu wrote: > If superblock points to an invalid meta block, r5l_load_log will set > create_super with true and create an new superblock, this runtime path > would always happen if we do no writing I/O to this array since it was > created. Writing an empty meta block could avoid this unnecessary > action at the first time we created log superblock. > > Another reason is for the corretness of log recovery. Currently we have > bellow code to guarantee log revocery to be correct. > > if (ctx.seq > log->last_cp_seq + 1) { > int ret; > > ret = r5l_log_write_empty_meta_block(log, ctx.pos, ctx.seq + 10); > if (ret) > return ret; > log->seq = ctx.seq + 11; > log->log_start = r5l_ring_add(log, ctx.pos, BLOCK_SECTORS); > r5l_write_super(log, ctx.pos); > } else { > log->log_start = ctx.pos; > log->seq = ctx.seq; > } > > If we just created a array with a journal device, log->log_start and > log->last_checkpoint should all be 0, then we write three meta block > which are valid except mid one and supposed crash happened. The ctx.seq > would equal to log->last_cp_seq + 1 and log->log_start would be set to > position of mid invalid meta block after we did a recovery, this will > lead to problems which could be avoided with this patch. This would be very unlikely, but better to fix. Applied, thanks! -- 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