On Thu, Apr 23, 2020 at 11:20 AM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > On Thu, Apr 23, 2020 at 9:57 AM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > > > On Thu, Apr 23, 2020 at 9:45 AM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > > > > > I would prefer to not introduce that limitation in the first place, and > > > > instead open normal file descriptors. > > > > > > > > > The point of O_SPECIFIC_FD is to be able to perform short > > > > > sequences of open/dosomething/close without having to block and having > > > > > to issue separate syscalls. > > > > > > > > "close" is not a required component. It's entirely possible to use > > > > io_uring to open a file descriptor, do various things with it, and then > > > > leave it open for subsequent usage via either other io_uring chains or > > > > standalone syscalls. > > > > > > If this use case arraises, we could add an op to dup/move a private > > > descriptor to a public one. io_uring can return values, right? > > > > > > Still not convinced... > > > > Oh, and we haven't even touched on the biggest advantage of a private > > fd table: not having to dirty a cacheline on fdget/fdput due to the > > possibility of concurrent close() in a MT application. > > > > I believe this is a sticking point in some big enterprise apps and it > > may even be a driving force for io_uring. > > https://lwn.net/Articles/787473/ > > And an interesting (very old) article referenced from above, that > gives yet a new angle on fd allocation issues: > > https://lwn.net/Articles/236843/ > > A private fd space would be perfect for libraries such as glibc. Ah, io_uring already implements a fixed private fd table via io_uring_register(IORING_REGISTER_FILES,...), we just need a way to wire up open, socket, accept, etc. to fill a slot in that table instead of, or in addition to allocating a slot in the fd_table. Thanks, Miklos