diff --git a/connection.go b/connection.go index 0d7e13a..702bbc8 100644 --- a/connection.go +++ b/connection.go @@ -405,14 +405,6 @@ func (c *Connection) ReadOp() (ctx context.Context, op interface{}, err error) { ctx = c.beginOp(inMsg.Header().Opcode, inMsg.Header().Unique) ctx = context.WithValue(ctx, contextKey, opState{inMsg, outMsg, op}) - // Special case: responding to statfs is required to make mounting work on - // OS X. We don't currently expose the capability for the file system to - // intercept this. - if _, ok := op.(*statFSOp); ok { - c.Reply(ctx, nil) - continue - } - // Return the op to the user. return } diff --git a/conversions.go b/conversions.go index 597ab8d..bd414ee 100644 --- a/conversions.go +++ b/conversions.go @@ -371,7 +371,7 @@ func convertInMessage( } case fusekernel.OpStatfs: - o = &statFSOp{} + o = &fuseops.StatFSOp{} case fusekernel.OpInterrupt: type input fusekernel.InterruptIn @@ -557,8 +557,14 @@ func (c *Connection) kernelResponseForOp( case *fuseops.ReadSymlinkOp: m.AppendString(o.Target) - case *statFSOp: - m.Grow(unsafe.Sizeof(fusekernel.StatfsOut{})) + case *fuseops.StatFSOp: + out := (*fusekernel.StatfsOut)(m.Grow(unsafe.Sizeof(fusekernel.StatfsOut{}))) + out.St.Blocks = o.Blocks + out.St.Bfree = o.BlocksFree + out.St.Bavail = o.BlocksAvailable + out.St.Files = o.Inodes + out.St.Ffree = o.InodesFree + out.St.Bsize = o.BlockSize case *initOp: out := (*fusekernel.InitOut)(m.Grow(unsafe.Sizeof(fusekernel.InitOut{}))) diff --git a/ops.go b/ops.go index fd9bc26..5933eb4 100644 --- a/ops.go +++ b/ops.go @@ -26,10 +26,6 @@ type unknownOp struct { Inode fuseops.InodeID } -// Required in order to mount on OS X. -type statFSOp struct { -} - // Causes us to cancel the associated context. type interruptOp struct { FuseID uint64