Re: [PATCH] move_pages.2: not return ENOENT if the page are already on the target nodes

From: Yang Shi
Date: Thu Jan 02 2020 - 17:58:42 EST




On 12/30/19 7:49 PM, Eric W. Biederman wrote:
Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> writes:

On 12/18/19 2:17 AM, Michal Hocko wrote:
On Tue 17-12-19 23:36:09, John Hubbard wrote:
[...]
diff --git a/man2/move_pages.2 b/man2/move_pages.2
index 2d96468fa..1bf1053f2 100644
--- a/man2/move_pages.2
+++ b/man2/move_pages.2
@@ -191,12 +191,6 @@ was specified or an attempt was made to migrate pages of a kernel thread.
.B ENODEV
One of the target nodes is not online.
.TP
-.B ENOENT
-No pages were found that require moving.
-All pages are either already
-on the target node, not present, had an invalid address or could not be
-moved because they were mapped by multiple processes.
-.TP
.B EPERM
The caller specified
.B MPOL_MF_MOVE_ALL

...But I'm not sure if we should change the implementation, instead, so
that it *can* return ENOENT. That's the main question to resolve before
creating any more patches, I think.
I would start by dropping any note about ENOENT first. I am not really
sure there is a reasonable usecase for it but maybe somebody comes up
with something and only then we should consider it.

Feel free to add
Acked-by: Michal Hocko <mhocko@xxxxxxxx>

ideally with a kernel commit which removed the ENOENT.
A quick audit doesn't show kernel code or comment notes about ENOENT
wrongly. The status could be set as ENOENT if the page is not present
(follow_page() returns NULL), and man page does match what kernel
does.
Doesn't the function one layer up then consume the ENOENT?

No, it doesn't. The return value would be reset unconditionally by store_status(). This is what the man page patch tries to correct.


Eric