Re: [PATCH 13/18] io_uring: add file set registration
From: Jens Axboe <axboe@kernel.dk>
Date: 2019-02-07 16:35:25
Also in:
linux-api, linux-fsdevel
On 2/7/19 9:30 AM, Al Viro wrote:
On Thu, Feb 07, 2019 at 09:14:41AM -0700, Jens Axboe wrote:quoted
I created a small app to do just that, and ran it and verified that ->release() is called and the io_uring is released as expected. This is run on the current -git branch, which has a socket backing for the io_uring fd itself, but not for the registered files. What am I missing here? Attaching the program as a reference.quoted
int main(int argc, char *argv[]) { int sp[2], pid, ring_fd, ret; if (socketpair(AF_UNIX, SOCK_DGRAM, 0, sp) != 0) { perror("Failed to create Unix-domain socket pair\n"); return 1; } ring_fd = get_ring_fd(); if (ring_fd < 0) return 1; ret = io_uring_register_files(ring_fd, sp[0], sp[1]); if (ret < 0) { perror("register files"); return 1; } pid = fork(); if (pid) { printf("Sending fd %d\n", ring_fd); send_fd(sp[0], ring_fd); } else { int fd; fd = recv_fd(sp[1]);Well, yes - once you receive it, you obviously have no references sitting in SCM_RIGHTS anymore. Get rid of recv_fd() there (along with fork(), while we are at it - what's it for?) and just do send_fd + these 3 close (or just exit, for that matter).
Ah got it, yes you are right, that does leak. Thanks for the other (very) detailed note, I'll add a socket backing for the registered files. I'll respond to the other details in there a bit later. -- Jens Axboe