Thread (7 messages) 7 messages, 3 authors, 2021-07-02

Re: [Bug] io_uring_register_files_update broken

From: Pavel Begunkov <asml.silence@gmail.com>
Date: 2021-07-01 14:32:10

On 7/1/21 3:01 PM, Daniele Salvatore Albano wrote:
On Thu, 1 Jul 2021 at 00:28, Pavel Begunkov [off-list ref] wrote:
quoted
On 6/30/21 10:14 PM, Victor Stewart wrote:
quoted
i'm fairly confident there is something broken with
io_uring_register_files_update,
especially the offset parameter.

when trying to update a single fd, and getting a successful result of
1, proceeding
operations with IOSQE_FIXED_FILE fail with -9. but if i update all of
the fds with
then my recv operations succeed, but close still fails with -9.

on Clear LInux 5.12.13-1050.native
Thanks for letting know, I'll take a look
[...]
I sent an email a while ago to raise a question about a potential bug
related to close.

Looks like the close doesn't support registered files (although I saw
some code within a patch from Jens to fix it while I was
investigating).
It have never been supported, don't remember it being discussed to
be implemented at any point, and the links below are about
unrelated things.

If you want to close a fixed file, you can use
IORING_OP_FILES_UPDATE with fd=-1 instead. Easy enough to
add it to close, but not sure I see the reason for that considering
existence of IORING_OP_FILES_UPDATE.

fwiw, it doesn't sound related to Victor's report, but still need
to look at it.
Attached below

On Fri, 21 May 2021 at 21:28, Daniele Salvatore Albano
[off-list ref] wrote:
quoted
Hi,

Is there any specific reason for which io_close_prep returns EBADF if
using REQ_F_FIXED_FILE?

I discovered my software was failing to close sockets when using fixed
files a while ago but I put it to the side, initially thinking it was
a bug I introduced in my code.
In recent days I picked it up again and after investigating it, it
looks like that, instead, that's the expected behaviour.

From what I see, although the behaviour was slightly changed with a
couple of commits (ie. with
https://github.com/torvalds/linux/commit/cf3040ca55f2085b0a372a620ee2cb93ae19b686
) the io_close_prep have had this behaviour from the very beginning
https://github.com/torvalds/linux/commit/b5dba59e0cf7e2cc4d3b3b1ac5fe81ddf21959eb
.

@Jens during my researches I have also found
https://lkml.org/lkml/2020/5/7/1575 where there is a patch that
allows, at least from what it looks like at a first glance, fixed
files with io_close_prep but seems that the email thread died there.

Shouldn't the close op match the behaviour of the other I/O related
ops when it comes to fds?

If there aren't specific reasons, happy to look into it and write a patch.


Thanks,
Daniele
-- 
Pavel Begunkov
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help