mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 01:09:38 -05:00
mm,hwpoison: refactor madvise_inject_error
Make a proper if-else condition for {hard,soft}-offline. Signed-off-by: Oscar Salvador <osalvador@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Qian Cai <cai@lca.pw> Cc: Tony Luck <tony.luck@intel.com> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Aristeu Rozanski <aris@ruivo.org> Cc: Dave Hansen <dave.hansen@intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: Dmitry Yakunin <zeil@yandex-team.ru> Cc: Mike Kravetz <mike.kravetz@oracle.com> Link: https://lkml.kernel.org/r/20200908075626.11976-3-osalvador@suse.de Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7e27f22c9e
commit
dc7560b496
1 changed files with 13 additions and 17 deletions
30
mm/madvise.c
30
mm/madvise.c
|
@ -872,7 +872,6 @@ static long madvise_remove(struct vm_area_struct *vma,
|
|||
static int madvise_inject_error(int behavior,
|
||||
unsigned long start, unsigned long end)
|
||||
{
|
||||
struct page *page;
|
||||
struct zone *zone;
|
||||
unsigned long size;
|
||||
|
||||
|
@ -882,6 +881,7 @@ static int madvise_inject_error(int behavior,
|
|||
|
||||
for (; start < end; start += size) {
|
||||
unsigned long pfn;
|
||||
struct page *page;
|
||||
int ret;
|
||||
|
||||
ret = get_user_pages_fast(start, 1, 0, &page);
|
||||
|
@ -903,25 +903,21 @@ static int madvise_inject_error(int behavior,
|
|||
|
||||
if (behavior == MADV_SOFT_OFFLINE) {
|
||||
pr_info("Soft offlining pfn %#lx at process virtual address %#lx\n",
|
||||
pfn, start);
|
||||
|
||||
pfn, start);
|
||||
ret = soft_offline_page(pfn, MF_COUNT_INCREASED);
|
||||
if (ret)
|
||||
return ret;
|
||||
continue;
|
||||
} else {
|
||||
pr_info("Injecting memory failure for pfn %#lx at process virtual address %#lx\n",
|
||||
pfn, start);
|
||||
/*
|
||||
* Drop the page reference taken by get_user_pages_fast(). In
|
||||
* the absence of MF_COUNT_INCREASED the memory_failure()
|
||||
* routine is responsible for pinning the page to prevent it
|
||||
* from being released back to the page allocator.
|
||||
*/
|
||||
put_page(page);
|
||||
ret = memory_failure(pfn, 0);
|
||||
}
|
||||
|
||||
pr_info("Injecting memory failure for pfn %#lx at process virtual address %#lx\n",
|
||||
pfn, start);
|
||||
|
||||
/*
|
||||
* Drop the page reference taken by get_user_pages_fast(). In
|
||||
* the absence of MF_COUNT_INCREASED the memory_failure()
|
||||
* routine is responsible for pinning the page to prevent it
|
||||
* from being released back to the page allocator.
|
||||
*/
|
||||
put_page(page);
|
||||
ret = memory_failure(pfn, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue