/*
* - applied_type == 0 if no supported algorithms
* found during the previous compress_chunk call
- * - last chunk in the request is not compressed to
- * preserve the right size of object
*/
if (clpage->cp_comp_type != LL_COMPR_TYPE_NONE &&
- applied_type && (pga_i != *page_count - 1)) {
+ applied_type) {
done = compress_chunk(obd_name, src,
src_size, dst, &dst_size,
wrkmem,
CDEBUG(D_SEC,
"%s: rc %d: inode "DFID"\n",
obd_name, rc, oa->o_parent_seq,
- oa->o_parent_oid,
- oa->o_parent_ver);
+ oa->o_parent_oid, oa->o_parent_ver);
CDEBUG(D_SEC,
"Compressed %u, plain %u\n",
unsigned int src_size;
unsigned int dst_size;
int pages_in_chunk;
+ int pages_left;
char *src = NULL;
char *dst = NULL;
int chunk_bits;
if (src == NULL || dst == NULL)
GOTO(out, rc = -ENOMEM);
}
+ pages_left = ((page_count - i) > pages_in_chunk) ?
+ pages_in_chunk : page_count - i;
- LASSERT((page_count - i) >= pages_in_chunk);
- CDEBUG(D_SEC, "Merge chunk start %i, src: %px\n", i, src);
-
- merge_chunk(pga, i, pages_in_chunk, src,
- &src_size);
+ CDEBUG(D_SEC, "Merge chunk [%i, %i], src: %px\n", i,
+ i + pages_left - 1, src);
+ merge_chunk(pga, i, pages_left, src, &src_size);
LASSERT(src_size <= chunk_size);
dst_size = 2 * chunk_size;
CDEBUG(D_SEC, "Compressed size %lu, type %i\n",
dst_size, done);
LASSERT(dst_size <= chunk_size);
- unmerge_chunk(pga, i, pages_in_chunk,
+ unmerge_chunk(pga, i, pages_left,
dst, dst_size);
count++;