Page MenuHomeFreeBSD

fusefs: support EVFILT_WRITE on /dev/fuse
ClosedPublic

Authored by asomers on Jun 16 2021, 12:59 AM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Oct 9, 3:00 PM
Unknown Object (File)
Mon, Oct 6, 10:08 PM
Unknown Object (File)
Sat, Oct 4, 1:07 AM
Unknown Object (File)
Fri, Oct 3, 4:52 PM
Unknown Object (File)
Wed, Oct 1, 5:03 PM
Unknown Object (File)
Tue, Sep 30, 4:18 AM
Unknown Object (File)
Sat, Sep 27, 12:32 AM
Unknown Object (File)
Wed, Sep 24, 1:36 AM
Subscribers

Details

Summary

fusefs: support EVFILT_WRITE on /dev/fuse

/dev/fuse is always ready for writing, so it's kind of dumb to poll it.
But some applications do it anyway. Better to return ready than EINVAL.

MFC after: 2 weeks

Test Plan

Existing kqueue test modified to use kqueue for writing as well as for reading. Tested with a real file system from https://github.com/Sherlock-Holo/fuse3

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

tests/sys/fs/fusefs/mockfs.cc
870–872

Curious about this change

tests/sys/fs/fusefs/mockfs.cc
870–872

It's necessary to make the tests pass, though I could've done it a different way. The problem is that line 943 adds the EVFILT_WRITE filter to the same fd. When control comes back around to here, kevent() immediately returns because EVFILT_WRITE is still set, and and file descriptor is always writable. So adding EV_ONESHOT at 943 prevents kevent here from returning too soon. And I added EV_ONESHOT here for symmetry's sake, and because line 943 doesn't care about readability.

Alternatively, I could've added EV_ONESHOT at line 943 only; that would've worked. Or, I could've set EV_DISABLE on EVFILT_READ at line 946 or here.

This revision is now accepted and ready to land.Jun 16 2021, 5:06 PM
This revision was automatically updated to reflect the committed changes.