On Wed, Feb 12, 2020 at 9:20 AM Jens Axboe <axboe@xxxxxxxxx> wrote: > > On 2/11/20 9:12 PM, Glauber Costa wrote: > > Hi, > > > > I am trying to experiment with the interface for registering files and buffers. > > > > (almost) Every time I call io_uring_register with those opcodes, my > > application hangs. > > > > It's easy to see the reason. I am blocking here: > > > > mutex_unlock(&ctx->uring_lock); > > ret = wait_for_completion_interruptible(&ctx->completions[0]); > > mutex_lock(&ctx->uring_lock); > > > > Am I right in my understanding that this is waiting for everything > > that was submitted to complete? Some things in my ring may never > > complete: for instance one may be polling for file descriptors that > > may never really become ready. > > > > This sounds a bit too restrictive to me. Is this really the intended > > use of the interface? > > For files, this was added in the current merge window: > Ok, so this is what I was missing: > commit 05f3fb3c5397524feae2e73ee8e150a9090a7da2 > Author: Jens Axboe <axboe@xxxxxxxxx> > Date: Mon Dec 9 11:22:50 2019 -0700 > > io_uring: avoid ring quiesce for fixed file set unregister and update > > which allows you to call IORING_REGISTER_FILES_UPDATE without having to > quiesce the ring. File sets can be sparse, you can register with an fd > of -1 and then later use FILES_UPDATE (or IORING_OP_FILES_UPDATE) to > replace it with a real entry. You can also replace a real entry with a > new one, or switch it to sparse again. ^^^ this I thought I've seen EBADF errors when registering -1, but maybe it wasn't -1, it was just really an invalid fd. For memory I guess I could register early on and draw from a poll. That's a bit inconvenient as ideally that poll would grow and shrink dynamically, but it works I'll give it a try