From 9c2f2652f7f9b6aa4a42880d221397abd622c1b9 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Fri, 24 Jul 2015 11:27:03 +1000 Subject: [PATCH] Write replies to the kernel. --- connection.go | 13 +++++++++---- internal/fuseshim/fuse.go | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/connection.go b/connection.go index 50bfcc0..6295dab 100644 --- a/connection.go +++ b/connection.go @@ -237,14 +237,19 @@ func (c *Connection) ReadOp() (op fuseops.Op, err error) { fuseID uint64, replyMsg []byte, opErr error) (err error) { + // Make sure we destroy the message, as required by + // fuseshim.Connection.ReadMessage. + defer m.Destroy() + // Clean up state for this op. c.finishOp(m.Hdr.Opcode, m.Hdr.Unique) // Send the reply to the kernel. - panic("TODO") - - // Destroy the message, as required by fuseshim.Connection.ReadMessage. - m.Destroy() + err = c.wrapped.WriteToKernel(replyMsg) + if err != nil { + err = fmt.Errorf("WriteToKernel: %v", err) + return + } return } diff --git a/internal/fuseshim/fuse.go b/internal/fuseshim/fuse.go index 666615d..299415f 100644 --- a/internal/fuseshim/fuse.go +++ b/internal/fuseshim/fuse.go @@ -1061,7 +1061,7 @@ func errorString(err error) string { return err.Error() } -func (c *Conn) writeToKernel(msg []byte) error { +func (c *Conn) WriteToKernel(msg []byte) error { out := (*fusekernel.OutHeader)(unsafe.Pointer(&msg[0])) out.Len = uint32(len(msg)) @@ -1072,7 +1072,7 @@ func (c *Conn) writeToKernel(msg []byte) error { } func (c *Conn) respond(msg []byte) { - c.writeToKernel(msg) + c.WriteToKernel(msg) } type notCachedError struct{} @@ -1097,7 +1097,7 @@ var ( // // A returned ENOENT is translated to a friendlier error. func (c *Conn) sendInvalidate(msg []byte) error { - switch err := c.writeToKernel(msg); err { + switch err := c.WriteToKernel(msg); err { case syscall.ENOENT: return ErrNotCached default: