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: Fri, 19 Apr 2024 22:45:26 +0200	[thread overview]
Message-ID: <f7c97360-8f5e-45f4-876c-3dcbf9522a3a@infinite-source.de> (raw)
In-Reply-To: <1db87cbf-0465-4226-81a8-3b288d6f47e4@spawn.link>

On 19-04-2024 22:07, Antonio SJ Musumeci wrote:
> And I'd disagree with you because as I tried to point out that
> "documented meaning" is not set in stone. Things change over time.
> Different systems, different filesystems, etc. treat situations
> differently. Some platforms don't even have certain errno or conflate
> others. Aren't there even differences in errno across some Linux archs?

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.

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.

> This is just a fact of life. FUSE trying to make sense of that mess is
> just going to lead to more of a mess. IMO EIO is no better than EBADF. A
> lot of software don't handle handle EXDEV correctly let alone random
> other errnos. For years Apple's SMB server would return EIO for just
> about anything happening on the backend.

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.

> If a FUSE server is sending
> back EBADF in flush then it is likely a bug or bad decision.

Agreed.

> Ask them to fix it.

Will try. But the kernel should imo also do its part fulfilling its API
contract.

> And really... what is this translation table going to look like? `errno
> --list | wc -l` returns 134. You going to have huge switch statements on
> every single one of the couple dozen FUSE functions? Some of those
> maybe with special checks against arguments for the function too since
> many errno's are used to indicate multiple, sometimes entirely
> different, errors? It'd be a mess. And as a cross platform technology
> you'd need to define it as part of the protocol effectively. And it'd be
> backwards incompatible therefore optional.

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.

Whitelisting or blacklisting errors that have guaranteed meanings in
individual syscalls and mapping those to a catchall is one possible approach.
But others are also thinkable.

That some symbolic lookup tables would be needed for this does not seem
insurmountable to me. We do something similar in the Rust standard library to
map OS-specific errors to a portable abstraction. We do have a catch-all
"Uncategorized" that's explicitly intended for currently-unrecognized codes
that may be moved to more meaningful variants later.


  reply	other threads:[~2024-04-19 20:45 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 [this message]
2024-04-19 21:29             ` Antonio SJ Musumeci
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=f7c97360-8f5e-45f4-876c-3dcbf9522a3a@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).