mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
fs: hugetlbfs: support poisoned recover from hugetlbfs_migrate_folio()
This is similar to __migrate_folio(), use folio_mc_copy() in HugeTLB folio migration to avoid panic when copy from poisoned folio. Link: https://lkml.kernel.org/r/20240626085328.608006-6-wangkefeng.wang@huawei.com Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> Cc: Alistair Popple <apopple@nvidia.com> Cc: Benjamin LaHaise <bcrl@kvack.org> Cc: David Hildenbrand <david@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jane Chu <jane.chu@oracle.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: Jiaqi Yan <jiaqiyan@google.com> Cc: Lance Yang <ioworker0@gmail.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Miaohe Lin <linmiaohe@huawei.com> Cc: Muchun Song <muchun.song@linux.dev> Cc: Naoya Horiguchi <nao.horiguchi@gmail.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
060913999d
commit
f00b295b9b
@ -1128,7 +1128,7 @@ static int hugetlbfs_migrate_folio(struct address_space *mapping,
|
||||
hugetlb_set_folio_subpool(src, NULL);
|
||||
}
|
||||
|
||||
folio_migrate_copy(dst, src);
|
||||
folio_migrate_flags(dst, src);
|
||||
|
||||
return MIGRATEPAGE_SUCCESS;
|
||||
}
|
||||
|
10
mm/migrate.c
10
mm/migrate.c
@ -550,10 +550,16 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,
|
||||
struct folio *dst, struct folio *src)
|
||||
{
|
||||
XA_STATE(xas, &mapping->i_pages, folio_index(src));
|
||||
int expected_count;
|
||||
int rc, expected_count = folio_expected_refs(mapping, src);
|
||||
|
||||
if (folio_ref_count(src) != expected_count)
|
||||
return -EAGAIN;
|
||||
|
||||
rc = folio_mc_copy(dst, src);
|
||||
if (unlikely(rc))
|
||||
return rc;
|
||||
|
||||
xas_lock_irq(&xas);
|
||||
expected_count = folio_expected_refs(mapping, src);
|
||||
if (!folio_ref_freeze(src, expected_count)) {
|
||||
xas_unlock_irq(&xas);
|
||||
return -EAGAIN;
|
||||
|
Loading…
Reference in New Issue
Block a user