From: Al Viro <viro@zeniv.linux.org.uk>
To: Christian Brauner <brauner@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [GIT PULL] pidfd updates
Date: Tue, 25 Apr 2023 14:54:29 +0100 [thread overview]
Message-ID: <20230425135429.GQ3390869@ZenIV> (raw)
In-Reply-To: <20230425-sturheit-jungautor-97d92d7861e2@brauner>
On Tue, Apr 25, 2023 at 02:34:15PM +0200, Christian Brauner wrote:
> It is rife with misunderstandings just looking at what we did in
> kernel/fork.c earlier:
>
> retval = get_unused_fd_flags(O_RDWR | O_CLOEXEC);
> [...]
> pidfile = anon_inode_getfile("[pidfd]", &pidfd_fops, pid,
> O_RDWR | O_CLOEXEC);
>
> seeing where both get_unused_fd_flags() and both *_getfile() take flag
> arguments. Sure, for us this is pretty straightforward since we've seen
> that code a million times. For others it's confusing why there's two
> flag arguments. Sure, we could use one flags argument but it still be
> weird to look at.
First of all, get_unused_fd_flags() doesn't give a damn about O_RDWR and
anon_inode_getfile() - about O_CLOEXEC. Duplicating the expression in
places like that is cargo-culting.
> But with this api we also force all users to remember that they need to
> cleanup the fd and the file - but definitely one - depending on where
> they fail.
>
> But conceptually the fd and the file belong together. After all it's the
> file we're about to make that reserved fd refer to.
Why? The common pattern is
* reserve the descriptor
* do some work that might fail
* get struct file set up (which also might fail)
* do more work (possibly including copyout, etc.)
* install file into descriptor table
We want to reserve the descriptor early, since it's about the easiest
thing to undo. Why bother doing it next to file setup? That can be
pretty deep in call chain and doing it that way comes with headache
about passing the damn thing around. And cleanup rules with your
variant end up being more complicated.
Keep the manipulations of descriptor table as close to the surface
as possible. The real work is with file references; descriptors
belong in userland and passing them around kernel-side is asking
for headache.
next prev parent reply other threads:[~2023-04-25 13:54 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-21 13:41 [GIT PULL] pidfd updates Christian Brauner
2023-04-24 20:24 ` Linus Torvalds
2023-04-24 20:35 ` Linus Torvalds
2023-04-25 12:08 ` Christian Brauner
2023-04-25 6:04 ` Al Viro
2023-04-25 12:34 ` Christian Brauner
2023-04-25 13:54 ` Al Viro [this message]
2023-04-25 14:36 ` Christian Brauner
2023-04-25 15:48 ` Al Viro
2023-04-25 16:28 ` Linus Torvalds
2023-04-25 17:19 ` Al Viro
2023-04-28 8:40 ` David Laight
2023-04-28 18:26 ` Linus Torvalds
2023-04-27 1:07 ` Al Viro
2023-04-27 7:39 ` Al Viro
2023-04-27 8:33 ` Christian Brauner
2023-04-27 8:59 ` Al Viro
2023-04-27 9:40 ` Christian Brauner
2023-04-27 15:21 ` Linus Torvalds
2023-04-27 17:02 ` Al Viro
2023-05-02 7:11 ` Christian Brauner
2023-04-27 8:11 ` Christian Brauner
2023-04-24 21:45 ` pr-tracker-bot
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=20230425135429.GQ3390869@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=brauner@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.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).