Re: [PATCH 4/4] md/raid5-cache: adjust the write position of the empty block and mark it as a checkpoint

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 30, 2016 at 12:03:14PM +0800, JackieLiu wrote:
> 
> > 在 2016年11月30日,06:31,Shaohua Li <shli@xxxxxxxxxx> 写道:
> > 
> > On Mon, Nov 28, 2016 at 04:19:21PM +0800, JackieLiu wrote:
> >> When recovery is complete, we write an empty block and record his
> >> position first, then make the data-only stripes rewritten done,
> >> the location of the empty block as the last checkpoint position
> >> to write into the super block. And we should update last_checkpoint
> >> to this empty block position.
> >> ...
> >> +	pos = ctx.pos;
> >> +	r5l_log_write_empty_meta_block(log, ctx.pos, (ctx.seq += 10));
> > 
> > hmm, move the ctx.seq += 10 out please
> 
> yep, if this patch is OK,I will resend an appropriate patch.
> 
> >> +	ctx.pos = r5l_ring_add(log, ctx.pos, BLOCK_SECTORS);
> >> +
> >> 	if ((ctx.data_only_stripes == 0) && (ctx.data_parity_stripes == 0))
> >> 		pr_debug("md/raid:%s: starting from clean shutdown\n",
> >> 			 mdname(mddev));
> >> @@ -2167,9 +2171,9 @@ static int r5l_recovery_log(struct r5l_log *log)
> >> 
> >> 	log->log_start = ctx.pos;
> >> 	log->next_checkpoint = ctx.pos;
> >> +	log->last_checkpoint = pos;
> >> 	log->seq = ctx.seq;
> >> -	r5l_log_write_empty_meta_block(log, ctx.pos, ctx.seq);
> >> -	r5l_write_super(log, ctx.pos);
> >> +	r5l_write_super(log, pos);
> >> 	return 0;
> >> }
> > 
> > Applied the first 3 patches in the series. This one looks good too, but why we
> > always create the empty meta block? It's only required when we don't rewrite
> > the data. Eg, the data_only_stripes == 0.
> > 
> > Thanks,
> > Shaohua
> 
> As you said, when data_only_stripes != 0, does not need to write an empty 
> meta block, but we need to calculate the position of the first list member and
> save it.  at the same time, when data_only_stripes == 0, then you need to write
> an empty block, and let the super block pointing to him; In any case, Since 
> there is a possibility that invalid blocks are connected to valid blocks, we still 
> need to add 10 to them.
> 
> In my option, if this empty block has been added, we just let the super block 
> pointing to him, everything is OK now, the code is more clean, and the logic 
> is clear.

I'd prefer not writting the empty block unconditionally. It's unnecessary and
confusing reading the code. Don't think a 'if () write_empty_block' makes the
logic complecated.

Thanks,
Shaohua
--
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



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux