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.nativeThanks 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