|
Revision tags: release/13.4.0-p5, release/13.5.0-p1, release/14.2.0-p3, release/13.5.0, release/14.2.0-p2, release/14.1.0-p8, release/13.4.0-p4, release/14.1.0-p7, release/14.2.0-p1, release/13.4.0-p3, release/14.2.0, release/13.4.0, release/14.1.0 |
|
| #
2d19c2cd |
| 04-Apr-2024 |
Alan Somers <[email protected]> |
fusefs: correct a comment
[skip ci]
Sponsored by: Axcient
(cherry picked from commit c1326c01df81dd06739ddf1946e1968ddaba0c8e)
|
|
Revision tags: release/13.3.0 |
|
| #
739488cc |
| 25-Jan-2024 |
Alan Somers <[email protected]> |
fusefs: fix invalid value for st_birthtime.tv_nsec
If a file system's on-disk format does not support st_birthtime, it isn't clear what value it should return in stat(2). Neither our man page nor t
fusefs: fix invalid value for st_birthtime.tv_nsec
If a file system's on-disk format does not support st_birthtime, it isn't clear what value it should return in stat(2). Neither our man page nor the OpenGroup specifies. But our convention for UFS and msdosfs is to return { .tv_sec = -1, .tv_nsec = 0 }. fusefs is different. It returns { .tv_sec = -1, .tv_nsec = -1 }. It's done that ever since the initial import in SVN r241519.
Most software apparently handles this just fine. It must, because we've had no complaints. But the Rust standard library will panic when reading such a timestamp during std::fs::metadata, even if the caller doesn't care about that particular value. That's a separate bug, and should be fixed.
Change our invalid value to match msdosfs and ufs, pacifying the Rust standard library.
PR: 276602 Sponsored by: Axcient Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D43590
(cherry picked from commit 55b80e2ca52c4b27c4920d372a6e71ac9ab7da9e)
show more ...
|
|
Revision tags: release/14.0.0 |
|
| #
685dc743 |
| 16-Aug-2023 |
Warner Losh <[email protected]> |
sys: Remove $FreeBSD$: one-line .c pattern
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
|
Revision tags: release/13.2.0 |
|
| #
ba8cc6d7 |
| 12-Mar-2023 |
Mateusz Guzik <[email protected]> |
vfs: use __enum_uint8 for vtype and vstate
This whacks hackery around only reading v_type once.
Bump __FreeBSD_version to 1400093
|
| #
829f0bcb |
| 19-Dec-2022 |
Mateusz Guzik <[email protected]> |
vfs: add the concept of vnode state transitions
To quote from a comment above vput_final: <quote> * XXX Some filesystems pass in an exclusively locked vnode and strongly depend * on the lock being h
vfs: add the concept of vnode state transitions
To quote from a comment above vput_final: <quote> * XXX Some filesystems pass in an exclusively locked vnode and strongly depend * on the lock being held all the way until VOP_INACTIVE. This in particular * happens with UFS which adds half-constructed vnodes to the hash, where they * can be found by other code. </quote>
As is there is no mechanism which allows filesystems to denote that a vnode is fully initialized, consequently problems like the above are only found the hard way(tm).
Add rudimentary support for state transitions, which in particular allow to assert the vnode is not legally unlocked until its fate is decided (either construction finishes or vgone is called to abort it).
The new field lands in a 1-byte hole, thus it does not grow the struct.
Bump __FreeBSD_version to 1400077
Reviewed by: kib (previous version) Tested by: pho Differential Revision: https://reviews.freebsd.org/D37759
show more ...
|
|
Revision tags: release/12.4.0, release/13.1.0 |
|
| #
0bef4927 |
| 04-May-2022 |
Alan Somers <[email protected]> |
fusefs: handle evil servers that return illegal inode numbers
* If during FUSE_CREATE, FUSE_MKDIR, etc the server returns the same inode number for the new file as for its parent directory, reject
fusefs: handle evil servers that return illegal inode numbers
* If during FUSE_CREATE, FUSE_MKDIR, etc the server returns the same inode number for the new file as for its parent directory, reject it. Previously this would triggers a recurse-on-non-recursive lock panic.
* If during FUSE_LINK the server returns a different inode number for the new name as for the old one, reject it. Obviously, that can't be a hard link.
* If during FUSE_LOOKUP the server returns the same inode number for the new file as for its parent directory, reject it. Nothing good can come of this.
PR: 263662 Reported by: Robert Morris <[email protected]> MFC after: 2 weeks Reviewed by: pfg Differential Revision: https://reviews.freebsd.org/D35128
show more ...
|
| #
3d856234 |
| 20-Jan-2022 |
Mark Johnston <[email protected]> |
fusefs: Address -Wunused-but-set-variable warnings
Reviewed by: asomers MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D33957
|
|
Revision tags: release/12.3.0 |
|
| #
13d593a5 |
| 29-Nov-2021 |
Alan Somers <[email protected]> |
Fix a race in fusefs that can corrupt a file's size.
VOPs like VOP_SETATTR can change a file's size, with the vnode exclusively locked. But VOPs like VOP_LOOKUP look up the file size from the serve
Fix a race in fusefs that can corrupt a file's size.
VOPs like VOP_SETATTR can change a file's size, with the vnode exclusively locked. But VOPs like VOP_LOOKUP look up the file size from the server without the vnode locked. So a race is possible. For example:
1) One thread calls VOP_SETATTR to truncate a file. It locks the vnode and sends FUSE_SETATTR to the server. 2) A second thread calls VOP_LOOKUP and fetches the file's attributes from the server. Then it blocks trying to acquire the vnode lock. 3) FUSE_SETATTR returns and the first thread releases the vnode lock. 4) The second thread acquires the vnode lock and caches the file's attributes, which are now out-of-date.
Fix this race by recording a timestamp in the vnode of the last time that its filesize was modified. Check that timestamp during VOP_LOOKUP and VFS_VGET. If it's newer than the time at which FUSE_LOOKUP was issued to the server, ignore the attributes returned by FUSE_LOOKUP.
PR: 259071 Reported by: Agata <[email protected]> Reviewed by: pfg MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D33158
show more ...
|
| #
25927e06 |
| 06-Dec-2021 |
Alan Somers <[email protected]> |
fusefs: correctly handle an inode that changes file types
Correctly handle the situation where a FUSE server unlinks a file, then creates a new file of a different type but with the same inode numbe
fusefs: correctly handle an inode that changes file types
Correctly handle the situation where a FUSE server unlinks a file, then creates a new file of a different type but with the same inode number. Previously fuse_vnop_lookup in this situation would return EAGAIN. But since it didn't call vgone(), the vnode couldn't be reused right away. Fix this by immediately calling vgone() and reallocating a new vnode.
This problem can occur in three code paths, during VOP_LOOKUP, VOP_SETATTR, or following FUSE_GETATTR, which usually happens during VOP_GETATTR but can occur during other vops, too. Note that the correct response actually doesn't depend on whether the entry cache has expired. In fact, during VOP_LOOKUP, we can't even tell. Either it has expired already, or else the vnode got reclaimed by vnlru.
Also, correct the error code during the VOP_SETATTR path.
PR: 258022 Reported by: [email protected] MFC after: 2 weeks Reviewed by: pfg Differential Revision: https://reviews.freebsd.org/D33283
show more ...
|
| #
91972cfc |
| 29-Nov-2021 |
Alan Somers <[email protected]> |
fusefs: update atime on reads when using cached attributes
When using cached attributes, whether or not the data cache is enabled, fusefs must update a file's atime whenever it reads from it, so lon
fusefs: update atime on reads when using cached attributes
When using cached attributes, whether or not the data cache is enabled, fusefs must update a file's atime whenever it reads from it, so long as it wasn't mounted with -o noatime. Update it in-kernel, and flush it to the server on close or during the next setattr operation.
The downside is that close() will now frequently trigger a FUSE_SETATTR upcall. But if you care about performance, you should be using -o noatime anyway.
MFC after: 2 weeks Reviewed by: pfg Differential Revision: https://reviews.freebsd.org/D33145
show more ...
|
| #
b4a58fbf |
| 01-Oct-2021 |
Mateusz Guzik <[email protected]> |
vfs: remove cn_thread
It is always curthread.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D32453
|
| #
5d94aaac |
| 03-Oct-2021 |
Alan Somers <[email protected]> |
fusefs: quiet some cache-related warnings
If the FUSE server does something that would make our cache incoherent, we should print a warning to the user. However, we previously warned in some situat
fusefs: quiet some cache-related warnings
If the FUSE server does something that would make our cache incoherent, we should print a warning to the user. However, we previously warned in some situations when we shouldn't, such as if the file's size changed on the server _after_ our own attribute cache had expired. This change suppresses the warning in cases like that. It also moves the warning logic to a single place within the code.
PR: 256936 Reported by: Agata <[email protected]> Tested by: Agata <[email protected]>, [email protected] MFC after: 2 weeks
show more ...
|
|
Revision tags: release/13.0.0 |
|
| #
2bfd8992 |
| 15-Feb-2021 |
Konstantin Belousov <[email protected]> |
vnode: move write cluster support data to inodes.
The data is only needed by filesystems that 1. use buffer cache 2. utilize clustering write support.
Requested by: mjg Reviewed by: asomers (previo
vnode: move write cluster support data to inodes.
The data is only needed by filesystems that 1. use buffer cache 2. utilize clustering write support.
Requested by: mjg Reviewed by: asomers (previous version), fsu (ext2 parts), mckusick Tested by: pho Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D28679
show more ...
|
|
Revision tags: release/12.2.0 |
|
| #
586ee69f |
| 01-Sep-2020 |
Mateusz Guzik <[email protected]> |
fs: clean up empty lines in .c and .h files
|
|
Revision tags: release/11.4.0 |
|
| #
b0ecfb42 |
| 11-Mar-2020 |
Alan Somers <[email protected]> |
fusefs: avoid cache corruption with buggy fuse servers
The FUSE protocol allows the client (kernel) to cache a file's size, if the server (userspace daemon) allows it. A well-behaved daemon obviousl
fusefs: avoid cache corruption with buggy fuse servers
The FUSE protocol allows the client (kernel) to cache a file's size, if the server (userspace daemon) allows it. A well-behaved daemon obviously should not change a file's size while a client has it cached. But a buggy daemon might. If the kernel ever detects that that has happened, then it should invalidate the entire cache for that file. Previously, we would not only cache stale data, but in the case of a file extension while we had the size cached, we accidentally extended the cache with zeros.
PR: 244178 Reported by: Ben RUBSON <[email protected]> Reviewed by: cem MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24012
show more ...
|
| #
388820fb |
| 15-Jan-2020 |
Mateusz Guzik <[email protected]> |
fusefs: add missing CLTFLAG_MPSAFE annotation
|
|
Revision tags: release/12.1.0 |
|
| #
427d205c |
| 06-Aug-2019 |
Alan Somers <[email protected]> |
fusefs: remove superfluous counter_u64_zero
Reported by: glebius Sponsored by: The FreeBSD Foundation
|
| #
07e86257 |
| 13-Jul-2019 |
Alan Somers <[email protected]> |
fusefs: fix the build with some NODEBUG kernels
systm.h needs to be included before counter.h
Sponsored by: The FreeBSD Foundation
|
|
Revision tags: release/11.3.0 |
|
| #
8aafc8c3 |
| 28-Jun-2019 |
Alan Somers <[email protected]> |
[skip ci] update copyright headers in fusefs files
Sponsored by: The FreeBSD Foundation
|
| #
560a55d0 |
| 27-Jun-2019 |
Alan Somers <[email protected]> |
fusefs: convert statistical sysctls to use counter(9)
counter(9) is more performant than using atomic instructions to update sysctls that just report statistics to userland.
Sponsored by: The FreeB
fusefs: convert statistical sysctls to use counter(9)
counter(9) is more performant than using atomic instructions to update sysctls that just report statistics to userland.
Sponsored by: The FreeBSD Foundation
show more ...
|
| #
f8ebf1cd |
| 26-Jun-2019 |
Alan Somers <[email protected]> |
fusefs: implement protocol 7.23's FUSE_WRITEBACK_CACHE option
As of protocol 7.23, fuse file systems can specify their cache behavior on a per-mountpoint basis. If they set FUSE_WRITEBACK_CACHE in
fusefs: implement protocol 7.23's FUSE_WRITEBACK_CACHE option
As of protocol 7.23, fuse file systems can specify their cache behavior on a per-mountpoint basis. If they set FUSE_WRITEBACK_CACHE in fuse_init_out.flags, then they'll get the writeback cache. If not, then they'll get the writethrough cache. If they set FOPEN_DIRECT_IO in every FUSE_OPEN response, then they'll get no cache at all.
The old vfs.fusefs.data_cache_mode sysctl is ignored for servers that use protocol 7.23 or later. However, it's retained for older servers, especially for those running in jails that lack access to the new protocol.
This commit also fixes two other minor test bugs: * WriteCluster:SetUp was using an uninitialized variable. * Read.direct_io_pread wasn't verifying that the cache was actually bypassed.
Sponsored by: The FreeBSD Foundation
show more ...
|
| #
fef46454 |
| 26-Jun-2019 |
Alan Somers <[email protected]> |
fusefs: implement the "time_gran" feature.
If a server supports a timestamp granularity other than 1ns, it can tell the client this as of protocol 7.23. The client will use that granularity when up
fusefs: implement the "time_gran" feature.
If a server supports a timestamp granularity other than 1ns, it can tell the client this as of protocol 7.23. The client will use that granularity when updating its cached timestamps during write. This way the timestamps won't appear to change following flush.
Sponsored by: The FreeBSD Foundation
show more ...
|
| #
788af953 |
| 25-Jun-2019 |
Alan Somers <[email protected]> |
fusefs: automatically update mtime and ctime on write
Writing should implicitly update a file's mtime and ctime. For fuse, the server is supposed to do that. But the client needs to do it too, bec
fusefs: automatically update mtime and ctime on write
Writing should implicitly update a file's mtime and ctime. For fuse, the server is supposed to do that. But the client needs to do it too, because the FUSE_WRITE response does not include time attributes, and it's not desirable to issue a GETATTR after every WRITE. When using the writeback cache, there's another hitch: the kernel should ignore the mtime and ctime fields in any GETATTR response for files with a dirty write cache.
Sponsored by: The FreeBSD Foundation
show more ...
|
| #
93c0c1d4 |
| 11-Jun-2019 |
Alan Somers <[email protected]> |
fusefs: fix a page fault with writeback cacheing
When truncating a file downward through a dirty buffer, it's neccessary to update the buffer's b->dirtyend.
Sponsored by: The FreeBSD Foundation
|
| #
3f105d16 |
| 29-May-2019 |
Alan Somers <[email protected]> |
fusefs: raise protocol level to 7.10
Protocol version 7.10 has only one new feature, and I'm choosing not to implement it, so this commit is basically a noop. The sole new feature is the FOPEN_NONS
fusefs: raise protocol level to 7.10
Protocol version 7.10 has only one new feature, and I'm choosing not to implement it, so this commit is basically a noop. The sole new feature is the FOPEN_NONSEEKABLE flag, which a fuse file system can return to indicate that a certain file handle cannot be seeked. However, I'm unaware of any file system in ports that uses this flag.
Sponsored by: The FreeBSD Foundation
show more ...
|