Re: [PATCH 3/3] io_uring: follow **iovec idiom in io_import_iovec

Jens Axboe
2020-07-13T21:16:31Z

On 7/13/20 3:12 PM, Pavel Begunkov wrote:
> On 14/07/2020 00:09, Jens Axboe wrote:
>> On 7/13/20 1:59 PM, Pavel Begunkov wrote:
>>> @@ -3040,8 +3040,7 @@ static int io_read(struct io_kiocb *req, bool force_nonblock,
>>> }
>>> }
>>> out_free:
>>> - if (!(req->flags & REQ_F_NEED_CLEANUP))
>>> - kfree(iovec);
>>> + kfree(iovec);
>>> return ret;
>>> }
>>
>> Faster to do:
>>
>> if (iovec)
>> kfree(iovec)
>>
>> to avoid a stupid call. Kind of crazy, but I just verified with this one
>> as well that it's worth about 1.3% CPU in my stress test.
>
> That looks crazy indeed

I suspect what needs to happen is that kfree should be something ala:

static inline void kfree(void *ptr)
{
if (ptr)
__kfree(ptr);
}

to avoid silly games like this. Needs to touch all three slab
allocators, though definitely in the trivial category.

--
Jens Axboe