hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I9QRNR CVE: NA
--------------------------------
In get_swap_pages(), we select the swap device based on the priority by default. If two or more devices have the same priority, their positions in the avail_lists will move in a circle in plist_requeue(). After set memory.swapfile in a memory cgroup and the priority of the matched swap is less than the priority of these swap, the loop will be confined to these swaps with same priority and can't select the specified swap forever.
Fix the infinite loop by skip the unmatched swap before plist_requeue().
Fixes: 682fc25deeed ("mm/swapfile: introduce per-memcg swapfile control") Signed-off-by: Liu Shixin liushixin2@huawei.com --- mm/swapfile.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/mm/swapfile.c b/mm/swapfile.c index 4aa7339bb365..a10c67728e46 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1173,15 +1173,13 @@ int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size, start_over: node = numa_node_id(); plist_for_each_entry_safe(si, next, &swap_avail_heads[node], avail_lists[node]) { + if (should_skip_swap_type(si->type, type)) + goto nextsi; + /* requeue si to after same-priority siblings */ plist_requeue(&si->avail_lists[node], &swap_avail_heads[node]); spin_unlock(&swap_avail_lock); spin_lock(&si->lock); - if (should_skip_swap_type(si->type, type)) { - spin_unlock(&si->lock); - spin_lock(&swap_avail_lock); - goto nextsi; - } if (!si->highest_bit || !(si->flags & SWP_WRITEOK)) { spin_lock(&swap_avail_lock); if (plist_node_empty(&si->avail_lists[node])) {
反馈: 您发送到kernel@openeuler.org的补丁/补丁集,已成功转换为PR! PR链接地址: https://gitee.com/openeuler/kernel/pulls/7588 邮件列表地址:https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/5...
FeedBack: The patch(es) which you have sent to kernel@openeuler.org mailing list has been converted to a pull request successfully! Pull request link: https://gitee.com/openeuler/kernel/pulls/7588 Mailing list address: https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/5...