diff --git a/connection.go b/connection.go index 2f80cf88..3310a64a 100644 --- a/connection.go +++ b/connection.go @@ -204,6 +204,11 @@ func (c *Connection) Init() error { initOp.Flags |= fusekernel.InitAtomicTrunc } + outArgs := uint64(0) + outArgs |= fusekernel.InitDirectIOAllowMMAP + initOp.Flags |= fusekernel.InitExt + initOp.Flags2 |= uint32(outArgs >> 32) + return c.Reply(ctx, nil) } diff --git a/conversions.go b/conversions.go index 6c2ea89f..224f0528 100644 --- a/conversions.go +++ b/conversions.go @@ -996,6 +996,7 @@ func (c *Connection) kernelResponseForOp( out.CongestionThreshold = 9 out.MaxWrite = o.MaxWrite out.TimeGran = 1 + out.Flags2 = o.Flags2 out.MaxPages = o.MaxPages default: diff --git a/internal/fusekernel/fuse_kernel.go b/internal/fusekernel/fuse_kernel.go index 8e908152..c675d4c6 100644 --- a/internal/fusekernel/fuse_kernel.go +++ b/internal/fusekernel/fuse_kernel.go @@ -272,12 +272,15 @@ const ( InitMaxPages InitFlags = 1 << 22 InitCacheSymlinks InitFlags = 1 << 23 InitNoOpendirSupport InitFlags = 1 << 24 + InitExt InitFlags = 1 << 30 InitCaseSensitive InitFlags = 1 << 29 // OS X only InitVolRename InitFlags = 1 << 30 // OS X only InitXtimes InitFlags = 1 << 31 // OS X only ) +const InitDirectIOAllowMMAP uint64 = 1 << 36 + type flagName struct { bit uint32 name string @@ -305,6 +308,7 @@ var initFlagNames = []flagName{ {uint32(InitNoOpenSupport), "InitNoOpenSupport"}, {uint32(InitCacheSymlinks), "InitCacheSymlinks"}, {uint32(InitNoOpendirSupport), "InitNoOpendirSupport"}, + {uint32(InitExt), "InitExt"}, {uint32(InitCaseSensitive), "InitCaseSensitive"}, {uint32(InitVolRename), "InitVolRename"}, @@ -748,7 +752,9 @@ type InitOut struct { TimeGran uint32 MaxPages uint16 MapAlignment uint16 - Unused [8]uint32 + Flags2 uint32 + + Unused [7]uint32 } type InterruptIn struct { diff --git a/ops.go b/ops.go index fe21a64f..52b039f2 100644 --- a/ops.go +++ b/ops.go @@ -45,4 +45,5 @@ type initOp struct { MaxBackground uint16 MaxWrite uint32 MaxPages uint16 + Flags2 uint32 }