On Thu, Feb 20, 2020 at 9:07 AM Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> wrote: > > > > On 2/10/20 1:36 AM, Michal Hocko wrote: > > On Tue 04-02-20 03:18:27, Yang Shi wrote: > >> Since commit a49bd4d71637 ("mm, numa: rework do_pages_move"), > >> the semantic of move_pages() has changed to return the number of > >> non-migrated pages if they were result of a non-fatal reasons (usually a > >> busy page). This was an unintentional change that hasn't been noticed > >> except for LTP tests which checked for the documented behavior. > >> > >> There are two ways to go around this change. We can even get back to the > >> original behavior and return -EAGAIN whenever migrate_pages is not able > >> to migrate pages due to non-fatal reasons. Another option would be to > >> simply continue with the changed semantic and extend move_pages > >> documentation to clarify that -errno is returned on an invalid input or > >> when migration simply cannot succeed (e.g. -ENOMEM, -EBUSY) or the > >> number of pages that couldn't have been migrated due to ephemeral > >> reasons (e.g. page is pinned or locked for other reasons). > >> > >> We decided to keep the second option in kernel because this behavior is in > >> place for some time without anybody complaining and possibly new users > >> depending on it. Also it allows to have a slightly easier error handling > >> as the caller knows that it is worth to retry when err > 0. > >> > >> Update man pages to reflect the new semantic. > >> > >> Cc: Michal Hocko <mhocko@xxxxxxxx> > >> Cc: Michael Kerrisk <mtk.manpages@xxxxxxxxx> > >> Signed-off-by: Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> > Hi Michale, Maybe my work email went to your spam folder. So, ping with my personal email. Would you please consider take this patch? Thanks, Yang > Hi Michael, > > Would you please consider take this patch? The kernel change has been > upstreamed. > > Thanks, > Yang > > > Acked-by: Michal Hocko <mhocko@xxxxxxxx> > > > >> --- > >> v3: * Fixed the comments from David Hildenbrand. > >> * Fixed the inaccuracy about pre-initialized status array values. > >> v2: * Added notes about status array per Michal. > >> * Added Michal's Acked-by. > >> > >> man2/move_pages.2 | 10 ++++++++-- > >> 1 file changed, 8 insertions(+), 2 deletions(-) > >> > >> diff --git a/man2/move_pages.2 b/man2/move_pages.2 > >> index 1bf1053..50c83a4 100644 > >> --- a/man2/move_pages.2 > >> +++ b/man2/move_pages.2 > >> @@ -104,7 +104,9 @@ pages that need to be moved. > >> is an array of integers that return the status of each page. > >> The array contains valid values only if > >> .BR move_pages () > >> -did not return an error. > >> +did not return an error. Pre-initialization of the array to the value > >> +which cannot represent a real numa node or valid error of status array > >> +could help to identify pages that have been migrated > >> .PP > >> .I flags > >> specify what types of pages to move. > >> @@ -164,9 +166,13 @@ returns zero. > >> .\" do the right thing? > >> On error, it returns \-1, and sets > >> .I errno > >> -to indicate the error. > >> +to indicate the error. If positive value is returned, it is the number of > >> +non-migrated pages. > >> .SH ERRORS > >> .TP > >> +.B Positive value > >> +The number of non-migrated pages if they were the result of non-fatal > >> +reasons (since version 4.17). > >> .B E2BIG > >> Too many pages to move. > >> Since Linux 2.6.29, > >> -- > >> 1.8.3.1 >