* [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
@ 2025-03-01 0:16 Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 0:16 UTC (permalink / raw)
To: Jens Axboe, Pavel Begunkov; +Cc: Caleb Sander Mateos, io-uring, linux-kernel
Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
other files.
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
---
io_uring/rsrc.c | 4 ++--
io_uring/rsrc.h | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
index 45bfb37bca1e..4c4f57cd77f9 100644
--- a/io_uring/rsrc.c
+++ b/io_uring/rsrc.c
@@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
}
return 0;
}
-static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
- unsigned issue_flags)
+struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
+ unsigned issue_flags)
{
struct io_ring_ctx *ctx = req->ctx;
struct io_rsrc_node *node;
if (req->flags & REQ_F_BUF_NODE)
diff --git a/io_uring/rsrc.h b/io_uring/rsrc.h
index 6fe7b9e615bf..8f912aa6bcc9 100644
--- a/io_uring/rsrc.h
+++ b/io_uring/rsrc.h
@@ -53,10 +53,12 @@ void io_rsrc_cache_free(struct io_ring_ctx *ctx);
struct io_rsrc_node *io_rsrc_node_alloc(struct io_ring_ctx *ctx, int type);
void io_free_rsrc_node(struct io_ring_ctx *ctx, struct io_rsrc_node *node);
void io_rsrc_data_free(struct io_ring_ctx *ctx, struct io_rsrc_data *data);
int io_rsrc_data_alloc(struct io_rsrc_data *data, unsigned nr);
+struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
+ unsigned issue_flags);
int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter,
u64 buf_addr, size_t len, int ddir,
unsigned issue_flags);
int io_register_clone_buffers(struct io_ring_ctx *ctx, void __user *arg);
--
2.45.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
@ 2025-03-01 0:16 ` Caleb Sander Mateos
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
2025-03-01 2:23 ` Jens Axboe
2 siblings, 0 replies; 8+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 0:16 UTC (permalink / raw)
To: Jens Axboe, Pavel Begunkov; +Cc: Caleb Sander Mateos, io-uring, linux-kernel
Call io_find_buf_node() to avoid duplicating it in io_nop().
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
---
io_uring/nop.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/io_uring/nop.c b/io_uring/nop.c
index ea539531cb5f..28f06285fdc2 100644
--- a/io_uring/nop.c
+++ b/io_uring/nop.c
@@ -59,21 +59,12 @@ int io_nop(struct io_kiocb *req, unsigned int issue_flags)
ret = -EBADF;
goto done;
}
}
if (nop->flags & IORING_NOP_FIXED_BUFFER) {
- struct io_ring_ctx *ctx = req->ctx;
- struct io_rsrc_node *node;
-
- ret = -EFAULT;
- io_ring_submit_lock(ctx, issue_flags);
- node = io_rsrc_node_lookup(&ctx->buf_table, req->buf_index);
- if (node) {
- io_req_assign_buf_node(req, node);
- ret = 0;
- }
- io_ring_submit_unlock(ctx, issue_flags);
+ if (!io_find_buf_node(req, issue_flags))
+ ret = -EFAULT;
}
done:
if (ret < 0)
req_set_fail(req);
io_req_set_res(req, nop->result, 0);
--
2.45.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
@ 2025-03-01 1:46 ` Pavel Begunkov
2025-03-01 2:04 ` Caleb Sander Mateos
2025-03-01 2:23 ` Jens Axboe
2 siblings, 1 reply; 8+ messages in thread
From: Pavel Begunkov @ 2025-03-01 1:46 UTC (permalink / raw)
To: Caleb Sander Mateos, Jens Axboe; +Cc: io-uring, linux-kernel
On 3/1/25 00:16, Caleb Sander Mateos wrote:
> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
> other files.
>
> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
> ---
> io_uring/rsrc.c | 4 ++--
> io_uring/rsrc.h | 2 ++
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
> index 45bfb37bca1e..4c4f57cd77f9 100644
> --- a/io_uring/rsrc.c
> +++ b/io_uring/rsrc.c
> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
> }
>
> return 0;
> }
>
> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
> - unsigned issue_flags)
That's a hot path, an extra function call wouldn't be great,
and it's an internal detail as well. Let's better see what we
can do with the nop situation.
btw, don't forget cover letters for series.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
@ 2025-03-01 2:04 ` Caleb Sander Mateos
2025-03-01 2:22 ` Jens Axboe
0 siblings, 1 reply; 8+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 2:04 UTC (permalink / raw)
To: Pavel Begunkov; +Cc: Jens Axboe, io-uring, linux-kernel
On Fri, Feb 28, 2025 at 5:45 PM Pavel Begunkov <asml.silence@gmail.com> wrote:
>
> On 3/1/25 00:16, Caleb Sander Mateos wrote:
> > Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
> > other files.
> >
> > Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
> > ---
> > io_uring/rsrc.c | 4 ++--
> > io_uring/rsrc.h | 2 ++
> > 2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
> > index 45bfb37bca1e..4c4f57cd77f9 100644
> > --- a/io_uring/rsrc.c
> > +++ b/io_uring/rsrc.c
> > @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
> > }
> >
> > return 0;
> > }
> >
> > -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
> > - unsigned issue_flags)
>
> That's a hot path, an extra function call wouldn't be great,
> and it's an internal detail as well. Let's better see what we
> can do with the nop situation.
I can add back inline. With that, there shouldn't be any difference to
the generated instructions for io_import_reg_buf().
>
> btw, don't forget cover letters for series.
Okay, I didn't have much else to add to the brief commit messages. But
sure, I'll add a cover letter in the future.
Best,
Caleb
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 2:04 ` Caleb Sander Mateos
@ 2025-03-01 2:22 ` Jens Axboe
2025-03-01 2:31 ` Pavel Begunkov
0 siblings, 1 reply; 8+ messages in thread
From: Jens Axboe @ 2025-03-01 2:22 UTC (permalink / raw)
To: Caleb Sander Mateos, Pavel Begunkov; +Cc: io-uring, linux-kernel
On 2/28/25 7:04 PM, Caleb Sander Mateos wrote:
> On Fri, Feb 28, 2025 at 5:45 PM Pavel Begunkov <asml.silence@gmail.com> wrote:
>>
>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
>>> other files.
>>>
>>> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
>>> ---
>>> io_uring/rsrc.c | 4 ++--
>>> io_uring/rsrc.h | 2 ++
>>> 2 files changed, 4 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
>>> index 45bfb37bca1e..4c4f57cd77f9 100644
>>> --- a/io_uring/rsrc.c
>>> +++ b/io_uring/rsrc.c
>>> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
>>> }
>>>
>>> return 0;
>>> }
>>>
>>> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
>>> - unsigned issue_flags)
>>
>> That's a hot path, an extra function call wouldn't be great,
>> and it's an internal detail as well. Let's better see what we
>> can do with the nop situation.
>
> I can add back inline. With that, there shouldn't be any difference to
> the generated instructions for io_import_reg_buf().
Yeah, in general I don't like manual inlines, unless it's been proven
that the compiler messes it up for some reason. If it's short enough
it'll be inlined.
>> btw, don't forget cover letters for series.
>
> Okay, I didn't have much else to add to the brief commit messages. But
> sure, I'll add a cover letter in the future.
Indeed, cover letters are always great to have.
--
Jens Axboe
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
@ 2025-03-01 2:23 ` Jens Axboe
2 siblings, 0 replies; 8+ messages in thread
From: Jens Axboe @ 2025-03-01 2:23 UTC (permalink / raw)
To: Pavel Begunkov, Caleb Sander Mateos; +Cc: io-uring, linux-kernel
On Fri, 28 Feb 2025 17:16:07 -0700, Caleb Sander Mateos wrote:
> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
> other files.
>
>
Applied, thanks!
[1/2] io_uring/rsrc: declare io_find_buf_node() in header file
commit: 98ddbefafecf270d51902cabfe289df10a702cef
[2/2] io_uring/nop: use io_find_buf_node()
commit: 15d86dd9019c7a97bd8c5b6880870b97e7cc74ea
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 2:22 ` Jens Axboe
@ 2025-03-01 2:31 ` Pavel Begunkov
2025-03-01 2:33 ` Jens Axboe
0 siblings, 1 reply; 8+ messages in thread
From: Pavel Begunkov @ 2025-03-01 2:31 UTC (permalink / raw)
To: Jens Axboe, Caleb Sander Mateos; +Cc: io-uring, linux-kernel
On 3/1/25 02:22, Jens Axboe wrote:
> On 2/28/25 7:04 PM, Caleb Sander Mateos wrote:
>> On Fri, Feb 28, 2025 at 5:45 PM Pavel Begunkov <asml.silence@gmail.com> wrote:
>>>
>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
>>>> other files.
>>>>
>>>> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
>>>> ---
>>>> io_uring/rsrc.c | 4 ++--
>>>> io_uring/rsrc.h | 2 ++
>>>> 2 files changed, 4 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
>>>> index 45bfb37bca1e..4c4f57cd77f9 100644
>>>> --- a/io_uring/rsrc.c
>>>> +++ b/io_uring/rsrc.c
>>>> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
>>>> }
>>>>
>>>> return 0;
>>>> }
>>>>
>>>> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
>>>> - unsigned issue_flags)
>>>
>>> That's a hot path, an extra function call wouldn't be great,
>>> and it's an internal detail as well. Let's better see what we
>>> can do with the nop situation.
>>
>> I can add back inline. With that, there shouldn't be any difference to
>> the generated instructions for io_import_reg_buf().
>
> Yeah, in general I don't like manual inlines, unless it's been proven
> that the compiler messes it up for some reason. If it's short enough
> it'll be inlined.
It will _not_ be inlined in this case.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 2:31 ` Pavel Begunkov
@ 2025-03-01 2:33 ` Jens Axboe
0 siblings, 0 replies; 8+ messages in thread
From: Jens Axboe @ 2025-03-01 2:33 UTC (permalink / raw)
To: Pavel Begunkov, Caleb Sander Mateos; +Cc: io-uring, linux-kernel
On 2/28/25 7:31 PM, Pavel Begunkov wrote:
> On 3/1/25 02:22, Jens Axboe wrote:
>> On 2/28/25 7:04 PM, Caleb Sander Mateos wrote:
>>> On Fri, Feb 28, 2025 at 5:45?PM Pavel Begunkov <asml.silence@gmail.com> wrote:
>>>>
>>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>>> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
>>>>> other files.
>>>>>
>>>>> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
>>>>> ---
>>>>> io_uring/rsrc.c | 4 ++--
>>>>> io_uring/rsrc.h | 2 ++
>>>>> 2 files changed, 4 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
>>>>> index 45bfb37bca1e..4c4f57cd77f9 100644
>>>>> --- a/io_uring/rsrc.c
>>>>> +++ b/io_uring/rsrc.c
>>>>> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
>>>>> }
>>>>>
>>>>> return 0;
>>>>> }
>>>>>
>>>>> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
>>>>> - unsigned issue_flags)
>>>>
>>>> That's a hot path, an extra function call wouldn't be great,
>>>> and it's an internal detail as well. Let's better see what we
>>>> can do with the nop situation.
>>>
>>> I can add back inline. With that, there shouldn't be any difference to
>>> the generated instructions for io_import_reg_buf().
>>
>> Yeah, in general I don't like manual inlines, unless it's been proven
>> that the compiler messes it up for some reason. If it's short enough
>> it'll be inlined.
>
> It will _not_ be inlined in this case.
Hmm ok - I wonder why that is. But if we want to force it to do that,
then we can just re-add the inline for the local definition, that'll be
fine with it still being non-static and available.
--
Jens Axboe
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-03-01 2:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
2025-03-01 2:04 ` Caleb Sander Mateos
2025-03-01 2:22 ` Jens Axboe
2025-03-01 2:31 ` Pavel Begunkov
2025-03-01 2:33 ` Jens Axboe
2025-03-01 2:23 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox