Changes since last update:
- Resolve 3 regressions due to recent cleanups: Fix error handling due to avoiding sb_bread in erofs_read_superblock; Fix locking in erofs_get_meta_page; Fix mis-inplace behavior due to decompression frontend cleanup. - Update sub-entries in MAINTAINERS in order to better blame. -----BEGIN PGP SIGNATURE----- iIwEABYIADQWIQThPAmQN9sSA0DVxtI5NzHcH7XmBAUCXZLyoxYcZ2FveGlhbmcy NUBodWF3ZWkuY29tAAoJEDk3MdwfteYEjxIBANabi7UuBvkYeJsTuqFbhMskAot5 zVxvdZdxKFtompw8AP9hMEviRYrI4ZyK23/QujwSGch/g0jNuFODu8VFbN4pDQ== =Gqyg -----END PGP SIGNATURE----- Merge tag 'erofs-for-5.4-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs Pull erofs fixes from Gao Xiang: "Three patches to address regressions due to recent cleanups, mainly found by stress test on latest mainline kernel (no more regression out compared with older kernels for more than a week) One additional patch updates sub-entries in MAINTAINERS. Summary: - Fix error handling in erofs_read_superblock - Fix locking in erofs_get_meta_page - Fix inplace behavior due to decompression frontend cleanup - Update sub-entries in MAINTAINERS in order to better blame" * tag 'erofs-for-5.4-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs: erofs: fix mis-inplace determination related with noio chain erofs: fix erofs_get_meta_page locking due to a cleanup MAINTAINERS: erofs: complete sub-entries for erofs erofs: fix return value check in erofs_read_superblock()alistair/sunxi64-5.4-dsi
commit
65aa35c93c
|
@ -6112,7 +6112,10 @@ M: Gao Xiang <gaoxiang25@huawei.com>
|
||||||
M: Chao Yu <yuchao0@huawei.com>
|
M: Chao Yu <yuchao0@huawei.com>
|
||||||
L: linux-erofs@lists.ozlabs.org
|
L: linux-erofs@lists.ozlabs.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
|
||||||
|
F: Documentation/filesystems/erofs.txt
|
||||||
F: fs/erofs/
|
F: fs/erofs/
|
||||||
|
F: include/trace/events/erofs.h
|
||||||
|
|
||||||
ERRSEQ ERROR TRACKING INFRASTRUCTURE
|
ERRSEQ ERROR TRACKING INFRASTRUCTURE
|
||||||
M: Jeff Layton <jlayton@kernel.org>
|
M: Jeff Layton <jlayton@kernel.org>
|
||||||
|
|
|
@ -34,11 +34,15 @@ static void erofs_readendio(struct bio *bio)
|
||||||
|
|
||||||
struct page *erofs_get_meta_page(struct super_block *sb, erofs_blk_t blkaddr)
|
struct page *erofs_get_meta_page(struct super_block *sb, erofs_blk_t blkaddr)
|
||||||
{
|
{
|
||||||
struct inode *const bd_inode = sb->s_bdev->bd_inode;
|
struct address_space *const mapping = sb->s_bdev->bd_inode->i_mapping;
|
||||||
struct address_space *const mapping = bd_inode->i_mapping;
|
struct page *page;
|
||||||
|
|
||||||
return read_cache_page_gfp(mapping, blkaddr,
|
page = read_cache_page_gfp(mapping, blkaddr,
|
||||||
mapping_gfp_constraint(mapping, ~__GFP_FS));
|
mapping_gfp_constraint(mapping, ~__GFP_FS));
|
||||||
|
/* should already be PageUptodate */
|
||||||
|
if (!IS_ERR(page))
|
||||||
|
lock_page(page);
|
||||||
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int erofs_map_blocks_flatmode(struct inode *inode,
|
static int erofs_map_blocks_flatmode(struct inode *inode,
|
||||||
|
|
|
@ -105,9 +105,9 @@ static int erofs_read_superblock(struct super_block *sb)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
page = read_mapping_page(sb->s_bdev->bd_inode->i_mapping, 0, NULL);
|
page = read_mapping_page(sb->s_bdev->bd_inode->i_mapping, 0, NULL);
|
||||||
if (!page) {
|
if (IS_ERR(page)) {
|
||||||
erofs_err(sb, "cannot read erofs superblock");
|
erofs_err(sb, "cannot read erofs superblock");
|
||||||
return -EIO;
|
return PTR_ERR(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
sbi = EROFS_SB(sb);
|
sbi = EROFS_SB(sb);
|
||||||
|
|
|
@ -575,7 +575,7 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe,
|
||||||
struct erofs_map_blocks *const map = &fe->map;
|
struct erofs_map_blocks *const map = &fe->map;
|
||||||
struct z_erofs_collector *const clt = &fe->clt;
|
struct z_erofs_collector *const clt = &fe->clt;
|
||||||
const loff_t offset = page_offset(page);
|
const loff_t offset = page_offset(page);
|
||||||
bool tight = (clt->mode >= COLLECT_PRIMARY_HOOKED);
|
bool tight = true;
|
||||||
|
|
||||||
enum z_erofs_cache_alloctype cache_strategy;
|
enum z_erofs_cache_alloctype cache_strategy;
|
||||||
enum z_erofs_page_type page_type;
|
enum z_erofs_page_type page_type;
|
||||||
|
@ -628,8 +628,16 @@ restart_now:
|
||||||
preload_compressed_pages(clt, MNGD_MAPPING(sbi),
|
preload_compressed_pages(clt, MNGD_MAPPING(sbi),
|
||||||
cache_strategy, pagepool);
|
cache_strategy, pagepool);
|
||||||
|
|
||||||
tight &= (clt->mode >= COLLECT_PRIMARY_HOOKED);
|
|
||||||
hitted:
|
hitted:
|
||||||
|
/*
|
||||||
|
* Ensure the current partial page belongs to this submit chain rather
|
||||||
|
* than other concurrent submit chains or the noio(bypass) chain since
|
||||||
|
* those chains are handled asynchronously thus the page cannot be used
|
||||||
|
* for inplace I/O or pagevec (should be processed in strict order.)
|
||||||
|
*/
|
||||||
|
tight &= (clt->mode >= COLLECT_PRIMARY_HOOKED &&
|
||||||
|
clt->mode != COLLECT_PRIMARY_FOLLOWED_NOINPLACE);
|
||||||
|
|
||||||
cur = end - min_t(unsigned int, offset + end - map->m_la, end);
|
cur = end - min_t(unsigned int, offset + end - map->m_la, end);
|
||||||
if (!(map->m_flags & EROFS_MAP_MAPPED)) {
|
if (!(map->m_flags & EROFS_MAP_MAPPED)) {
|
||||||
zero_user_segment(page, cur, end);
|
zero_user_segment(page, cur, end);
|
||||||
|
|
Loading…
Reference in New Issue