]> www.infradead.org Git - users/hch/xfs.git/commit
mm: gup: fix infinite loop within __get_longterm_locked
authorZhaoyang Huang <zhaoyang.huang@unisoc.com>
Tue, 21 Jan 2025 02:01:59 +0000 (10:01 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 1 Feb 2025 11:53:27 +0000 (03:53 -0800)
commit1aaf8c122918aa8897605a9aa1e8ed6600d6f930
tree8590876a0f92e4c45ef7a7a9b32b3b3faaf38e31
parent498c48c66eb600535f1221652509eefb2dce7770
mm: gup: fix infinite loop within __get_longterm_locked

We can run into an infinite loop in __get_longterm_locked() when
collect_longterm_unpinnable_folios() finds only folios that are isolated
from the LRU or were never added to the LRU.  This can happen when all
folios to be pinned are never added to the LRU, for example when
vm_ops->fault allocated pages using cma_alloc() and never added them to
the LRU.

Fix it by simply taking a look at the list in the single caller, to see if
anything was added.

[zhaoyang.huang@unisoc.com: move definition of local]
Link: https://lkml.kernel.org/r/20250122012604.3654667-1-zhaoyang.huang@unisoc.com
Link: https://lkml.kernel.org/r/20250121020159.3636477-1-zhaoyang.huang@unisoc.com
Fixes: 67e139b02d99 ("mm/gup.c: refactor check_and_migrate_movable_pages()")
Signed-off-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
Reviewed-by: John Hubbard <jhubbard@nvidia.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Suggested-by: David Hildenbrand <david@redhat.com>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Aijun Sun <aijun.sun@unisoc.com>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/gup.c