Re: [Bug] io_uring_register_files_update broken

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/1/21 4:46 PM, Victor Stewart wrote:
> On Thu, Jul 1, 2021 at 3:51 PM Pavel Begunkov <asml.silence@xxxxxxxxx> wrote:
[...]
>>> sockfd, fds, 1);
>>
>> s/fds/&fds[sockfd]/
>>
>> Does it help? io_uring_register_files_update() doesn't
>> apply offset parameter to the array, it's used only as
>> an internal index.
> 
> i see yes, it works it like this!
> 
> io_uring_register_files_update(&ring, fd, &(socketfds[fd]), 1);
> io_uring_register_files_update(&ring, fd, &(socketfds[fd] = -1), 1);
> 
> and this behavior is clear upon a closer reading of...
> https://github.com/axboe/liburing/blob/11f6d56302c177a96d7eb1df86995939a4feb736/test/file-register.c#L80
> 
> i guess it's sometimes ambiguous whether int* is requesting an array
> or an actual pointer to a single int.

It's an array, just element 0 is registered as a registered
file with index @off, element 1 as a reg-file with index
@(off+1) and so on.

> all good now.
> 
>>
>>> +
>>> +               if (result != 1)
>>> +               {
>>> +                       fprintf(stderr, "file update failed\n");
>>> +                       goto err;
>>> +               }
>>>         }
>>>
>>> +       use_fd = sockfd;
>>> +
>>>         sqe = io_uring_get_sqe(ring);
>>>         io_uring_prep_recv(sqe, use_fd, iov->iov_base, iov->iov_len, 0);
>>>         if (registerfiles)
>>>
>>
>> --
>> Pavel Begunkov

-- 
Pavel Begunkov



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux