Fixed a panic.
parent
0f1a471c06
commit
d9c8d95df7
|
@ -34,6 +34,9 @@ type internalOp interface {
|
|||
|
||||
// Create a response message for the kernel, with leading pading for a
|
||||
// fusekernel.OutHeader struct.
|
||||
//
|
||||
// Special case: a return value of nil means that the kernel is not expecting
|
||||
// a response.
|
||||
kernelResponse() []byte
|
||||
}
|
||||
|
||||
|
@ -147,17 +150,19 @@ func (o *commonOp) Respond(err error) {
|
|||
msg = fuseshim.NewBuffer(0)
|
||||
}
|
||||
|
||||
// Fill in the header.
|
||||
h := (*fusekernel.OutHeader)(unsafe.Pointer(&msg[0]))
|
||||
h.Unique = o.fuseID
|
||||
h.Len = uint32(len(msg))
|
||||
if err != nil {
|
||||
errno := fuseshim.EIO
|
||||
if ferr, ok := err.(fuseshim.ErrorNumber); ok {
|
||||
errno = ferr.Errno()
|
||||
}
|
||||
// Fill in the header if a reply is needed.
|
||||
if msg != nil {
|
||||
h := (*fusekernel.OutHeader)(unsafe.Pointer(&msg[0]))
|
||||
h.Unique = o.fuseID
|
||||
h.Len = uint32(len(msg))
|
||||
if err != nil {
|
||||
errno := fuseshim.EIO
|
||||
if ferr, ok := err.(fuseshim.ErrorNumber); ok {
|
||||
errno = ferr.Errno()
|
||||
}
|
||||
|
||||
h.Error = -int32(errno)
|
||||
h.Error = -int32(errno)
|
||||
}
|
||||
}
|
||||
|
||||
// Reply.
|
||||
|
|
|
@ -217,7 +217,8 @@ type ForgetInodeOp struct {
|
|||
}
|
||||
|
||||
func (o *ForgetInodeOp) kernelResponse() (msg []byte) {
|
||||
panic("TODO: Signal that no response should happen here.")
|
||||
// No response.
|
||||
return
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -1061,10 +1061,13 @@ 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))
|
||||
return c.WriteToKernel(msg)
|
||||
}
|
||||
|
||||
func (c *Conn) WriteToKernel(msg []byte) error {
|
||||
c.wio.RLock()
|
||||
defer c.wio.RUnlock()
|
||||
_, err := syscall.Write(c.fd(), msg)
|
||||
|
|
Loading…
Reference in New Issue