linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: The 8472 <kernel@infinite-source.de>
To: Antonio SJ Musumeci <trapexit@spawn.link>,
	The 8472 <kernel@infinite-source.de>,
	linux-fsdevel@vger.kernel.org
Subject: Re: EBADF returned from close() by FUSE
Date: Sat, 20 Apr 2024 00:04:50 +0200	[thread overview]
Message-ID: <f764ac09-bd84-41f0-847b-bc89016a4613@infinite-source.de> (raw)
In-Reply-To: <032cfe2c-a595-4371-a70b-f6d208974b0f@spawn.link>

On 19-04-2024 23:29, Antonio SJ Musumeci wrote:
>> 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.

I'm writing to a linux mailing list, am I not? And referring to linux-specific
manpages, not the POSIX ones. The way the linux kernel chooses to pass
what FUSE sends to userspace is under its control.

I would like linux to adhere more closely to its own API contract or improve its
documentation.

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

That seems hardly relevant to this case here.

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

If other things can cause this too, then yes of course, a more general
solution would be fine too for my purposes.
Should I have written to another list? Or filed a report on bugzilla instead?

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

I don't understand what would be broken here. In a previous mail you agreed
that FUSE servers have no business sending EBADF and should have a
bug filed against them. If that's the case then sanitizing problematic cases
should be ok.

The libfuse documentation even notes that servers should not assume errors
from flush get delivered to userspace.


  reply	other threads:[~2024-04-19 22:08 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
2024-04-19 22:04               ` The 8472 [this message]
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=f764ac09-bd84-41f0-847b-bc89016a4613@infinite-source.de \
    --to=kernel@infinite-source.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=trapexit@spawn.link \
    /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).