On Tue, 29 Mar 2022 at 19:04, Jens Axboe <axboe@xxxxxxxxx> wrote: > > On 3/29/22 10:08 AM, Jens Axboe wrote: > > On 3/29/22 7:20 AM, Miklos Szeredi wrote: > >> Hi, > >> > >> I'm trying to read multiple files with io_uring and getting stuck, > >> because the link and drain flags don't seem to do what they are > >> documented to do. > >> > >> Kernel is v5.17 and liburing is compiled from the git tree at > >> 7a3a27b6a384 ("add tests for nonblocking accept sockets"). > >> > >> Without those flags the attached example works some of the time, but > >> that's probably accidental since ordering is not ensured. > >> > >> Adding the drain or link flags make it even worse (fail in casese that > >> the unordered one didn't). > >> > >> What am I missing? > > > > I don't think you're missing anything, it looks like a bug. What you > > want here is: > > > > prep_open_direct(sqe); > > sqe->flags |= IOSQE_IO_LINK; > > ... > > prep_read(sqe); So with the below merge this works. But if instead I do prep_open_direct(sqe); ... prep_read(sqe); sqe->flags |= IOSQE_IO_DRAIN; than it doesn't. Shouldn't drain have a stronger ordering guarantee than link? Thanks, Miklos