Unverified Commit d42c1711 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!14060 etmem : fix page_ref count leak and head missing useing problem

Merge Pull Request from: @ci-robot 
 
PR sync from: chenrenhui <chenrenhui1@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/AMYMJSLLREQDUALKLRRHN6VKVEB5H735/ 
etmem : fix page_ref count leak and head missing useing  problem

chenrenhui (1):
  etmem : fix page_ref count leak and head missing useing  problem


-- 
2.33.0
 
https://gitee.com/openeuler/kernel/issues/IAXJCE 
 
Link:https://gitee.com/openeuler/kernel/pulls/14060

 

Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Reviewed-by: default avatarzhangyi (F) <yi.zhang@huawei.com>
Reviewed-by: default avatarLi Nan <linan122@huawei.com>
Signed-off-by: default avatarLi Nan <linan122@huawei.com>
parents 94d352bd de98c7af
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@ static ssize_t swap_pages_write(struct file *file, const char __user *buf,
			continue;

		add_page_for_swap(page, &pagelist);
		/* release the ref count we get from the get_page_from_vaddr interface */
		put_page(page);
	}

	if (!list_empty(&pagelist))
+6 −11
Original line number Diff line number Diff line
@@ -4623,7 +4623,6 @@ EXPORT_SYMBOL_GPL(check_move_unevictable_pages);
#ifdef CONFIG_ETMEM
int add_page_for_swap(struct page *page, struct list_head *pagelist)
{
	int err = -EBUSY;
	struct page *head;

	/* If the page is mapped by more than one process, do not swap it */
@@ -4634,19 +4633,15 @@ int add_page_for_swap(struct page *page, struct list_head *pagelist)
		return -EACCES;

	head = compound_head(page);
	err = isolate_lru_page(head);
	if (err) {
		put_page(page);
		return err;
	}
	put_page(page);
	if (PageUnevictable(page))
		putback_lru_page(page);
	if (isolate_lru_page(head))
		return -EBUSY;

	if (PageUnevictable(head))
		putback_lru_page(head);
	else
		list_add_tail(&head->lru, pagelist);

	err = 0;
	return err;
	return 0;
}
EXPORT_SYMBOL_GPL(add_page_for_swap);