Re: [v3 PATCH] mm: move_pages: return valid node id in status if the page is already on the target node

From: Yang Shi
Date: Thu Dec 05 2019 - 14:27:44 EST




On 12/5/19 11:19 AM, Qian Cai wrote:

On Dec 5, 2019, at 1:54 PM, Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> wrote:

This is because the status is not set if the page is already on the
target node, but move_pages() should return valid status as long as it
succeeds. The valid status may be errno or node id.

We can't simply initialize status array to zero since the pages may be
not on node 0. Fix it by updating status with node id which the page is
already on.
This does not look correct either.

â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.â

move_pages() should return -ENOENT instead.

Yes, we noticed this too. I had a note in v1 and v2 patch, but I forgot paste in v3, says:

John noticed another return value inconsistency between the implementation and the manpage. The manpage says it should return -ENOENT if the page is already on the target node, but it doesn't. It looks the original code didn't return -ENOENT either, I'm not sure if this is a document issue or not. Anyway this is another issue, once we confirm it we can fix it later.

And, Michal also commented to the note:

I do not remember all the details but my recollection is that there were several inconsistencies present before I touched the code and I've decided to not touch them without a clear usecase.