From: Antonio SJ Musumeci <trapexit@spawn.link>
To: The 8472 <kernel@infinite-source.de>, linux-fsdevel@vger.kernel.org
Subject: Re: EBADF returned from close() by FUSE
Date: Fri, 19 Apr 2024 21:29:27 +0000 [thread overview]
Message-ID: <032cfe2c-a595-4371-a70b-f6d208974b0f@spawn.link> (raw)
In-Reply-To: <f7c97360-8f5e-45f4-876c-3dcbf9522a3a@infinite-source.de>
On 4/19/24 15:45, The 8472 wrote:
> Syscalls have documentation. Errors and their semantics are part
> of the documentation. If the kernel cannot actually provide
> the documented semantics because it passes errors through without
> sanitizing them then this should at least be documented
> for each affected syscall.
And that documentation is *different* depending on the platform. The
clean vision you seem to have about errnos is not real. There are
conventions... not strong contracts. I had this exact debate days ago
about `link`. The claim that if link isn't supported by the OS FUSE
should return EPERM. But this just isn't standard the way people think
it is. Not on paper. And if a FUSE server wants to return EPERM then it
can. I don't see why the kernel needs to get in the business of reading
the mind of the server author.
>
> Proper API documentation and stability guarantees are important
> so we can write robust software against them.
>
> Note that write(2) documents
>
> Other errors may occur, depending on the object connected to fd.
>
> close(2) has no such note.
Your idea is laudable but not realistic. errnos are not even fully
consistent across devices or filesystem. Yes, there are norms and some
standards but they are not enforced by some central arbiter across all
forms of *nix.
> That does not mean userspace should be exposed to the entirety
> of the mess. And in my opinion EIO is better than EBADF because
> the former "merely" indicates that something went wrong relating
> to a particular file. EBADF indicates that the file descriptor
> table of the process may have been corrupted.
"should"... but it is exposed to it. *Most* software doesn't even
attempt to handle errors intelligently and just return the error up the
stack blindly. EIO is about as generic as can be and I've seen it used
many times as the "catch all" error making it meaningless. Further
incentivizing client software to behave as they do... not paying
attention. I will again point out that I've seen EXDEV treated like any
random other error several times in my career by important pieces of
software made by major vendors.
> Will try. But the kernel should imo also do its part fulfilling its API
> contract.
Then you are barking up the wrong tree. This isn't an issue unique to
FUSE. FUSE just makes it more obvious to you because anyone can write a
FUSE server and return (almost) anything they want.
> That it requires perhaps some thought to do it properly does not seem
> sufficient to me to dismiss the request to provide a proper
> abstraction boundary with reliable semantics that match its documentation.
I simply don't see what you could do to "do it properly." I am trying to
argue there is no such thing. And again it would require breaking every
single FUSE server.
next prev parent reply other threads:[~2024-04-19 21:29 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-18 22:10 EBADF returned from close() by FUSE The 8472
2024-04-19 3:30 ` Antonio SJ Musumeci
2024-04-19 6:55 ` The 8472
[not found] ` <8c7552b1-f371-4a75-98cc-f2c89816becb@spawn.link>
2024-04-19 18:18 ` The 8472
2024-04-19 20:07 ` Antonio SJ Musumeci
2024-04-19 20:45 ` The 8472
2024-04-19 21:29 ` Antonio SJ Musumeci [this message]
2024-04-19 22:04 ` The 8472
2024-04-19 22:47 ` Antonio SJ Musumeci
2024-04-19 23:04 ` The 8472
2024-04-23 12:46 ` Miklos Szeredi
2024-04-23 13:24 ` Antonio SJ Musumeci
2024-04-23 13:38 ` Miklos Szeredi
[not found] ` <692a9f0b-9c2b-4850-b8bc-48f09fe41762@infinite-source.de>
2024-04-23 21:38 ` The 8472
2024-04-26 8:52 ` Miklos Szeredi
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=032cfe2c-a595-4371-a70b-f6d208974b0f@spawn.link \
--to=trapexit@spawn.link \
--cc=kernel@infinite-source.de \
--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).