From 0461ddac4f30ce53b60f2cbec0ae861705bf65af Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Thu, 2 Apr 2015 10:52:58 +1100 Subject: [PATCH] Handle each op in its own goroutine. --- fuseutil/file_system.go | 120 +++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/fuseutil/file_system.go b/fuseutil/file_system.go index f17a21c..95cfe20 100644 --- a/fuseutil/file_system.go +++ b/fuseutil/file_system.go @@ -104,63 +104,67 @@ func (s fileSystemServer) ServeOps(c *fuse.Connection) { panic(err) } - switch typed := op.(type) { - default: - op.Respond(fuse.ENOSYS) - - case *fuseops.InitOp: - s.fs.Init(typed) - - case *fuseops.LookUpInodeOp: - s.fs.LookUpInode(typed) - - case *fuseops.GetInodeAttributesOp: - s.fs.GetInodeAttributes(typed) - - case *fuseops.SetInodeAttributesOp: - s.fs.SetInodeAttributes(typed) - - case *fuseops.ForgetInodeOp: - s.fs.ForgetInode(typed) - - case *fuseops.MkDirOp: - s.fs.MkDir(typed) - - case *fuseops.CreateFileOp: - s.fs.CreateFile(typed) - - case *fuseops.RmDirOp: - s.fs.RmDir(typed) - - case *fuseops.UnlinkOp: - s.fs.Unlink(typed) - - case *fuseops.OpenDirOp: - s.fs.OpenDir(typed) - - case *fuseops.ReadDirOp: - s.fs.ReadDir(typed) - - case *fuseops.ReleaseDirHandleOp: - s.fs.ReleaseDirHandle(typed) - - case *fuseops.OpenFileOp: - s.fs.OpenFile(typed) - - case *fuseops.ReadFileOp: - s.fs.ReadFile(typed) - - case *fuseops.WriteFileOp: - s.fs.WriteFile(typed) - - case *fuseops.SyncFileOp: - s.fs.SyncFile(typed) - - case *fuseops.FlushFileOp: - s.fs.FlushFile(typed) - - case *fuseops.ReleaseFileHandleOp: - s.fs.ReleaseFileHandle(typed) - } + go s.handleOp(op) + } +} + +func (s fileSystemServer) handleOp(op fuseops.Op) { + switch typed := op.(type) { + default: + op.Respond(fuse.ENOSYS) + + case *fuseops.InitOp: + s.fs.Init(typed) + + case *fuseops.LookUpInodeOp: + s.fs.LookUpInode(typed) + + case *fuseops.GetInodeAttributesOp: + s.fs.GetInodeAttributes(typed) + + case *fuseops.SetInodeAttributesOp: + s.fs.SetInodeAttributes(typed) + + case *fuseops.ForgetInodeOp: + s.fs.ForgetInode(typed) + + case *fuseops.MkDirOp: + s.fs.MkDir(typed) + + case *fuseops.CreateFileOp: + s.fs.CreateFile(typed) + + case *fuseops.RmDirOp: + s.fs.RmDir(typed) + + case *fuseops.UnlinkOp: + s.fs.Unlink(typed) + + case *fuseops.OpenDirOp: + s.fs.OpenDir(typed) + + case *fuseops.ReadDirOp: + s.fs.ReadDir(typed) + + case *fuseops.ReleaseDirHandleOp: + s.fs.ReleaseDirHandle(typed) + + case *fuseops.OpenFileOp: + s.fs.OpenFile(typed) + + case *fuseops.ReadFileOp: + s.fs.ReadFile(typed) + + case *fuseops.WriteFileOp: + s.fs.WriteFile(typed) + + case *fuseops.SyncFileOp: + s.fs.SyncFile(typed) + + case *fuseops.FlushFileOp: + s.fs.FlushFile(typed) + + case *fuseops.ReleaseFileHandleOp: + s.fs.ReleaseFileHandle(typed) } }