From: Al Viro <viro@zeniv.linux.org.uk>
To: Jens Axboe <axboe@kernel.dk>
Cc: Jann Horn <jannh@google.com>,
linux-aio@kvack.org, linux-block@vger.kernel.org,
Linux API <linux-api@vger.kernel.org>,
hch@lst.de, jmoyer@redhat.com, avi@scylladb.com,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 13/18] io_uring: add file set registration
Date: Thu, 7 Feb 2019 16:51:30 +0000 [thread overview]
Message-ID: <20190207165130.GF2217@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20190207163047.GE2217@ZenIV.linux.org.uk>
On Thu, Feb 07, 2019 at 04:30:47PM +0000, Al Viro wrote:
> 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).
If you pardon a bad ASCII graphics,
ring_fd sv[0] sv[1] (descriptors)
| | |
V V V
[io_uring] [socket1] [socket2] (struct file)
^ | ^ | ^ |
| | | | | |
| \_______________/__|________________/ | (after registering)
| | |
| V V
| [unix_sock1]<---->[unix_sock2] (struct unix_sock)
| |
| V
\----------------------------------[SCM_RIGHTS] (queue contents)
References from io_uring to other two struct file are added when you
register these suckers. Reference from SCM_RIGHTS appears when you
do send_fd(). Now, each file has two references to it. And
if you close all 3 descriptors (either explicitly, or by exiting)
you will be left with this graph:
[io_uring]------------\-------------------\
^ | |
| V V
| [socket1] [socket2]
| | |
| V V
| [unix_sock1]<---->[unix_sock2]
| |
| V
\----------------------------------[SCM_RIGHTS]
All struct file still have references, so they are all still alive,
->release() isn't called on any of them. And the entire thing
is obviously unreachable from the rest of data structures.
Of course recvmsg() would've removed the loop. The point is, with
that situation you *can't* get it called - you'd need to reach
socket2 to do that and you can't do that anymore.
next prev parent reply other threads:[~2019-02-07 16:51 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20190129192702.3605-1-axboe@kernel.dk>
[not found] ` <20190129192702.3605-14-axboe@kernel.dk>
2019-01-30 1:29 ` [PATCH 13/18] io_uring: add file set registration Jann Horn
2019-01-30 15:35 ` Jens Axboe
2019-02-04 2:56 ` Al Viro
2019-02-05 2:19 ` Jens Axboe
2019-02-05 17:57 ` Jens Axboe
2019-02-05 19:08 ` Jens Axboe
2019-02-06 0:27 ` Jens Axboe
2019-02-06 1:01 ` Al Viro
2019-02-06 17:56 ` Jens Axboe
2019-02-07 4:05 ` Al Viro
2019-02-07 16:14 ` Jens Axboe
2019-02-07 16:30 ` Al Viro
2019-02-07 16:35 ` Jens Axboe
2019-02-07 16:51 ` Al Viro [this message]
2019-02-06 0:56 ` Al Viro
2019-02-06 13:41 ` Jens Axboe
2019-02-07 4:00 ` Al Viro
2019-02-07 9:22 ` Miklos Szeredi
2019-02-07 13:31 ` Al Viro
2019-02-07 14:20 ` Miklos Szeredi
2019-02-07 15:20 ` Al Viro
2019-02-07 15:27 ` Miklos Szeredi
2019-02-07 16:26 ` Al Viro
2019-02-07 19:08 ` Miklos Szeredi
2019-02-07 18:45 ` Jens Axboe
2019-02-07 18:58 ` Jens Axboe
2019-02-11 15:55 ` Jonathan Corbet
2019-02-11 17:35 ` Al Viro
2019-02-11 20:33 ` Jonathan Corbet
2019-01-23 15:35 [PATCHSET v7] io_uring IO interface Jens Axboe
2019-01-23 15:35 ` [PATCH 13/18] io_uring: add file set registration Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190207165130.GF2217@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=avi@scylladb.com \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=jannh@google.com \
--cc=jmoyer@redhat.com \
--cc=linux-aio@kvack.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).