From: "Darrick J. Wong" <djwong@kernel.org>
To: Joanne Koong <joannelkoong@gmail.com>
Cc: miklos@szeredi.hu, bernd@bsbernd.com, neal@gompa.dev,
linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 1/5] fuse: flush pending fuse events before aborting the connection
Date: Wed, 5 Nov 2025 16:17:30 -0800 [thread overview]
Message-ID: <20251106001730.GH196358@frogsfrogsfrogs> (raw)
In-Reply-To: <CAJnrk1a4d__8RHu0EGN2Yfk3oOhqZLJ7fBCNQYdHoThPrvnOaQ@mail.gmail.com>
On Tue, Nov 04, 2025 at 11:22:26AM -0800, Joanne Koong wrote:
<snipping here because this thread has gotten very long>
> > > > + while (wait_event_timeout(fc->blocked_waitq,
> > > > + !fc->connected || atomic_read(&fc->num_waiting) == 0,
> > > > + HZ) == 0) {
> > > > + /* empty */
> > > > + }
> > >
> > > I'm wondering if it's necessary to wait here for all the pending
> > > requests to complete or abort?
> >
> > I'm not 100% sure what the fuse client shutdown sequence is supposed to
> > be. If someone kills a program with a large number of open unlinked
> > files and immediately calls umount(), then the fuse client could be in
> > the process of sending FUSE_RELEASE requests to the server.
> >
> > [background info, feel free to speedread this paragraph]
> > For a non-fuseblk server, unmount aborts all pending requests and
> > disconnects the fuse device. This means that the fuse server won't see
> > all the FUSE_REQUESTs before libfuse calls ->destroy having observed the
> > fusedev shutdown. The end result is that (on fuse2fs anyway) you end up
> > with a lot of .fuseXXXXX files that nobody cleans up.
> >
> > If you make ->destroy release all the remaining open files, now you run
> > into a second problem, which is that if there are a lot of open unlinked
> > files, freeing the inodes can collectively take enough time that the
> > FUSE_DESTROY request times out.
> >
> > On a fuseblk server with libfuse running in multithreaded mode, there
> > can be several threads reading fuse requests from the fusedev. The
> > kernel actually sends its own FUSE_DESTROY request, but there's no
> > coordination between the fuse workers, which means that the fuse server
> > can process FUSE_DESTROY at the same time it's processing FUSE_RELEASE.
> > If ->destroy closes the filesystem before the FUSE_RELEASE requests are
> > processed, you end up with the same .fuseXXXXX file cleanup problem.
>
> imo it is the responsibility of the server to coordinate this and make
> sure it has handled all the requests it has received before it starts
> executing the destruction logic.
I think we're all saying that some sort of fuse request reordering
barrier is needed here, but there's at least three opinions about where
that barrier should be implemented. Clearly I think the barrier should
be in the kernel, but let me think more about where it could go if it
were somewhere else.
First, Joanne's suggestion for putting it in the fuse server itself:
I don't see how it's generally possible for the fuse server to know that
it's processed all the requests that the kernel might have sent it.
AFAICT each libfuse thread does roughly this:
1. read() a request from the fusedev fd
2. decode the request data and maybe do some allocations or transform it
3. call fuse server with request
4. fuse server does ... something with the request
5. fuse server finishes, hops back to libfuse / calls fuse_reply_XXX
Let's say thread 1 is at step 4 with a FUSE_DESTROY. How does it find
out if there are other fuse worker threads that are somewhere in steps
2 or 3? AFAICT the library doesn't keep track of the number of threads
that are waiting in fuse_session_receive_buf_internal, so fuse servers
can't ask the library about that either.
Taking a narrower view, it might be possible for the fuse server to
figure this out by maintaining an open resource count. It would
increment this counter when a FUSE_{OPEN,CREATE} request succeeds and
decrement it when FUSE_RELEASE comes in. Assuming that FUSE_RELEASE is
the only kind of request that can be pending when a FUSE_DESTROY comes
in, then destroy just has to wait for the counter to hit zero.
Is the above assumption correct?
I don't see any fuse servers that actually *do* this, though. I
perceive that there are a lot of fuse servers out there that aren't
packaged in Debian, though, so is this actually a common thing for
proprietary fuse servers which I wouldn't know about?
Downthread, Bernd suggested doing this in libfuse instead of making the
fuse servers do it. He asks:
"There is something I don't understand though, how can FUSE_DESTROY
happen before FUSE_RELEASE is completed?
"->release / fuse_release
fuse_release_common
fuse_file_release
fuse_file_put
fuse_simple_background
<userspace>
<userspace-reply>
fuse_release_end
iput()"
The answer to this is: fuse_file_release is always asynchronous now, so
the FUSE_RELEASE is queued to the background and the kernel moves on
with its life.
It's likely much more effective to put the reordering barrier in the
library (ignoring all the vendored libfuse out there) assuming that the
above assumption holds. I think it wouldn't be hard to have _do_open
(fuse_lowlevel.c) increment a counter in fuse_session, decrement it in
_do_release, and then _do_destroy would wait for it to hit zero.
For a single-threaded fuse server I think this might not even be an
issue because the events are (AFAICT) processed in order. However,
you'd have to be careful about how you did that for a multithreaded fuse
server. You wouldn't want to spin in _do_destroy because that takes out
a thread that could be doing work. Is there a way to park a request?
Note that both of these approaches come with the risk that the kernel
could decide to time out and abort the FUSE_DESTROY while the server is
still waiting for the counter to hit zero.
For a fuseblk filesystem this abort is very dangerous because the kernel
releases its O_EXCL hold on the block device in kill_block_super before
the fuse server has a chance to finish up and close the block device.
The fuseblk server itself could not have opened the block device O_EXCL
so that means there's a period where another process (or even another
fuseblk mount) could open the bdev O_EXCL and both try to write to the
block device.
(I actually have been wondering who uses the fuse request timeouts? In
my testing even 30min wasn't sufficient to avoid aborts for some of the
truncate/inactivation fstests.)
Aside: The reason why I abandoned making fuse2fs a fuseblk server is
because I realized this exact trap -- the fuse server MUST have
exclusive write access to the device at all times, or else it can race
with other programs (e.g. tune2fs) and corrupt the filesystem. In
fuseblk mode the kernel owns the exclusive access and but doesn't
install that file in the server's fd table. At best the fuse server can
pretend that it has exclusive write access, but the kernel can make that
go away without telling the fuse server, which opens a world of hurt.
> imo the only responsibility of the
> kernel is to actually send the background requests before it sends the
> FUSE_DESTROY. I think non-fuseblk servers should also receive the
> FUSE_DESTROY request.
They do receive it because fuse_session_destroy calls ->destroy if no
event has been received from the kernel after the fusedev shuts down.
> >
> > Here, if you make a fuseblk server's ->destroy release all the remaining
> > open files, you have an even worse problem, because that could race with
> > an existing libfuse worker that's processing a FUSE_RELEASE for the same
> > open file.
> >
> > In short, the client has a FUSE_RELEASE request that pairs with the
> > FUSE_OPEN request. During regular operations, an OPEN always ends with
> > a RELEASE. I don't understand why unmount is special in that it aborts
> > release requests without even sending them to the server; that sounds
> > like a bug to me. Worse yet, I looked on Debian codesearch, and nearly
> > all of the fuse servers I found do not appear to handle this correctly.
> > My guess is that it's uncommon to close 100,000 unlinked open files on a
> > fuse filesystem and immediately unmount it. Network filesystems can get
> > away with not caring.
> >
> > For fuse+iomap, I want unmount to send FUSE_SYNCFS after all open files
> > have been RELEASEd so that client can know that (a) the filesystem (at
> > least as far as the kernel cares) is quiesced, and (b) the server
> > persisted all dirty metadata to disk. Only then would I send the
> > FUSE_DESTROY.
>
> Hmm, is FUSE_FLUSH not enough? As I recently learned (from Amir),
> every close() triggers a FUSE_FLUSH. For dirty metadata related to
> writeback, every release triggers a synchronous write_inode_now().
It's not sufficient, because there might be other cached dirty metadata
that needs to be flushed out to disk. A fuse server could respond to a
FUSE_FLUSH by pushing out that inode's dirty metadata to disk but go no
farther. Plumbing in FUSE_SYNCFS for iomap helps a lot in that regard
because that's a signal that we need to push dirty ext4 bitmaps and
group descriptors and whatnot out to storage; without it we end up doing
all that at destroy time.
> > > We are already guaranteeing that the
> > > background requests get sent before we issue the FUSE_DESTROY, so it
> > > seems to me like this is already enough and we could skip the wait
> > > because the server should make sure it completes the prior requests
> > > it's received before it executes the destruction logic.
> >
> > That's just the thing -- fuse_conn_destroy calls fuse_abort_conn which
> > aborts all the pending background requests so the server never sees
> > them.
>
> The FUSE_DESTROY request gets sent before fuse_abort_conn() is called,
> so to me, it seems like if we flush all the background requests and
> then send the FUSE_DESTROY, that suffices.
I think it's worse than that -- fuse_send_destroy sets fuse_args::force
and sends the request synchronously, which (afaict) means it jumps ahead
of the backgrounded requests.
> With the "while (wait_event_timeout(fc->blocked_waitq, !fc->connected
> || atomic_read(&fc->num_waiting) == 0...)" logic, I think this also
> now means if a server is tripped up somewhere (eg if a remote network
> connection is lost or it runs into a deadlock when servicing a
> request) where it's unable to fulfill any one of its previous
> requests, unmounting would hang.
Well yeah, I was only going to use this function for "local" filesystems
like fuseblk and iomap servers. Definitely not for network fses!
(Though really, all local storage is network storage...)
--D
> Thanks,
> Joanne
>
> >
> > --D
> >
> > > Thanks,
> > > Joanne
> > >
> > > > +}
> > > > +
> > > > /*
> > > > * Abort all requests.
> > > > *
> > > > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
> > > > index d1babf56f25470..d048d634ef46f5 100644
> > > > --- a/fs/fuse/inode.c
> > > > +++ b/fs/fuse/inode.c
> > > > @@ -2094,8 +2094,17 @@ void fuse_conn_destroy(struct fuse_mount *fm)
> > > > {
> > > > struct fuse_conn *fc = fm->fc;
> > > >
> > > > - if (fc->destroy)
> > > > + if (fc->destroy) {
> > > > + /*
> > > > + * Flush all pending requests (most of which will be
> > > > + * FUSE_RELEASE) before sending FUSE_DESTROY, because the fuse
> > > > + * server must close the filesystem before replying to the
> > > > + * destroy message, because unmount is about to release its
> > > > + * O_EXCL hold on the block device.
> > > > + */
> > > > + fuse_flush_requests_and_wait(fc);
> > > > fuse_send_destroy(fm);
> > > > + }
> > > >
> > > > fuse_abort_conn(fc);
> > > > fuse_wait_aborted(fc);
> > > >
>
next prev parent reply other threads:[~2025-11-06 0:17 UTC|newest]
Thread overview: 273+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-29 0:27 [PATCHBOMB v6] fuse: containerize ext4 for safer operation Darrick J. Wong
2025-10-29 0:37 ` [PATCHSET v6 1/8] fuse: general bug fixes Darrick J. Wong
2025-10-29 0:43 ` [PATCH 1/5] fuse: flush pending fuse events before aborting the connection Darrick J. Wong
2025-11-03 17:20 ` Joanne Koong
2025-11-03 22:13 ` Darrick J. Wong
2025-11-04 19:22 ` Joanne Koong
2025-11-04 21:47 ` Bernd Schubert
2025-11-06 0:19 ` Darrick J. Wong
2025-11-06 0:17 ` Darrick J. Wong [this message]
2025-11-06 18:37 ` Joanne Koong
2025-11-07 4:26 ` Darrick J. Wong
2025-11-07 19:18 ` Joanne Koong
2025-11-08 0:43 ` Darrick J. Wong
2025-11-07 22:03 ` Bernd Schubert
2025-11-08 0:02 ` Darrick J. Wong
2025-11-10 17:56 ` Darrick J. Wong
2025-11-10 18:22 ` Bernd Schubert
2025-11-10 18:54 ` Darrick J. Wong
2025-11-10 22:09 ` Bernd Schubert
2025-11-11 0:33 ` Darrick J. Wong
2025-10-29 0:43 ` [PATCH 2/5] fuse: signal that a fuse inode should exhibit local fs behaviors Darrick J. Wong
2025-11-04 19:59 ` Joanne Koong
2025-10-29 0:43 ` [PATCH 3/5] fuse: implement file attributes mask for statx Darrick J. Wong
2025-11-03 18:30 ` Joanne Koong
2025-11-03 18:43 ` Joanne Koong
2025-11-03 19:28 ` Darrick J. Wong
2025-10-29 0:43 ` [PATCH 4/5] fuse: update file mode when updating acls Darrick J. Wong
2025-11-07 20:29 ` Joanne Koong
2025-11-08 0:17 ` Darrick J. Wong
2025-10-29 0:44 ` [PATCH 5/5] fuse: propagate default and file acls on creation Darrick J. Wong
2025-10-29 0:38 ` [PATCHSET v6 2/8] iomap: cleanups ahead of adding fuse support Darrick J. Wong
2025-10-29 0:44 ` [PATCH 1/1] iomap: allow NULL swap info bdev when activating swapfile Darrick J. Wong
2025-10-29 8:40 ` Christoph Hellwig
2025-10-29 14:38 ` Darrick J. Wong
2025-10-30 6:00 ` Christoph Hellwig
2025-10-30 14:54 ` Darrick J. Wong
2025-10-30 15:03 ` Christoph Hellwig
2025-11-07 9:23 ` Jan Engelhardt
2025-11-07 18:05 ` Darrick J. Wong
2025-10-29 0:38 ` [PATCHSET v6 3/8] fuse: cleanups ahead of adding fuse support Darrick J. Wong
2025-10-29 0:44 ` [PATCH 1/2] fuse: move the passthrough-specific code back to passthrough.c Darrick J. Wong
2025-11-06 18:36 ` Amir Goldstein
2025-10-29 0:44 ` [PATCH 2/2] fuse_trace: " Darrick J. Wong
2025-11-07 20:55 ` Joanne Koong
2025-11-08 0:24 ` Darrick J. Wong
2025-11-10 17:50 ` Joanne Koong
2025-10-29 0:38 ` [PATCHSET v6 4/8] fuse: allow servers to use iomap for better file IO performance Darrick J. Wong
2025-10-29 0:45 ` [PATCH 01/31] fuse: implement the basic iomap mechanisms Darrick J. Wong
2025-10-29 0:45 ` [PATCH 02/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:45 ` [PATCH 03/31] fuse: make debugging configurable at runtime Darrick J. Wong
2025-10-29 0:46 ` [PATCH 04/31] fuse: adapt FUSE_DEV_IOC_BACKING_{OPEN,CLOSE} to add new iomap devices Darrick J. Wong
2025-11-06 18:50 ` Amir Goldstein
2025-10-29 0:46 ` [PATCH 05/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:46 ` [PATCH 06/31] fuse: flush events and send FUSE_SYNCFS and FUSE_DESTROY on unmount Darrick J. Wong
2025-10-29 0:46 ` [PATCH 07/31] fuse: create a per-inode flag for toggling iomap Darrick J. Wong
2025-10-29 0:47 ` [PATCH 08/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:47 ` [PATCH 09/31] fuse: isolate the other regular file IO paths from iomap Darrick J. Wong
2025-11-06 18:44 ` Amir Goldstein
2025-11-06 23:02 ` Darrick J. Wong
2025-11-06 23:35 ` Darrick J. Wong
2025-10-29 0:47 ` [PATCH 10/31] fuse: implement basic iomap reporting such as FIEMAP and SEEK_{DATA,HOLE} Darrick J. Wong
2025-10-29 0:47 ` [PATCH 11/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:48 ` [PATCH 12/31] fuse: implement direct IO with iomap Darrick J. Wong
2025-10-29 0:48 ` [PATCH 13/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:48 ` [PATCH 14/31] fuse: implement buffered " Darrick J. Wong
2025-10-29 0:48 ` [PATCH 15/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:49 ` [PATCH 16/31] fuse: implement large folios for iomap pagecache files Darrick J. Wong
2025-10-29 0:49 ` [PATCH 17/31] fuse: use an unrestricted backing device with iomap pagecache io Darrick J. Wong
2025-10-29 0:49 ` [PATCH 18/31] fuse: advertise support for iomap Darrick J. Wong
2025-10-29 0:49 ` [PATCH 19/31] fuse: query filesystem geometry when using iomap Darrick J. Wong
2025-10-29 0:50 ` [PATCH 20/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:50 ` [PATCH 21/31] fuse: implement fadvise for iomap files Darrick J. Wong
2025-10-29 0:50 ` [PATCH 22/31] fuse: invalidate ranges of block devices being used for iomap Darrick J. Wong
2025-10-29 0:50 ` [PATCH 23/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:51 ` [PATCH 24/31] fuse: implement inline data file IO via iomap Darrick J. Wong
2025-10-29 0:51 ` [PATCH 25/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:51 ` [PATCH 26/31] fuse: allow more statx fields Darrick J. Wong
2025-10-29 0:51 ` [PATCH 27/31] fuse: support atomic writes with iomap Darrick J. Wong
2025-10-29 0:52 ` [PATCH 28/31] fuse_trace: " Darrick J. Wong
2025-10-29 0:52 ` [PATCH 29/31] fuse: disable direct reclaim for any fuse server that uses iomap Darrick J. Wong
2025-10-29 0:52 ` [PATCH 30/31] fuse: enable swapfile activation on iomap Darrick J. Wong
2025-10-29 0:53 ` [PATCH 31/31] fuse: implement freeze and shutdowns for iomap filesystems Darrick J. Wong
2025-11-19 9:19 ` [PATCHSET v6 4/8] fuse: allow servers to use iomap for better file IO performance Demi Marie Obenour
2025-11-19 9:41 ` Gao Xiang
2025-11-19 18:04 ` Darrick J. Wong
2025-11-19 21:00 ` Gao Xiang
2025-11-19 21:51 ` Gao Xiang
2025-11-20 1:13 ` Demi Marie Obenour
2025-11-20 1:10 ` Demi Marie Obenour
2025-11-20 1:49 ` Gao Xiang
2025-11-20 1:05 ` Demi Marie Obenour
2025-10-29 0:38 ` [PATCHSET v6 5/8] fuse: allow servers to specify root node id Darrick J. Wong
2025-10-29 0:53 ` [PATCH 1/3] fuse: make the root nodeid dynamic Darrick J. Wong
2025-10-29 0:53 ` [PATCH 2/3] fuse_trace: " Darrick J. Wong
2025-10-29 0:53 ` [PATCH 3/3] fuse: allow setting of root nodeid Darrick J. Wong
2025-10-29 0:39 ` [PATCHSET v6 6/8] fuse: handle timestamps and ACLs correctly when iomap is enabled Darrick J. Wong
2025-10-29 0:54 ` [PATCH 1/9] fuse: enable caching of timestamps Darrick J. Wong
2025-10-29 0:54 ` [PATCH 2/9] fuse: force a ctime update after a fileattr_set call when in iomap mode Darrick J. Wong
2025-10-29 0:54 ` [PATCH 3/9] fuse: allow local filesystems to set some VFS iflags Darrick J. Wong
2025-10-29 0:54 ` [PATCH 4/9] fuse_trace: " Darrick J. Wong
2025-10-29 0:55 ` [PATCH 5/9] fuse: cache atime when in iomap mode Darrick J. Wong
2025-10-29 0:55 ` [PATCH 6/9] fuse: let the kernel handle KILL_SUID/KILL_SGID for iomap filesystems Darrick J. Wong
2025-10-29 0:55 ` [PATCH 7/9] fuse_trace: " Darrick J. Wong
2025-10-29 0:55 ` [PATCH 8/9] fuse: update ctime when updating acls on an iomap inode Darrick J. Wong
2025-10-29 0:56 ` [PATCH 9/9] fuse: always cache ACLs when using iomap Darrick J. Wong
2025-10-29 0:39 ` [PATCHSET v6 7/8] fuse: cache iomap mappings for even better file IO performance Darrick J. Wong
2025-10-29 0:56 ` [PATCH 01/10] fuse: cache iomaps Darrick J. Wong
2025-10-29 0:56 ` [PATCH 02/10] fuse_trace: " Darrick J. Wong
2025-10-29 0:56 ` [PATCH 03/10] fuse: use the iomap cache for iomap_begin Darrick J. Wong
2025-10-29 0:57 ` [PATCH 04/10] fuse_trace: " Darrick J. Wong
2025-10-29 0:57 ` [PATCH 05/10] fuse: invalidate iomap cache after file updates Darrick J. Wong
2025-10-29 0:57 ` [PATCH 06/10] fuse_trace: " Darrick J. Wong
2025-10-29 0:58 ` [PATCH 07/10] fuse: enable iomap cache management Darrick J. Wong
2025-10-29 0:58 ` [PATCH 08/10] fuse_trace: " Darrick J. Wong
2025-10-29 0:58 ` [PATCH 09/10] fuse: overlay iomap inode info in struct fuse_inode Darrick J. Wong
2025-10-29 0:58 ` [PATCH 10/10] fuse: enable iomap Darrick J. Wong
2025-10-29 0:39 ` [PATCHSET v6 8/8] fuse: run fuse servers as a contained service Darrick J. Wong
2025-10-29 0:59 ` [PATCH 1/2] fuse: allow privileged mount helpers to pre-approve iomap usage Darrick J. Wong
2025-10-29 0:59 ` [PATCH 2/2] fuse: set iomap backing device block size Darrick J. Wong
2025-10-29 0:40 ` [PATCHSET v6 1/5] libfuse: allow servers to use iomap for better file IO performance Darrick J. Wong
2025-10-29 0:59 ` [PATCH 01/22] libfuse: bump kernel and library ABI versions Darrick J. Wong
2025-10-29 0:59 ` [PATCH 02/22] libfuse: add kernel gates for FUSE_IOMAP Darrick J. Wong
2025-10-29 1:00 ` [PATCH 03/22] libfuse: add fuse commands for iomap_begin and end Darrick J. Wong
2025-10-29 1:00 ` [PATCH 04/22] libfuse: add upper level iomap commands Darrick J. Wong
2025-10-29 1:00 ` [PATCH 05/22] libfuse: add a lowlevel notification to add a new device to iomap Darrick J. Wong
2025-10-29 1:00 ` [PATCH 06/22] libfuse: add upper-level iomap add device function Darrick J. Wong
2025-10-29 1:01 ` [PATCH 07/22] libfuse: add iomap ioend low level handler Darrick J. Wong
2025-10-29 1:01 ` [PATCH 08/22] libfuse: add upper level iomap ioend commands Darrick J. Wong
2025-10-29 1:01 ` [PATCH 09/22] libfuse: add a reply function to send FUSE_ATTR_* to the kernel Darrick J. Wong
2025-10-29 1:01 ` [PATCH 10/22] libfuse: connect high level fuse library to fuse_reply_attr_iflags Darrick J. Wong
2025-10-29 1:02 ` [PATCH 11/22] libfuse: support direct I/O through iomap Darrick J. Wong
2025-10-29 1:02 ` [PATCH 12/22] libfuse: don't allow hardlinking of iomap files in the upper level fuse library Darrick J. Wong
2025-10-29 1:02 ` [PATCH 13/22] libfuse: allow discovery of the kernel's iomap capabilities Darrick J. Wong
2025-10-29 1:02 ` [PATCH 14/22] libfuse: add lower level iomap_config implementation Darrick J. Wong
2025-10-29 1:03 ` [PATCH 15/22] libfuse: add upper " Darrick J. Wong
2025-10-29 1:03 ` [PATCH 16/22] libfuse: add low level code to invalidate iomap block device ranges Darrick J. Wong
2025-10-29 1:03 ` [PATCH 17/22] libfuse: add upper-level API to invalidate parts of an iomap block device Darrick J. Wong
2025-10-29 1:03 ` [PATCH 18/22] libfuse: add atomic write support Darrick J. Wong
2025-10-29 1:04 ` [PATCH 19/22] libfuse: create a helper to transform an open regular file into an open loopdev Darrick J. Wong
2025-10-29 1:04 ` [PATCH 20/22] libfuse: add swapfile support for iomap files Darrick J. Wong
2025-10-29 1:04 ` [PATCH 21/22] libfuse: add lower-level filesystem freeze, thaw, and shutdown requests Darrick J. Wong
2025-10-29 1:05 ` [PATCH 22/22] libfuse: add upper-level filesystem freeze, thaw, and shutdown events Darrick J. Wong
2025-10-29 0:40 ` [PATCHSET v6 2/5] libfuse: allow servers to specify root node id Darrick J. Wong
2025-10-29 1:05 ` [PATCH 1/1] libfuse: allow root_nodeid mount option Darrick J. Wong
2025-10-29 0:40 ` [PATCHSET v6 3/5] libfuse: implement syncfs Darrick J. Wong
2025-10-29 1:05 ` [PATCH 1/4] libfuse: add strictatime/lazytime mount options Darrick J. Wong
2025-10-29 1:05 ` [PATCH 2/4] libfuse: set sync, immutable, and append when loading files Darrick J. Wong
2025-10-29 1:06 ` [PATCH 3/4] libfuse: wire up FUSE_SYNCFS to the low level library Darrick J. Wong
2025-10-29 1:06 ` [PATCH 4/4] libfuse: add syncfs support to the upper library Darrick J. Wong
2025-10-29 0:40 ` [PATCHSET v6 4/5] libfuse: cache iomap mappings for even better file IO performance Darrick J. Wong
2025-10-29 1:06 ` [PATCH 1/3] libfuse: enable iomap cache management for lowlevel fuse Darrick J. Wong
2025-10-29 1:06 ` [PATCH 2/3] libfuse: add upper-level iomap cache management Darrick J. Wong
2025-10-29 1:07 ` [PATCH 3/3] libfuse: enable iomap Darrick J. Wong
2025-10-29 0:41 ` [PATCHSET v6 5/5] libfuse: run fuse servers as a contained service Darrick J. Wong
2025-10-29 1:07 ` [PATCH 1/5] libfuse: add systemd/inetd socket service mounting helper Darrick J. Wong
2025-10-29 1:07 ` [PATCH 2/5] libfuse: integrate fuse services into mount.fuse3 Darrick J. Wong
2025-10-29 1:07 ` [PATCH 3/5] libfuse: delegate iomap privilege from mount.service to fuse services Darrick J. Wong
2025-10-29 1:08 ` [PATCH 4/5] libfuse: enable setting iomap block device block size Darrick J. Wong
2025-10-29 1:08 ` [PATCH 5/5] fuservicemount: create loop devices for regular files Darrick J. Wong
2025-10-29 0:41 ` [PATCHSET v6 1/6] fuse2fs: use fuse iomap data paths for better file I/O performance Darrick J. Wong
2025-10-29 1:08 ` [PATCH 01/17] fuse2fs: implement bare minimum iomap for file mapping reporting Darrick J. Wong
2025-10-29 1:08 ` [PATCH 02/17] fuse2fs: add iomap= mount option Darrick J. Wong
2025-10-29 1:09 ` [PATCH 03/17] fuse2fs: implement iomap configuration Darrick J. Wong
2025-10-29 1:09 ` [PATCH 04/17] fuse2fs: register block devices for use with iomap Darrick J. Wong
2025-10-29 1:09 ` [PATCH 05/17] fuse2fs: implement directio file reads Darrick J. Wong
2025-10-29 1:09 ` [PATCH 06/17] fuse2fs: add extent dump function for debugging Darrick J. Wong
2025-10-29 1:10 ` [PATCH 07/17] fuse2fs: implement direct write support Darrick J. Wong
2025-10-29 1:10 ` [PATCH 08/17] fuse2fs: turn on iomap for pagecache IO Darrick J. Wong
2025-10-29 1:10 ` [PATCH 09/17] fuse2fs: don't zero bytes in punch hole Darrick J. Wong
2025-10-29 1:11 ` [PATCH 10/17] fuse2fs: don't do file data block IO when iomap is enabled Darrick J. Wong
2025-10-29 1:11 ` [PATCH 11/17] fuse2fs: try to create loop device when ext4 device is a regular file Darrick J. Wong
2025-10-29 1:11 ` [PATCH 12/17] fuse2fs: enable file IO to inline data files Darrick J. Wong
2025-10-29 1:11 ` [PATCH 13/17] fuse2fs: set iomap-related inode flags Darrick J. Wong
2025-10-29 1:12 ` [PATCH 14/17] fuse2fs: configure block device block size Darrick J. Wong
2025-10-29 1:12 ` [PATCH 15/17] fuse4fs: separate invalidation Darrick J. Wong
2025-10-29 1:12 ` [PATCH 16/17] fuse2fs: implement statx Darrick J. Wong
2025-10-29 1:12 ` [PATCH 17/17] fuse2fs: enable atomic writes Darrick J. Wong
2025-10-29 0:41 ` [PATCHSET v6 2/6] fuse4fs: specify the root node id Darrick J. Wong
2025-10-29 1:13 ` [PATCH 1/2] fuse2fs: implement freeze and shutdown requests Darrick J. Wong
2025-10-29 1:13 ` [PATCH 2/2] fuse4fs: don't use inode number translation when possible Darrick J. Wong
2025-10-29 0:41 ` [PATCHSET v6 3/6] fuse2fs: handle timestamps and ACLs correctly when iomap is enabled Darrick J. Wong
2025-10-29 1:13 ` [PATCH 01/11] fuse2fs: add strictatime/lazytime mount options Darrick J. Wong
2025-10-29 1:13 ` [PATCH 02/11] fuse2fs: skip permission checking on utimens when iomap is enabled Darrick J. Wong
2025-10-29 1:14 ` [PATCH 03/11] fuse2fs: let the kernel tell us about acl/mode updates Darrick J. Wong
2025-10-29 1:14 ` [PATCH 04/11] fuse2fs: better debugging for file mode updates Darrick J. Wong
2025-10-29 1:14 ` [PATCH 05/11] fuse2fs: debug timestamp updates Darrick J. Wong
2025-10-29 1:14 ` [PATCH 06/11] fuse2fs: use coarse timestamps for iomap mode Darrick J. Wong
2025-10-29 1:15 ` [PATCH 07/11] fuse2fs: add tracing for retrieving timestamps Darrick J. Wong
2025-10-29 1:15 ` [PATCH 08/11] fuse2fs: enable syncfs Darrick J. Wong
2025-10-29 1:15 ` [PATCH 09/11] fuse2fs: skip the gdt write in op_destroy if syncfs is working Darrick J. Wong
2025-10-29 1:15 ` [PATCH 10/11] fuse2fs: set sync, immutable, and append at file load time Darrick J. Wong
2025-10-29 1:16 ` [PATCH 11/11] fuse4fs: increase attribute timeout in iomap mode Darrick J. Wong
2025-10-29 0:42 ` [PATCHSET v6 4/6] fuse2fs: cache iomap mappings for even better file IO performance Darrick J. Wong
2025-10-29 1:16 ` [PATCH 1/3] fuse2fs: enable caching of iomaps Darrick J. Wong
2025-10-29 1:16 ` [PATCH 2/3] fuse2fs: be smarter about caching iomaps Darrick J. Wong
2025-10-29 1:17 ` [PATCH 3/3] fuse2fs: enable iomap Darrick J. Wong
2025-10-29 0:42 ` [PATCHSET v6 5/6] fuse2fs: improve block and inode caching Darrick J. Wong
2025-10-29 1:17 ` [PATCH 1/6] libsupport: add caching IO manager Darrick J. Wong
2025-10-29 1:17 ` [PATCH 2/6] iocache: add the actual buffer cache Darrick J. Wong
2025-10-29 1:17 ` [PATCH 3/6] iocache: bump buffer mru priority every 50 accesses Darrick J. Wong
2025-10-29 1:18 ` [PATCH 4/6] fuse2fs: enable caching IO manager Darrick J. Wong
2025-10-29 1:18 ` [PATCH 5/6] fuse2fs: increase inode cache size Darrick J. Wong
2025-10-29 1:18 ` [PATCH 6/6] libext2fs: improve caching for inodes Darrick J. Wong
2025-10-29 0:42 ` [PATCHSET v6 6/6] fuse4fs: run servers as a contained service Darrick J. Wong
2025-10-29 1:18 ` [PATCH 1/7] libext2fs: fix MMP code to work with unixfd IO manager Darrick J. Wong
2025-10-29 1:19 ` [PATCH 2/7] fuse4fs: enable safe service mode Darrick J. Wong
2025-10-29 1:19 ` [PATCH 3/7] fuse4fs: set proc title when in fuse " Darrick J. Wong
2025-10-29 1:19 ` [PATCH 4/7] fuse4fs: set iomap backing device blocksize Darrick J. Wong
2025-10-29 1:19 ` [PATCH 5/7] fuse4fs: ask for loop devices when opening via fuservicemount Darrick J. Wong
2025-10-29 1:20 ` [PATCH 6/7] fuse4fs: make MMP work correctly in safe service mode Darrick J. Wong
2025-10-29 1:20 ` [PATCH 7/7] debian: update packaging for fuse4fs service Darrick J. Wong
2025-10-29 0:42 ` [PATCHSET v6] fstests: support ext4 fuse testing Darrick J. Wong
2025-10-29 1:20 ` [PATCH 01/33] misc: adapt tests to handle the fuse ext[234] drivers Darrick J. Wong
2025-10-30 9:51 ` Amir Goldstein
2025-11-05 22:53 ` Darrick J. Wong
2025-11-06 8:58 ` Amir Goldstein
2025-11-06 23:12 ` Darrick J. Wong
2025-11-07 7:50 ` Amir Goldstein
2025-11-07 7:08 ` Zorro Lang
2025-10-29 1:20 ` [PATCH 02/33] generic/740: don't run this test for fuse ext* implementations Darrick J. Wong
2025-10-30 9:59 ` Amir Goldstein
2025-11-05 22:56 ` Darrick J. Wong
2025-11-06 9:02 ` Amir Goldstein
2025-10-29 1:21 ` [PATCH 03/33] ext/052: use popdir.pl for much faster directory creation Darrick J. Wong
2025-10-29 1:21 ` [PATCH 04/33] common/rc: skip test if swapon doesn't work Darrick J. Wong
2025-11-12 6:35 ` Baokun Li
2025-11-12 18:26 ` Darrick J. Wong
2025-11-12 20:05 ` Theodore Ts'o
2025-11-12 22:29 ` [PATCH v6.1 " Darrick J. Wong
2025-11-13 1:51 ` Baokun Li
2025-11-13 15:52 ` Theodore Ts'o
2025-10-29 1:21 ` [PATCH 05/33] common/rc: streamline _scratch_remount Darrick J. Wong
2025-10-29 1:21 ` [PATCH 06/33] ext/039: require metadata journalling Darrick J. Wong
2025-10-29 1:22 ` [PATCH 07/33] populate: don't check for htree directories on fuse.ext4 Darrick J. Wong
2025-10-29 1:22 ` [PATCH 08/33] misc: convert _scratch_mount -o remount to _scratch_remount Darrick J. Wong
2025-10-29 1:22 ` [PATCH 09/33] misc: use explicitly $FSTYP'd mount calls Darrick J. Wong
2025-10-29 1:23 ` [PATCH 10/33] common/ext4: explicitly format with $FSTYP Darrick J. Wong
2025-10-29 1:23 ` [PATCH 11/33] tests/ext*: refactor open-coded _scratch_mkfs_sized calls Darrick J. Wong
2025-10-29 1:23 ` [PATCH 12/33] generic/732: disable for fuse.ext4 Darrick J. Wong
2025-10-29 1:23 ` [PATCH 13/33] defrag: fix ext4 defrag ioctl test Darrick J. Wong
2025-10-29 1:24 ` [PATCH 14/33] misc: explicitly require online resize support Darrick J. Wong
2025-10-29 1:24 ` [PATCH 15/33] ext4/004: disable for fuse2fs Darrick J. Wong
2025-10-29 1:24 ` [PATCH 16/33] generic/679: " Darrick J. Wong
2025-10-29 1:24 ` [PATCH 17/33] ext4/045: don't run the long dirent test on fuse2fs Darrick J. Wong
2025-10-29 1:25 ` [PATCH 18/33] generic/338: skip test if we can't mount with strictatime Darrick J. Wong
2025-10-29 1:25 ` [PATCH 19/33] generic/563: fuse doesn't support cgroup-aware writeback accounting Darrick J. Wong
2025-10-29 1:25 ` [PATCH 20/33] misc: use a larger buffer size for pwrites Darrick J. Wong
2025-10-29 1:25 ` [PATCH 21/33] ext4/046: don't run this test if dioread_nolock not supported Darrick J. Wong
2025-10-29 1:26 ` [PATCH 22/33] generic/631: don't run test if we can't mount overlayfs Darrick J. Wong
2025-10-30 11:35 ` Amir Goldstein
2025-11-05 23:12 ` Darrick J. Wong
2025-11-06 9:23 ` Amir Goldstein
2025-11-06 16:02 ` Darrick J. Wong
2025-10-29 1:26 ` [PATCH 23/33] generic/{409,410,411,589}: check for stacking mount support Darrick J. Wong
2025-10-30 10:25 ` Amir Goldstein
2025-11-05 22:58 ` Darrick J. Wong
2025-10-29 1:26 ` [PATCH 24/33] generic: add _require_hardlinks to tests that require hardlinks Darrick J. Wong
2025-10-29 1:26 ` [PATCH 25/33] ext4/001: check for fiemap support Darrick J. Wong
2025-10-29 1:27 ` [PATCH 26/33] generic/622: check that strictatime/lazytime actually work Darrick J. Wong
2025-10-29 1:27 ` [PATCH 27/33] generic/050: skip test because fuse2fs doesn't have stable output Darrick J. Wong
2025-10-30 10:05 ` Amir Goldstein
2025-11-05 23:02 ` Darrick J. Wong
2025-10-29 1:27 ` [PATCH 28/33] generic/405: don't stall on mkfs asking for input Darrick J. Wong
2025-10-29 1:27 ` [PATCH 29/33] ext4/006: fix this test Darrick J. Wong
2025-10-29 1:28 ` [PATCH 30/33] ext4/009: fix ENOSPC errors Darrick J. Wong
2025-10-29 1:28 ` [PATCH 31/33] ext4/022: enabl Darrick J. Wong
2025-10-29 6:03 ` Darrick J. Wong
2025-10-29 1:28 ` [PATCH 32/33] generic/730: adapt test for fuse filesystems Darrick J. Wong
2025-10-29 1:29 ` [PATCH 33/33] fuse2fs: hack around weird corruption problems Darrick J. Wong
2025-10-29 9:35 ` [PATCHSET v6] fstests: support ext4 fuse testing Christoph Hellwig
2025-10-29 23:52 ` Darrick J. Wong
2025-10-30 16:35 ` [PATCHBOMB v6] fuse: containerize ext4 for safer operation Joanne Koong
2025-10-31 17:56 ` Darrick J. Wong
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=20251106001730.GH196358@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=bernd@bsbernd.com \
--cc=joannelkoong@gmail.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=neal@gompa.dev \
/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).