[Cluster-devel] [PATCH v5 03/12] Turn fault_in_pages_{readable, writeable} into fault_in_{readable, writeable}
Linus Torvalds
torvalds at linux-foundation.org
Tue Aug 3 19:43:11 UTC 2021
On Tue, Aug 3, 2021 at 12:18 PM Andreas Gruenbacher <agruenba at redhat.com> wrote:
>
> Turn fault_in_pages_{readable,writeable} into versions that return the number
> of bytes faulted in instead of returning a non-zero value when any of the
> requested pages couldn't be faulted in.
Ugh. This ends up making most users have horribly nasty conditionals.
I think I suggested (or maybe that was just my internal voice and I
never actually vocalized it) using the same semantics as
"copy_to/from_user()" for fault_in_pages_{readable|writable}().
Namely to return the number of bytes *not* faulted in.
That makes it trivial to test "did I get everything" - becasue zero
means "nothing failed" and remains the "complete success" marker.
And it still allows for the (much less common) case of "ok, I need to
know about partial failures".
So instead of this horror:
- if (!fault_in_pages_writeable(buf_fx, fpu_user_xstate_size))
+ if (fault_in_writeable(buf_fx, fpu_user_xstate_size) ==
+ fpu_user_xstate_size)
you'd just have
- if (!fault_in_pages_writeable(buf_fx, fpu_user_xstate_size))
+ if (!fault_in_writeable(buf_fx, fpu_user_xstate_size))
because zero would continue to be a marker of success.
Linus
More information about the Cluster-devel
mailing list