mm: migrate high-order folios in swap cache correctly
Large folios occupy N consecutive entries in the swap cache instead of using multi-index entries like the page cache. However, if a large folio is re-added to the LRU list, it can be migrated. The migration code was not aware of the difference between the swap cache and the page cache and assumed that a single xas_store() would be sufficient. This leaves potentially many stale pointers to the now-migrated folio in the swap cache, which can lead to almost arbitrary data corruption in the future. This can also manifest as infinite loops with the RCU read lock held. [willy@infradead.org: modifications to the changelog & tweaked the fix] Fixes: 3417013e ("mm/migrate: Add folio_migrate_mapping()") Link: https://lkml.kernel.org/r/20231214045841.961776-1-willy@infradead.org Signed-off-by:Charan Teja Kalla <quic_charante@quicinc.com> Signed-off-by:
Matthew Wilcox (Oracle) <willy@infradead.org> Reported-by:
Charan Teja Kalla <quic_charante@quicinc.com...>
parent
4249f13c
Please register or sign in to comment