<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 17, 2018 at 10:14 PM, Michal Hocko <span dir="ltr"><<a href="mailto:mhocko@suse.com" target="_blank">mhocko@suse.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue 17-04-18 15:03:00, Michal Hocko wrote:<br>
> On Tue 17-04-18 19:06:15, Li Wang wrote:<br>
> [...]<br>
> > diff --git a/mm/migrate.c b/mm/migrate.c<br>
> > index f65dd69..2b315fc 100644<br>
> > --- a/mm/migrate.c<br>
> > +++ b/mm/migrate.c<br>
> > @@ -1608,7 +1608,7 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,<br>
> >                     continue;<br>
> >  <br>
> >             err = store_status(status, i, err, 1);<br>
> > -           if (err)<br>
> > +           if (!err)<br>
> >                     goto out_flush;<br>
> <br>
> This change just doesn't make any sense to me. Why should we bail out if<br>
> the store_status is successul? I am trying to wrap my head around the<br>
> test case. 6b9d757ecafc ("mm, numa: rework do_pages_move") tried to<br>
> explain that move_pages has some semantic issues and the new<br>
> implementation might be not 100% replacement. Anyway I am studying the<br>
> test case to come up with a proper fix.<br>
<br>
</span>OK, I get what the test cases does. I've failed to see the subtle<br>
difference between alloc_pages_on_node and numa_alloc_onnode. The later<br>
doesn't faul in anything.<br>
<br>
Why are we getting EPERM is quite not yet clear to me.<br>
add_page_for_migration uses FOLL_DUMP which should return EFAULT on<br>
zero pages (no_page_table()).<br>
<br>
        err = PTR_ERR(page);<br>
        if (IS_ERR(page))<br>
                goto out;<br>
<br>
therefore bails out from add_page_for_migration and store_status should<br>
store that value. There shouldn't be any EPERM on the way.<br></blockquote><div><br></div><div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">Yes, I print the the return value and confirmed the add_page_for_migration()​</div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">do right things for zero page. and after store_status(...) the status saves -EFAULT.</div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">So I did the change above.</div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default"><br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Let me try to reproduce and see what is going on. Btw. which kernel do<br>
you try this on?<br>
<div class="HOEnZb"><div class="h5"></div></div></blockquote><div><br></div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​The latest mainline kernel-4.17-rc1.</div></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Li Wang<br><a href="mailto:liwang@redhat.com" target="_blank">liwang@redhat.com</a></div>
</div></div>