d0def21d9a
If a FUSE server returns FOPEN_DIRECT_IO in response to FUSE_OPEN, that instructs the kernel to bypass the page cache for that file. This feature is also known by libfuse's name: "direct_io". However, when accessing a file via mmap, there is no possible way to bypass the cache completely. This change fixes a deadlock that would happen when an mmap'd write tried to invalidate a portion of the cache, wrongly assuming that a write couldn't possibly come from cache if direct_io were set. Arguably, we could instead disable mmap for files with FOPEN_DIRECT_IO set. But allowing it is less likely to cause user complaints, and is more in keeping with the spirit of open(2), where O_DIRECT instructs the kernel to "reduce", not "eliminate" cache effects. PR: 247276 Reported by: trapexit@spawn.link Reviewed by: cem MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D26485 |
||
---|---|---|
.. | ||
fuse_device.c | ||
fuse_file.c | ||
fuse_file.h | ||
fuse_internal.c | ||
fuse_internal.h | ||
fuse_io.c | ||
fuse_io.h | ||
fuse_ipc.c | ||
fuse_ipc.h | ||
fuse_kernel.h | ||
fuse_main.c | ||
fuse_node.c | ||
fuse_node.h | ||
fuse_vfsops.c | ||
fuse_vnops.c | ||
fuse.h |