Lines Matching refs:rq
59 static int z_erofs_lz4_prepare_dstpages(struct z_erofs_decompress_req *rq, in z_erofs_lz4_prepare_dstpages() argument
63 PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT; in z_erofs_lz4_prepare_dstpages()
68 EROFS_SB(rq->sb)->lz4.max_distance_pages; in z_erofs_lz4_prepare_dstpages()
74 struct page *const page = rq->out[i]; in z_erofs_lz4_prepare_dstpages()
84 availables[top++] = rq->out[i - lz4_max_distance_pages]; in z_erofs_lz4_prepare_dstpages()
110 rq->out[i] = victim; in z_erofs_lz4_prepare_dstpages()
115 static void *z_erofs_lz4_handle_inplace_io(struct z_erofs_decompress_req *rq, in z_erofs_lz4_handle_inplace_io() argument
124 inputsize = rq->inputsize; in z_erofs_lz4_handle_inplace_io()
126 oend = rq->pageofs_out + rq->outputsize; in z_erofs_lz4_handle_inplace_io()
130 if (rq->inplace_io) { in z_erofs_lz4_handle_inplace_io()
131 if (rq->partial_decoding || !support_0padding || in z_erofs_lz4_handle_inplace_io()
136 DBG_BUGON(rq->in[i] == NULL); in z_erofs_lz4_handle_inplace_io()
138 if (rq->out[j] == rq->in[i]) in z_erofs_lz4_handle_inplace_io()
149 src = erofs_vm_map_ram(rq->in, nrpages_in); in z_erofs_lz4_handle_inplace_io()
157 in = rq->in; in z_erofs_lz4_handle_inplace_io()
166 total = rq->inputsize; in z_erofs_lz4_handle_inplace_io()
185 static int z_erofs_lz4_decompress_mem(struct z_erofs_decompress_req *rq, in z_erofs_lz4_decompress_mem() argument
193 DBG_BUGON(*rq->in == NULL); in z_erofs_lz4_decompress_mem()
194 headpage = kmap_atomic(*rq->in); in z_erofs_lz4_decompress_mem()
199 if (erofs_sb_has_lz4_0padding(EROFS_SB(rq->sb))) { in z_erofs_lz4_decompress_mem()
206 if (inputmargin >= rq->inputsize) { in z_erofs_lz4_decompress_mem()
212 rq->inputsize -= inputmargin; in z_erofs_lz4_decompress_mem()
213 src = z_erofs_lz4_handle_inplace_io(rq, headpage, &inputmargin, in z_erofs_lz4_decompress_mem()
219 if (rq->partial_decoding || !support_0padding) in z_erofs_lz4_decompress_mem()
221 rq->inputsize, rq->outputsize, rq->outputsize); in z_erofs_lz4_decompress_mem()
224 rq->inputsize, rq->outputsize); in z_erofs_lz4_decompress_mem()
226 if (ret != rq->outputsize) { in z_erofs_lz4_decompress_mem()
227 erofs_err(rq->sb, "failed to decompress %d in[%u, %u] out[%u]", in z_erofs_lz4_decompress_mem()
228 ret, rq->inputsize, inputmargin, rq->outputsize); in z_erofs_lz4_decompress_mem()
231 16, 1, src + inputmargin, rq->inputsize, true); in z_erofs_lz4_decompress_mem()
233 16, 1, out, rq->outputsize, true); in z_erofs_lz4_decompress_mem()
236 memset(out + ret, 0, rq->outputsize - ret); in z_erofs_lz4_decompress_mem()
245 vm_unmap_ram(src, PAGE_ALIGN(rq->inputsize) >> PAGE_SHIFT); in z_erofs_lz4_decompress_mem()
255 static int z_erofs_lz4_decompress(struct z_erofs_decompress_req *rq, in z_erofs_lz4_decompress() argument
259 PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT; in z_erofs_lz4_decompress()
265 if (rq->inputsize <= PAGE_SIZE && nrpages_out == 1 && !rq->inplace_io) { in z_erofs_lz4_decompress()
266 DBG_BUGON(!*rq->out); in z_erofs_lz4_decompress()
267 dst = kmap_atomic(*rq->out); in z_erofs_lz4_decompress()
273 ret = z_erofs_lz4_prepare_dstpages(rq, pagepool); in z_erofs_lz4_decompress()
277 dst = page_address(*rq->out); in z_erofs_lz4_decompress()
282 dst = erofs_vm_map_ram(rq->out, nrpages_out); in z_erofs_lz4_decompress()
288 ret = z_erofs_lz4_decompress_mem(rq, dst + rq->pageofs_out); in z_erofs_lz4_decompress()
297 static int z_erofs_shifted_transform(struct z_erofs_decompress_req *rq, in z_erofs_shifted_transform() argument
301 PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT; in z_erofs_shifted_transform()
302 const unsigned int righthalf = PAGE_SIZE - rq->pageofs_out; in z_erofs_shifted_transform()
310 if (rq->out[0] == *rq->in) { in z_erofs_shifted_transform()
315 src = kmap_atomic(*rq->in); in z_erofs_shifted_transform()
316 if (rq->out[0]) { in z_erofs_shifted_transform()
317 dst = kmap_atomic(rq->out[0]); in z_erofs_shifted_transform()
318 memcpy(dst + rq->pageofs_out, src, righthalf); in z_erofs_shifted_transform()
323 DBG_BUGON(!rq->out[1]); in z_erofs_shifted_transform()
324 if (rq->out[1] == *rq->in) { in z_erofs_shifted_transform()
325 memmove(src, src + righthalf, rq->pageofs_out); in z_erofs_shifted_transform()
327 dst = kmap_atomic(rq->out[1]); in z_erofs_shifted_transform()
328 memcpy(dst, src + righthalf, rq->pageofs_out); in z_erofs_shifted_transform()
353 int z_erofs_decompress(struct z_erofs_decompress_req *rq, in z_erofs_decompress() argument
356 return decompressors[rq->alg].decompress(rq, pagepool); in z_erofs_decompress()