Skip to content

Commit

Permalink
Bug fix in qat_compress.c when compressed size is < 4KB
Browse files Browse the repository at this point in the history
When the 128KB block is compressed to less than 4KB, the pointer
to the Footer is not in the end of the compressed buffer, that's
because the Header offset was added twice for this case. So there
is a gap between the Footer and the compressed buffer.
1. Always compute the Footer pointer address from the start of the
last page.
2. Remove the un-used workaroud code which has been verified fixed
with the latest driver and this fix.

Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: George Melikov <[email protected]>
Signed-off-by: Weigang Li <[email protected]>
Closes openzfs#6827
  • Loading branch information
wli5 authored and tonyhutter committed Nov 20, 2017
1 parent b2d6332 commit 9add19b
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions module/zfs/qat_compress.c
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,10 @@ qat_compress(qat_compress_dir_t dir, char *src, int src_len,
+ ZLIB_FOOT_SZ > PAGE_SIZE)
goto fail;

flat_buf_dst->pData += (compressed_sz + hdr_sz) % PAGE_SIZE;
/* 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;
Expand All @@ -505,9 +508,6 @@ qat_compress(qat_compress_dir_t dir, char *src, int src_len,

*c_len = compressed_sz + dc_results.produced + hdr_sz;

if (*c_len < PAGE_SIZE)
*c_len = 8 * PAGE_SIZE;

QAT_STAT_INCR(comp_total_out_bytes, *c_len);

ret = 0;
Expand Down

0 comments on commit 9add19b

Please sign in to comment.