They can return the rval, but they can't return anything else (like, say, an output bufferlist). :) If there's a good reason for it to be in the top-level ObjectOperation, that's fine, but the function should somehow check it's not being used with writes in that case.