<p>On Wed, 23 Nov 2022 10:30:34 +0800
<br>Gao Xiang <hsiangkao@linux.alibaba.com> wrote:
<br>
<br>> CBLKCNT needs to be stored for big pcluster dedupe.  Otherwise,
<br>> the decompression could fail due to incomplete compressed data.
<br>> 
<br>> Reported-by: Yue Hu <huyue2@coolpad.com>
<br>> Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
<br>
<br>Tested-by: Yue Hu <huyue2@coolpad.com>
<br>
<br>> ---
<br>> changes since v1:
<br>>  - fix potential data corruption of v1
<br>> 
<br>>  lib/compress.c | 12 +++++++++++-
<br>>  1 file changed, 11 insertions(+), 1 deletion(-)
<br>> 
<br>> diff --git a/lib/compress.c b/lib/compress.c
<br>> index 17b3213..8f4c63a 100644
<br>> --- a/lib/compress.c
<br>> +++ b/lib/compress.c
<br>> @@ -186,12 +186,22 @@ static int z_erofs_compress_dedupe(struct erofs_inode *inode,
<br>>                  if (z_erofs_dedupe_match(&dctx))
<br>>                          break;
<br>>  
<br>> +                delta = ctx->queue + ctx->head - dctx.cur;
<br>> +                /*
<br>> +                 * For big pcluster dedupe, leave two indices at least to store
<br>> +                 * CBLKCNT as the first step.  Even laterly, an one-block
<br>> +                 * decompresssion could be done as another try in practice.
<br>> +                 */
<br>> +                if (dctx.e.compressedblks > 1 &&
<br>> +                    (ctx->clusterofs + ctx->e.length - delta) % EROFS_BLKSIZ +
<br>> +                        dctx.e.length < 2 * EROFS_BLKSIZ)
<br>> +                        break;
<br>> +
<br>>                  /* fall back to noncompact indexes for deduplication */
<br>>                  inode->z_advise &= ~Z_EROFS_ADVISE_COMPACTED_2B;
<br>>                  inode->datalayout = EROFS_INODE_FLAT_COMPRESSION_LEGACY;
<br>>                  erofs_sb_set_dedupe();
<br>>  
<br>> -                delta = ctx->queue + ctx->head - dctx.cur;
<br>>                  if (delta) {
<br>>                          DBG_BUGON(delta < 0);
<br>>                          DBG_BUGON(!ctx->e.length);</p><meta data-version="editor_version_1.2.11"/><div data-zone-id="0" data-line-index="0" data-line="true" style="white-space: pre-wrap; margin-top: 4px; margin-bottom: 4px; line-height: 1.6;">------机密:此电子邮件所包含内容为酷派机密内容,并且受到法律的保护。如果您不属于以上电子邮件的目标接收者,您不得细读,使用,传播,散布或复制该电子邮件中的任何信息。如果您已经误收此电子邮件,请您立即通知我们并删除原电子邮件。 CONFIDENTIAL: This e-mail message contains information of Coolpad that is confidential and which is subject to legal privilege.If you are not the intended recipient as indicated above,you must not peruse,use, disseminate,distribute or copy any information contained in this message.If you have received this message in error, please notify us and delete the original message immediately.
</div><div data-zone-id="0" data-line-index="1" data-line="true" style="white-space: pre-wrap; margin-top: 4px; margin-bottom: 4px; line-height: 1.6;">------ 申明:本邮件所现内容,仅作为我们之间就合作的事宜进行的交流、沟通、洽谈、商议,不作为协议或承诺,一切协议及承诺必须以书面文本盖章为准。 DECLARATION:All contents of this E-mail ,are only regarded as the cooperation we have had between the exchanges, communication, negotiation and deliberation, not as a agreement or promise. All contracts and commitments must be  sealed shall prevail.
</div>