On Fri, Sep 23, 2022 at 05:51:49PM -0600, Logan Gunthorpe wrote: > And on further consideration I really think the correct error return is > important here. This will be a user facing error that'll be easy enough > to hit: think code that might be run on any file and if the file is > hosted on a block device that doesn't support P2PDMA then the user > will see the very uninformative "Cannot allocate memory" error. > > Userspace code that's written for purpose can look at the EREMOTEIO error > and tell the user something useful, if we return the correct error. > If we return ENOMEM in this case, that is not possible because > lots of things might have caused that error. That is reasonable, but I'd still prefer to see it done more centrally. >> If we know PIN/GET is not set then we don't even need to call the >> function because it is a NOP. > That's not what the documentation for the function says: > "Either FOLL_PIN or FOLL_GET (or neither) may be set... Return: true for success, > or if no action was required (if neither FOLL_PIN nor FOLL_GET was set, nothing > is done)." I mean the way the code is structured is at the top of the call chain the PIN/GET/0 is decided and then the callchain is run. All the callsites of try_grab_page() must be safe to call under FOLL_PIN because their caller is making the decision what flag to use. Jason