linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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.



  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).