linux/fs/erofs
Gao Xiang 598162d050 erofs: support decompress big pcluster for lz4 backend
Prior to big pcluster, there was only one compressed page so it'd
easy to map this. However, when big pcluster is enabled, more work
needs to be done to handle multiple compressed pages. In detail,

 - (maptype 0) if there is only one compressed page + no need
   to copy inplace I/O, just map it directly what we did before;

 - (maptype 1) if there are more compressed pages + no need to
   copy inplace I/O, vmap such compressed pages instead;

 - (maptype 2) if inplace I/O needs to be copied, use per-CPU
   buffers for decompression then.

Another thing is how to detect inplace decompression is feasable or
not (it's still quite easy for non big pclusters), apart from the
inplace margin calculation, inplace I/O page reusing order is also
needed to be considered for each compressed page. Currently, if the
compressed page is the xth page, it shouldn't be reused as [0 ...
nrpages_out - nrpages_in + x], otherwise a full copy will be triggered.

Although there are some extra optimization ideas for this, I'd like
to make big pcluster work correctly first and obviously it can be
further optimized later since it has nothing with the on-disk format
at all.

Link: https://lore.kernel.org/r/20210407043927.10623-10-xiang@kernel.org
Acked-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
2021-04-10 03:20:19 +08:00
..
compress.h erofs: force inplace I/O under low memory scenario 2020-12-09 20:42:02 +08:00
data.c erofs: don't use erofs_map_blocks() any more 2021-03-29 10:19:53 +08:00
decompressor.c erofs: support decompress big pcluster for lz4 backend 2021-04-10 03:20:19 +08:00
dir.c erofs: Replace HTTP links with HTTPS ones 2020-08-03 21:04:29 +08:00
erofs_fs.h erofs: add big physical cluster definition 2021-04-10 03:20:17 +08:00
inode.c erofs: add unsupported inode i_format check 2021-03-29 10:20:45 +08:00
internal.h erofs: support decompress big pcluster for lz4 backend 2021-04-10 03:20:19 +08:00
Kconfig erofs: introduce physical cluster slab pools 2021-04-10 03:20:16 +08:00
Makefile erofs: introduce multipage per-CPU buffers 2021-04-10 03:19:59 +08:00
namei.c erofs: use %pd instead of messing with ->d_name 2021-01-06 19:39:37 -05:00
pcpubuf.c erofs: introduce multipage per-CPU buffers 2021-04-10 03:19:59 +08:00
super.c erofs: introduce multipage per-CPU buffers 2021-04-10 03:19:59 +08:00
tagptr.h
utils.c erofs: introduce multipage per-CPU buffers 2021-04-10 03:19:59 +08:00
xattr.c erofs: initialized fields can only be observed after bit is set 2021-02-11 11:55:28 +08:00
xattr.h erofs: Replace HTTP links with HTTPS ones 2020-08-03 21:04:29 +08:00
zdata.c erofs: fix up inplace I/O pointer for big pcluster 2021-04-10 03:20:16 +08:00
zdata.h erofs: introduce physical cluster slab pools 2021-04-10 03:20:16 +08:00
zmap.c erofs: support parsing big pcluster compact indexes 2021-04-10 03:20:18 +08:00
zpvec.h erofs: Replace HTTP links with HTTPS ones 2020-08-03 21:04:29 +08:00