aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/command/mount_std.go1
-rw-r--r--weed/mount/weedfs.go1
-rw-r--r--weed/mount/weedfs_file_io.go9
3 files changed, 11 insertions, 0 deletions
diff --git a/weed/command/mount_std.go b/weed/command/mount_std.go
index 0ab794bbd..365a65c6d 100644
--- a/weed/command/mount_std.go
+++ b/weed/command/mount_std.go
@@ -248,6 +248,7 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
Cipher: cipher,
UidGidMapper: uidGidMapper,
DisableXAttr: *option.disableXAttr,
+ IsMacOs: runtime.GOOS == "darwin",
})
// create mount root
diff --git a/weed/mount/weedfs.go b/weed/mount/weedfs.go
index ac665ce5e..728777e32 100644
--- a/weed/mount/weedfs.go
+++ b/weed/mount/weedfs.go
@@ -46,6 +46,7 @@ type Option struct {
Umask os.FileMode
Quota int64
DisableXAttr bool
+ IsMacOs bool
MountUid uint32
MountGid uint32
diff --git a/weed/mount/weedfs_file_io.go b/weed/mount/weedfs_file_io.go
index 50a5c7c85..04fe7f21c 100644
--- a/weed/mount/weedfs_file_io.go
+++ b/weed/mount/weedfs_file_io.go
@@ -2,6 +2,7 @@ package mount
import (
"github.com/hanwen/go-fuse/v2/fuse"
+ "github.com/seaweedfs/seaweedfs/weed/glog"
)
/**
@@ -66,6 +67,14 @@ func (wfs *WFS) Open(cancel <-chan struct{}, in *fuse.OpenIn, out *fuse.OpenOut)
if status == fuse.OK {
out.Fh = uint64(fileHandle.fh)
out.OpenFlags = in.Flags
+ if wfs.option.IsMacOs {
+ // remove the direct_io flag, as it is not well-supported on macOS
+ // https://code.google.com/archive/p/macfuse/wikis/OPTIONS.wiki recommended to avoid the direct_io flag
+ if in.Flags&fuse.FOPEN_DIRECT_IO != 0 {
+ glog.V(4).Infof("macfuse direct_io mode %v => false\n", in.Flags&fuse.FOPEN_DIRECT_IO != 0)
+ out.OpenFlags &^= fuse.FOPEN_DIRECT_IO
+ }
+ }
// TODO https://github.com/libfuse/libfuse/blob/master/include/fuse_common.h#L64
}
return status