Page MenuHomeFreeBSD

fusefs: support EVFILT_WRITE on /dev/fuse
ClosedPublic

Authored by asomers on Jun 16 2021, 12:59 AM.

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
R10 FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; 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.