mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
erofs: insert to managed cache after adding to pcl
Previously, it could be some concern to call add_to_page_cache_lru()
with page->mapping == Z_EROFS_MAPPING_STAGING (!= NULL).
In contrast, page->private is used instead now, so partially revert
commit 5ddcee1f3a
("erofs: get rid of __stagingpage_alloc helper")
with some adaption for simplicity.
Link: https://lore.kernel.org/r/20201208095834.3133565-2-hsiangkao@redhat.com
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
This commit is contained in:
parent
6aaa7b0664
commit
bf225074ff
@ -1065,29 +1065,21 @@ static struct page *pickup_page_for_submission(struct z_erofs_pcluster *pcl,
|
||||
put_page(page);
|
||||
out_allocpage:
|
||||
page = erofs_allocpage(pagepool, gfp | __GFP_NOFAIL);
|
||||
if (!tocache || add_to_page_cache_lru(page, mc, index + nr, gfp)) {
|
||||
/* turn into temporary page if fails */
|
||||
set_page_private(page, Z_EROFS_SHORTLIVED_PAGE);
|
||||
tocache = false;
|
||||
}
|
||||
|
||||
if (oldpage != cmpxchg(&pcl->compressed_pages[nr], oldpage, page)) {
|
||||
if (tocache) {
|
||||
/* since it added to managed cache successfully */
|
||||
unlock_page(page);
|
||||
put_page(page);
|
||||
} else {
|
||||
list_add(&page->lru, pagepool);
|
||||
}
|
||||
list_add(&page->lru, pagepool);
|
||||
cond_resched();
|
||||
goto repeat;
|
||||
}
|
||||
|
||||
if (tocache) {
|
||||
attach_page_private(page, pcl);
|
||||
/* drop a ref added by allocpage (then we have 2 refs here) */
|
||||
put_page(page);
|
||||
if (!tocache || add_to_page_cache_lru(page, mc, index + nr, gfp)) {
|
||||
/* turn into temporary page if fails (1 ref) */
|
||||
set_page_private(page, Z_EROFS_SHORTLIVED_PAGE);
|
||||
goto out;
|
||||
}
|
||||
attach_page_private(page, pcl);
|
||||
/* drop a refcount added by allocpage (then we have 2 refs here) */
|
||||
put_page(page);
|
||||
|
||||
out: /* the only exit (for tracing and debugging) */
|
||||
return page;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user