Skip to content

Commit

Permalink
Modify checksum obtain method of QAT
Browse files Browse the repository at this point in the history
CpaDcGeneratefooter function that obtain the checksum code
does not support the CPA_DC_STATELESS mode. So we get the
adler32 chencksum of the end of the zlib from dc_results.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Chengfei Zhu <chengfeix.zhu@intel.com>
Signed-off-by: hedong.zhang <h_d_zhang@163.com>
Closes openzfs#12343
  • Loading branch information
hedongzhang authored and behlendorf committed Aug 23, 2021
1 parent 1a586ed commit e90a3e5
Showing 1 changed file with 4 additions and 23 deletions.
27 changes: 4 additions & 23 deletions module/os/linux/zfs/qat_compress.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,30 +419,11 @@ qat_compress_impl(qat_compress_dir_t dir, char *src, int src_len,
goto fail;
}

flat_buf_dst = (CpaFlatBuffer *)(buf_list_dst + 1);
/* move to the last page */
flat_buf_dst += (compressed_sz + hdr_sz) >> PAGE_SHIFT;
/* get adler32 checksum and append footer */
*(Cpa32U*)(dst + hdr_sz + compressed_sz) =
BSWAP_32(dc_results.checksum);

/* no space for gzip footer in the last page */
if (((compressed_sz + hdr_sz) % PAGE_SIZE)
+ ZLIB_FOOT_SZ > PAGE_SIZE) {
status = CPA_STATUS_INCOMPRESSIBLE;
goto fail;
}

/* jump to the end of the buffer and append footer */
flat_buf_dst->pData =
(char *)((unsigned long)flat_buf_dst->pData & PAGE_MASK)
+ ((compressed_sz + hdr_sz) % PAGE_SIZE);
flat_buf_dst->dataLenInBytes = ZLIB_FOOT_SZ;

dc_results.produced = 0;
status = cpaDcGenerateFooter(session_handle,
flat_buf_dst, &dc_results);
if (status != CPA_STATUS_SUCCESS)
goto fail;

*c_len = compressed_sz + dc_results.produced + hdr_sz;
*c_len = hdr_sz + compressed_sz + ZLIB_FOOT_SZ;
QAT_STAT_INCR(comp_total_out_bytes, *c_len);
} else {
ASSERT3U(dir, ==, QAT_DECOMPRESS);
Expand Down

0 comments on commit e90a3e5

Please sign in to comment.