Fix bug in FUSE kernel extension that can trigger a kernel panic
Release biglock in
uiomove(). Not doing so can trigger a kernel panic when using the
direct_iomount-time option. For details see osxfuse/osxfuse#330.
Fix rare file system deadlock when mounting a FUSE volume
In rare cases
mount(2)performs file system operations. Calling
mount_osxfusesynchronously from libosxfuse could result file system deadlocks.
Fall back to the
setattr_x()callback if the file system does not implement the
Fix volume icon support on macOS 10.12
Fixes an incompatibility on macOS 10.12, resulting in the volume icon not being displayed in Finder, when using mount-time options
extended_securityat the same time.
Fix error when building the kernel extension loader with legacy SDKs
Starting with the Mac OS X 10.6 SDK
libkern/OSKextLib.htries to include
System/libkern/OSReturn.h, which does not exist in the SDK. Apple fixed the issue in the OS X 10.11 SDK.
Fix generation of BridgeSupport files for Objective-C FUSE framework on Mac OS X 10.6. Addresses osxfuse/osxfuse#321.
Fix error when building FUSE mounter on Mac OS X 10.6. Addresses osxfuse/osxfuse#318.
Rename distribution package symlink
Append .pkg file extension to distribution package symlink in release disk image. This fixes osxfuse/osxfuse#322.
Improve readability of release disk image background
mount_osxfuseload the FUSE kernel extension
When mounting a FUSE volume,
libosxfuseused to be responsible for loading the kernel extension by calling
load_osxfuse. Starting with this release
load_osxfuse. This allows us to further decouple
libosxfusefrom the FUSE kernel extension.
Improve kernel extension loader error handling
libosxfuseis no longer linked against
Improve macOS 10.12 support by creating nonexistent mount points
In macOS 10.12 the permissions of the root-owned
/Volumesdirectory have changed from 1777 (rwxrwxrwt) to 1755 (rwxr-xr-t). As a result admin privileges are required to create mount points in
In order to allow non-admin users to mount FUSE volumes in
/VolumesFUSE will create non-existent mount points automatically.
Deprecate non-portable libosxfuse functions
File system binaries using these functions, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release. The following functions have been deprecated:
Revise mount status detection in Objective-C FUSE framework to remove dependency on the deprecated function
Pass open flags to Objective-C FUSE framework based file systems
createFileAtPath:attributes:userData:error:has been deprecated in favor of the new method
createFileAtPath:attributes:flags:userData:error:, that allows passing open flags to the file system delegate. See
File systems implementing the old delegate method, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release.
Add support for querying file system operation context information for Objective-C FUSE framework based file systems
The context of the current file system operation is only valid during a file system delegate callback. The
+[GMUserFileSystem currentContext]contains the following keys:
Update Objective-C FUSE framework availability macros
File system binaries built with version 3.5 of the Objective-C FUSE framework are not compatible with previous framework versions unless the following preprocessor macro is defined before importing the framework header.
#define GM_VERSION_MIN_REQUIRED GM_OSXFUSE_2
Minor optimizations and code cleanup
Update libosxfuse from version 2.9.6 to 2.9.7
- Fix ambigious condition
- Wait until daemon child process is ready
Fix ".." path handling for delete lookups
Make sure to call
fuse_vget_i()only after performing a
FUSE_LOOKUPrequest. Calling it after a
FUSE_GETATTRrequest will lead to a kernel panic.
Lock parent directory when removing entry
When removing a directory entry HFS and NFS lock the vnode that is to be removed and its parent directory vnode. However, Apple's fallback implementation for non-thread-safe 32 bit file systems only locks the directory entry vnode.
The osxfuse locking mechanism is inspired by Apple's fallback implementation. While it is not strictly required to lock the parent directory vnode as well, it seems to be good practice to do so.
Remove obsolete task working set cache handling
When mounting a volume with the
noubcoption the kernel extension used to set the
noexecflag for the mount in order to also disable the task working set page cache on disk. However, since the task working set mechanism has been removed in Mac OS X 10.5 the
noexecflag is no longer needed.
Ignore vnode name cache hits when creating a file
See osxfuse/kext#4 for details.
The macOS kernel expects all create calls to return
EEXISTin case the file already exists, regardless of whether
O_EXCLwas specified or not.
Add mount-time option
If the mount-time option
excl_createis specified, the
O_EXCLflag will only be set for "truly" exclusive creates, i.e. create calls for which the initiator explicitly set the
O_EXCLflag. This allows distributed file systems to determine whether or not to acquire a potentially costly lock to prevent remote create races. Nonetheless, the file system still needs to make sure that there are no local create races.
Fix mount-time option parsing
Fixes the following error when using the
daemon_timeoutmount-time option in combination with a volume name containing the word "union".
mount_osxfuse: invalid value for argument daemon_timeout
Don't kill the file system on short reads
A FUSE user space server receives file system requests from the FUSE device by allocating some memory and calling
read(2). Obviously, the request must fit into that buffer. If it doesn't, we used to kill the file system.
Linux FUSE handles short reads differently. Instead of killing the file system it returns
E2BIG(in case of
FUSE_SETXATTRrequests). This change aims to replicate the Linux behavior on macOS.
Remove callbacks for interrupted tickets
Make sure to remove a ticket's callback when marking it as answered. Otherwise the ticket will be retained by the callback queue until the volume is unmounted.
Minor optimizations and code cleanup
Switch to secure website URL
Change name to FUSE for macOS
Add experimental support for macOS 10.12 and Xcode 8
Disable Objective-C garbage collection for FUSE preference pane
Using garbage collection is no longer supported on macOS 10.12. However, on Mac OS X 10.6 and 10.7 all 64-bit preference panes are required to use garbage collection. 32-bit preference panes may use manual reference counting.
As a result the System Preferences application will need to relaunch on Mac OS X 10.6 and 10.7 in 32-bit mode to run the FUSE preference pane. For details see Apple's Preference Pane Programming Guide.
Modernize FUSE kernel extension Xcode project
Clean up license
Fix invisible volumes on OS X 10.8 and earlier
Wait for FUSE volume to be initialized instead of faking
vnop_getattrfor the volume's root vnode. Faking attributes results in Finder not showing the mounted volume on OS X 10.8 and earlier.
VNODE_READDIR_EXTENDEDin kernel extension
Our user space buffer for
VNODE_READDIR_EXTENDEDneeds to be smaller since re-packing will expand each
The worse case (when the name length is 8) corresponds to a
struct direntrysize of 40 bytes (8-byte aligned) and a
struct fuse_direntsize of 32 bytes (8-byte aligned). So having a buffer that is 4/5 the size will prevent us from reading more than we can pack.