Use FileSystem in flushfs.

geesefs-0-30-9
Aaron Jacobs 2015-03-25 09:33:04 +11:00
parent e0aecb1d0b
commit beb1ac7430
1 changed files with 23 additions and 84 deletions

View File

@ -16,12 +16,12 @@ package flushfs
import ( import (
"fmt" "fmt"
"io"
"os" "os"
"sync" "sync"
"github.com/jacobsa/fuse" "github.com/jacobsa/fuse"
"github.com/jacobsa/fuse/fuseops" "github.com/jacobsa/fuse/fuseops"
"github.com/jacobsa/fuse/fuseutil"
) )
// Create a file system whose sole contents are a file named "foo" and a // Create a file system whose sole contents are a file named "foo" and a
@ -35,11 +35,12 @@ import (
func NewFileSystem( func NewFileSystem(
reportFlush func(string) error, reportFlush func(string) error,
reportFsync func(string) error) (server fuse.Server, err error) { reportFsync func(string) error) (server fuse.Server, err error) {
server = &flushFS{ fs := &flushFS{
reportFlush: reportFlush, reportFlush: reportFlush,
reportFsync: reportFsync, reportFsync: reportFsync,
} }
server = fuseutil.NewFileSystemServer(fs)
return return
} }
@ -49,6 +50,8 @@ const (
) )
type flushFS struct { type flushFS struct {
fuseutil.NotImplementedFileSystem
reportFlush func(string) error reportFlush func(string) error
reportFsync func(string) error reportFsync func(string) error
@ -85,67 +88,17 @@ func (fs *flushFS) barAttributes() fuseops.InodeAttributes {
} }
} }
// LOCKS_REQUIRED(fs.mu)
func (fs *flushFS) ServeOps(c *fuse.Connection) {
for {
op, err := c.ReadOp()
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
switch typed := op.(type) {
case *fuseops.InitOp:
fs.init(typed)
case *fuseops.LookUpInodeOp:
fs.lookUpInode(typed)
case *fuseops.GetInodeAttributesOp:
fs.getInodeAttributes(typed)
case *fuseops.OpenFileOp:
fs.openFile(typed)
case *fuseops.ReadFileOp:
fs.readFile(typed)
case *fuseops.WriteFileOp:
fs.writeFile(typed)
case *fuseops.SyncFileOp:
fs.syncFile(typed)
case *fuseops.FlushFileOp:
fs.flushFile(typed)
case *fuseops.OpenDirOp:
fs.openDir(typed)
default:
typed.Respond(fuse.ENOSYS)
}
}
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// Op methods // Op methods
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
func (fs *flushFS) init(op *fuseops.InitOp) { func (fs *flushFS) Init(
var err error op *fuseops.InitOp) (err error) {
defer func() { op.Respond(err) }()
return return
} }
func (fs *flushFS) lookUpInode(op *fuseops.LookUpInodeOp) { func (fs *flushFS) LookUpInode(
var err error op *fuseops.LookUpInodeOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -177,10 +130,8 @@ func (fs *flushFS) lookUpInode(op *fuseops.LookUpInodeOp) {
return return
} }
func (fs *flushFS) getInodeAttributes(op *fuseops.GetInodeAttributesOp) { func (fs *flushFS) GetInodeAttributes(
var err error op *fuseops.GetInodeAttributesOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -203,10 +154,8 @@ func (fs *flushFS) getInodeAttributes(op *fuseops.GetInodeAttributesOp) {
} }
} }
func (fs *flushFS) openFile(op *fuseops.OpenFileOp) { func (fs *flushFS) OpenFile(
var err error op *fuseops.OpenFileOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -219,10 +168,8 @@ func (fs *flushFS) openFile(op *fuseops.OpenFileOp) {
return return
} }
func (fs *flushFS) readFile(op *fuseops.ReadFileOp) { func (fs *flushFS) ReadFile(
var err error op *fuseops.ReadFileOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -238,10 +185,8 @@ func (fs *flushFS) readFile(op *fuseops.ReadFileOp) {
return return
} }
func (fs *flushFS) writeFile(op *fuseops.WriteFileOp) { func (fs *flushFS) WriteFile(
var err error op *fuseops.WriteFileOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -263,10 +208,8 @@ func (fs *flushFS) writeFile(op *fuseops.WriteFileOp) {
return return
} }
func (fs *flushFS) syncFile(op *fuseops.SyncFileOp) { func (fs *flushFS) SyncFile(
var err error op *fuseops.SyncFileOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -274,10 +217,8 @@ func (fs *flushFS) syncFile(op *fuseops.SyncFileOp) {
return return
} }
func (fs *flushFS) flushFile(op *fuseops.FlushFileOp) { func (fs *flushFS) FlushFile(
var err error op *fuseops.FlushFileOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
@ -285,10 +226,8 @@ func (fs *flushFS) flushFile(op *fuseops.FlushFileOp) {
return return
} }
func (fs *flushFS) openDir(op *fuseops.OpenDirOp) { func (fs *flushFS) OpenDir(
var err error op *fuseops.OpenDirOp) (err error) {
defer func() { op.Respond(err) }()
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()