On 1/24/23 10:30 PM, Peter Xu wrote:
On Mon, Jan 23, 2023 at 05:18:13PM +0500, Muhammad Usama Anjum wrote:
- if (IS_GET_OP(p) && p->max_pages && (p->found_pages == p->max_pages))
return -ENOSPC;
This is the function to test "whether the walker should walk the vma specified". This check should IIUC be meaningless because found_pages doesn't boost during vma switching, while OTOH your pmd walker fn should do proper check when increasing found_pages and return -ENOSPC properly when the same condition met. That should be enough, IMHO.
This check is needed in case we want to abort the walk at once. We return negative value from here which aborts the walk. Returning negative value from pmd_entry doesn't abort the walk. So this check is needed in the test_walk.
Why? What I see locally is (walk_pmd_range):
if (ops->pmd_entry) err = ops->pmd_entry(pmd, addr, next, walk); if (err) break;
Sorry, mistake on my part. I'll correct it in next version (v9).
Thanks,