[PATCH v3] erofs-utils: mkfs: support fragment deduplication

Gao Xiang hsiangkao at linux.alibaba.com
Wed Nov 30 20:02:27 AEDT 2022


On Wed, Nov 30, 2022 at 04:55:34PM +0800, Yue Hu wrote:

...

> > > @@ -782,22 +846,25 @@ int erofs_write_compressed_file(struct erofs_inode *inode, int fd)
> > >  	ctx.head = ctx.tail = 0;
> > >  	ctx.clusterofs = 0;
> > >  	ctx.e.length = 0;
> > > -	remaining = inode->i_size;
> > > +	ctx.e.compressedblks = 0;
> > > +	ctx.pclustersize = z_erofs_get_max_pclusterblks(inode) * EROFS_BLKSIZ;
> > > +	ctx.remaining = inode->i_size - inode->fragment_size;
> > >  
> > > -	while (remaining) {
> > > -		const u64 readcount = min_t(u64, remaining,
> > > +	while (ctx.remaining) {
> > > +		const u64 readcount = min_t(u64, ctx.remaining,
> > >  					    sizeof(ctx.queue) - ctx.tail);
> > > +		bool fixup = ret < 0;  
> > 
> > 	drop this one;
> > 
> > >  
> > >  		ret = read(fd, ctx.queue + ctx.tail, readcount);
> > >  		if (ret != readcount) {
> > >  			ret = -errno;
> > >  			goto err_bdrop;
> > >  		}
> > > -		remaining -= readcount;
> > > +		ctx.remaining -= readcount;
> > >  		ctx.tail += readcount;
> > >  
> > > -		ret = vle_compress_one(&ctx, !remaining);  
> > 
> > 					     ret == -EAGAIN
> 
> Just move 'fixup' in 'ctx'?

Yes.

> 
> > 
> > > -		if (ret)
> > > +		ret = vle_compress_one(&ctx, fixup);
> > > +		if (ret && ret != -EAGAIN)
> > >  			goto err_free_idata;
> > >  	}
> > >  	DBG_BUGON(ctx.head != ctx.tail);
> > > @@ -807,6 +874,16 @@ int erofs_write_compressed_file(struct erofs_inode *inode, int fd)
> > >  	DBG_BUGON(compressed_blocks < !!inode->idata_size);
> > >  	compressed_blocks -= !!inode->idata_size;
> > >  
> > > +	if (inode->fragment_size && ctx.e.compressedblks) {  
> > 
> > why not moving into z_erofs_fragments_dedupe_update()?
> 
> I consider this before, it's a bit awkward for me due to non updating case.
> 
> Let me reconsider.

What does that mean? "non updating case", could you please write down
some formal words to describe this case?

Thanks,
Gao Xiang


More information about the Linux-erofs mailing list