Re: [PATCH v2] Revert "fuse: Apply flags2 only when userspace set the FUSE_INIT_EXT"

From: Bernd Schubert
Date: Fri Oct 27 2023 - 09:21:42 EST




On 10/27/23 14:46, Greg Kroah-Hartman wrote:
On Fri, Oct 27, 2023 at 02:36:55PM +0200, Miklos Szeredi wrote:
On Fri, Oct 27, 2023 at 12:40 PM Greg Kroah-Hartman
<gregkh@xxxxxxxxxxxxxxxxxxx> wrote:

On Wed, Oct 25, 2023 at 03:17:09PM +0200, Miklos Szeredi wrote:

I don't think the Android use case counts as a regression.

Why not? In the changelog for this commit, it says:

There is a risk with this change, though - it might break existing user
space libraries, which are already using flags2 without setting
FUSE_INIT_EXT.

And that's exactly what Android was doing. Not all the world uses libfuse,
unfortunatly.

No, this is not about libfuse or not libfuse. It's about upstream or
downstream. If upstream maintainers would need to care about
downstream regressions, then it would be hell.

I agree, that's not what I'm saying here.

How should Android handle this? Here's how: they have an internal
patch, which conflicts with the patch they want to revert. Well, let
them revert that patch in their kernel. It's not like it's a big
maintenance burden, since it's just a few lines. This is the sort of
thing that downstream maintainers do all the time.

It's a no-brainer, what are we talking about then?

I'm talking about a patch where you are changing the existing
user/kernel api by filtering out values that you previously accepted.
And it was done in a patch saying "this might break userspace", and
guess what, it did!

So why not revert it as obviously you all anticipated that this might
happen?

The "internal" patch from Android was just using the upper values of the
fuse api because they didn't want to conflict with the upstream values
before their code was accepted (and it was submitted already, but not
accepted.)

So how do you want developers to work on changes before they are
accepted with this user/kernel numbering scheme that you have? You just
broke anyone who was using a not-accepted-in-the-tree value, right?

It is not related to accepted-in-tree, but server (userspace) side now has to set the flag "FUSE_INIT_EXT" itself, to tell the kernel it knows about these flags and that these bits are initialized. Not setting these flags would cause random issues with any fuse userspace/server side that does not have zeroed 'struct fuse_init_out' - from my point of view that is a regression as well. And In that sense the patch is a regression fix - which now has other side effects.

Regarding out-of-tree development, I'm just right now in the position to have to back port my own features (and while they are still in development and being pushed upstream) to older distribution kernels. This is one of the reasons why I currently look at each and every fuse patch that is posted to the list - I'm looking if it can cause issues for my company/myself and at the same time I can give a bit reviews and maybe help Miklos that way. (@Amir overlay patches are on my todo list). To be honest, given the rather huge Android overlay patch, I'm missing reviews from the Android team... Especially for Amir, who took over overlay work. And if Android team would have monitored and reviewed, they would have noticed possible issue beforehand.

Thanks,
Bernd