mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
UPSTREAM: erofs: simplify z_erofs_transform_plain()
Use memcpy_to_page() instead of open-coding them.
In addition, add a missing flush_dcache_page() even though almost all
modern architectures clear `PG_dcache_clean` flag for new file cache
pages so that it doesn't change anything in practice.
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Yue Hu <huyue2@coolpad.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20230627161240.331-2-hsiangkao@linux.alibaba.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Bug: 318378021
(cherry picked from commit c5539762f3)
Change-Id: I4cb665b592936502ca95e2aee20e1c3a56103ff5
Signed-off-by: Sandeep Dhavale <dhavale@google.com>
This commit is contained in:
committed by
Treehugger Robot
parent
187d034575
commit
365ca16da2
@@ -328,7 +328,7 @@ static int z_erofs_transform_plain(struct z_erofs_decompress_req *rq,
|
|||||||
const unsigned int lefthalf = rq->outputsize - righthalf;
|
const unsigned int lefthalf = rq->outputsize - righthalf;
|
||||||
const unsigned int interlaced_offset =
|
const unsigned int interlaced_offset =
|
||||||
rq->alg == Z_EROFS_COMPRESSION_SHIFTED ? 0 : rq->pageofs_out;
|
rq->alg == Z_EROFS_COMPRESSION_SHIFTED ? 0 : rq->pageofs_out;
|
||||||
unsigned char *src, *dst;
|
u8 *src;
|
||||||
|
|
||||||
if (outpages > 2 && rq->alg == Z_EROFS_COMPRESSION_SHIFTED) {
|
if (outpages > 2 && rq->alg == Z_EROFS_COMPRESSION_SHIFTED) {
|
||||||
DBG_BUGON(1);
|
DBG_BUGON(1);
|
||||||
@@ -341,22 +341,19 @@ static int z_erofs_transform_plain(struct z_erofs_decompress_req *rq,
|
|||||||
}
|
}
|
||||||
|
|
||||||
src = kmap_local_page(rq->in[inpages - 1]) + rq->pageofs_in;
|
src = kmap_local_page(rq->in[inpages - 1]) + rq->pageofs_in;
|
||||||
if (rq->out[0]) {
|
if (rq->out[0])
|
||||||
dst = kmap_local_page(rq->out[0]);
|
memcpy_to_page(rq->out[0], rq->pageofs_out,
|
||||||
memcpy(dst + rq->pageofs_out, src + interlaced_offset,
|
src + interlaced_offset, righthalf);
|
||||||
righthalf);
|
|
||||||
kunmap_local(dst);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outpages > inpages) {
|
if (outpages > inpages) {
|
||||||
DBG_BUGON(!rq->out[outpages - 1]);
|
DBG_BUGON(!rq->out[outpages - 1]);
|
||||||
if (rq->out[outpages - 1] != rq->in[inpages - 1]) {
|
if (rq->out[outpages - 1] != rq->in[inpages - 1]) {
|
||||||
dst = kmap_local_page(rq->out[outpages - 1]);
|
memcpy_to_page(rq->out[outpages - 1], 0, src +
|
||||||
memcpy(dst, interlaced_offset ? src :
|
(interlaced_offset ? 0 : righthalf),
|
||||||
(src + righthalf), lefthalf);
|
lefthalf);
|
||||||
kunmap_local(dst);
|
|
||||||
} else if (!interlaced_offset) {
|
} else if (!interlaced_offset) {
|
||||||
memmove(src, src + righthalf, lefthalf);
|
memmove(src, src + righthalf, lefthalf);
|
||||||
|
flush_dcache_page(rq->in[inpages - 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
kunmap_local(src);
|
kunmap_local(src);
|
||||||
|
|||||||
Reference in New Issue
Block a user