Re: [PATCH 2/2] fuse: wait for aborted connection before releasing last fuse_dev
Joanne Koong <[email protected]>
| Newsgroups | org.kernel.vger.io-uring,dev.linux.lists.fuse-devel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAJnrk1YjShKKKgTox9QQ86Y7zzRWUVscvWRCuetHEqv55bdh6A@mail.gmail.com> |
On Mon, May 18, 2026 at 7:46 AM Bernd Schubert <[email protected]> wrote: > > > > On 5/18/26 16:32, Berkant Koc wrote: > > On Mon, 18 May 2026 11:47:00 +0000, Bernd Schubert <[email protected]> wrote: > >> Would it be possible for you to test the attached patch? The fix looks right to me. Reviewed-by: Joanne Koong <[email protected]> > > > > Reproducer and KASAN harness from the PATCH 2/2 series are staged. > > Two-arm plan: revert vs apply, race-widening debug hunk kept in both > > arms, 2x50 iterations each against torvalds/master tip, KASAN + lockdep > > + kmemleak enabled. Results back within the day once the base resolves. > > > > Blocker before I build. The patch references ring->chan and chan->conn. > > On mainline fs/fuse/dev_uring_i.h declares struct fuse_ring with > > struct fuse_conn *fc at line 110, no chan member; grep fuse_chan > > across fs/fuse/ returns zero hits. As-is the patch fails to compile > > with "struct fuse_ring has no member named chan". > > > > Is this based on a DDN topic branch that introduces a fuse_chan > > abstraction not yet upstream? If so, point me at the base tree or > > branch URL and I will rebase the test against that. If the references > > were meant to be ring->fc and fc against current mainline, confirm and > > I will adjust before the run. Yes, on mainline the references are meant to be ring->fc, eg diff --git a/fs/fuse/dev_uring.c b/fs/fuse/dev_uring.c index 5c00fd047c8b..27c417fd9451 100644 --- a/fs/fuse/dev_uring.c +++ b/fs/fuse/dev_uring.c @@ -570,6 +570,7 @@ static void fuse_uring_async_stop_queues(struct work_struct *work) FUSE_URING_TEARDOWN_INTERVAL); } else { wake_up_all(&ring->stop_waitq); + fuse_conn_put(ring->fc); } } @@ -599,6 +600,7 @@ void fuse_uring_stop_queues(struct fuse_ring *ring) if (atomic_read(&ring->queue_refs) > 0) { ring->teardown_time = jiffies; + fuse_conn_get(ring->fc); INIT_DELAYED_WORK(&ring->async_teardown_work, fuse_uring_async_stop_queues); schedule_delayed_work(&ring->async_teardown_work, Thanks, Joanne > > > > Assisted-by: Claude:claude-opus-4-7 berkoc-pipeline > > > > Ah, it is based on Miklos' for-next branch, which is also in linux-next > (I think). Yeah, we have a bit back port headache here. > > > Thanks, > Bernd