If you're going to allow `size` to vary between those two options, then I might have expected the `size` parameter to be allowed to be any integer in the range `[orig_requested_size, usable_size_result]` (inclusive).

Otherwise ... if I start using a little bit more of the available capacity, but not all of it, then I need to ensure I pass pack `usable_size_result` always, instead of the amount of the capacity that I ended up taking so far?