FUSE for macOS 3.5.4

@bfleischer bfleischer released this Dec 1, 2016 · 18 commits to master since this release

  • Fix bug in FUSE kernel extension that can trigger a kernel panic

    Release biglock in fuse_vnop_write() before calling uiomove(). Not doing so can trigger a kernel panic when using the direct_io mount-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_osxfuse synchronously from libosxfuse could result file system deadlocks.

  • Fall back to the setattr_x() callback if the file system does not implement the fsetattr_x() callback.


FUSE for macOS 3.5.3

@bfleischer bfleischer released this Oct 18, 2016 · 24 commits to master since this release

  • 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 volicon, local, and extended_security at the same time.

  • Shorten preference pane name from "FUSE for macOS" to "FUSE". Addresses osxfuse/osxfuse#317 and osxfuse/osxfuse#319.

  • Fix error when building the kernel extension loader with legacy SDKs

    Starting with the Mac OS X 10.6 SDK libkern/OSKextLib.h tries 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


FUSE for macOS 3.5.2

@bfleischer bfleischer released this Sep 26, 2016 · 32 commits to master since this release

  • Fix an interrupt handling issue on macOS 10.12 that can trigger file system hangs. See osxfuse/osxfuse#314 for more details.


FUSE for macOS 3.5.1

@bfleischer bfleischer released this Sep 18, 2016 · 34 commits to master since this release

  • Let mount_osxfuse load the FUSE kernel extension

    When mounting a FUSE volume, libosxfuse used to be responsible for loading the kernel extension by calling load_osxfuse. Starting with this release mount_osxfuse will call load_osxfuse. This allows us to further decouple libosxfuse from the FUSE kernel extension.

  • Improve kernel extension loader error handling

  • libosxfuse is no longer linked against CoreFoundation.framework


FUSE for macOS 3.5.0

@bfleischer bfleischer released this Sep 6, 2016 · 36 commits to master since this release

  • Improve macOS 10.12 support by creating nonexistent mount points

    In macOS 10.12 the permissions of the root-owned /Volumes directory have changed from 1777 (rwxrwxrwt) to 1755 (rwxr-xr-t). As a result admin privileges are required to create mount points in /Volumes.

    In order to allow non-admin users to mount FUSE volumes in /Volumes FUSE 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:

    • fuse_os_version_major_np()
    • fuse_device_fd_np()
    • fuse_mountpoint_for_fs_np()
  • Revise mount status detection in Objective-C FUSE framework to remove dependency on the deprecated function fuse_device_fd_np()

  • Pass open flags to Objective-C FUSE framework based file systems

    The GMUserFileSystemOperations delegate method 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 open(2) for details.

    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 NSDictionary returned by +[GMUserFileSystem currentContext] contains the following keys:

    • kGMUserFileSystemContextUserIDKey
    • kGMUserFileSystemContextGroupIDKey
    • kGMUserFileSystemContextProcessIDKey

    See GMUserFileSystem.h for details.

  • 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.

  • Minor optimizations and code cleanup


FUSE for macOS 3.4.2

@bfleischer bfleischer released this Aug 8, 2016 · 44 commits to master since this release

  • 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_LOOKUP request. Calling it after a FUSE_GETATTR request will lead to a kernel panic.

    Resolves osxfuse/osxfuse#298

  • 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.

    Addresses osxfuse/osxfuse#299


FUSE for macOS 3.4.1

@bfleischer bfleischer released this Jul 24, 2016 · 48 commits to master since this release

  • Remove obsolete task working set cache handling

    When mounting a volume with the noubc option the kernel extension used to set the noexec flag 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 noexec flag is no longer needed.

  • Ignore vnode name cache hits when creating a file

    See osxfuse/kext#4 for details.

  • Always set O_EXCL for FUSE_CREATE requests

    The macOS kernel expects all create calls to return EEXIST in case the file already exists, regardless of whether O_EXCL was specified or not.

    Resolves osxfuse/osxfuse#209

  • Add mount-time option excl_create

    If the mount-time option excl_create is specified, the O_EXCL flag will only be set for "truly" exclusive creates, i.e. create calls for which the initiator explicitly set the O_EXCL flag. 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_timeout mount-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 EIO or E2BIG (in case of FUSE_SETXATTR requests). This change aims to replicate the Linux behavior on macOS.

    Addresses osxfuse/osxfuse#293

  • 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


FUSE for macOS 3.4.0

@bfleischer bfleischer released this Jun 16, 2016 · 57 commits to master since this release

  • 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


FUSE for OS X 3.3.3

@bfleischer bfleischer released this Jun 3, 2016 · 65 commits to master since this release

  • Fix invisible volumes on OS X 10.8 and earlier

    Wait for FUSE volume to be initialized instead of faking vnop_getattr for the volume's root vnode. Faking attributes results in Finder not showing the mounted volume on OS X 10.8 and earlier.


FUSE for OS X 3.3.2

@bfleischer bfleischer released this May 26, 2016 · 69 commits to master since this release

  • Optimize vnop_readdir mode VNODE_READDIR_EXTENDED in kernel extension

    Our user space buffer for VNODE_READDIR_EXTENDED needs to be smaller since re-packing will expand each struct fuse_dirent.

    The worse case (when the name length is 8) corresponds to a struct direntry size of 40 bytes (8-byte aligned) and a struct fuse_dirent size 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.