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 (
"fmt"
"io"
"os"
"sync"
"github.com/jacobsa/fuse"
"github.com/jacobsa/fuse/fuseops"
"github.com/jacobsa/fuse/fuseutil"
)
// Create a file system whose sole contents are a file named "foo" and a
@ -35,11 +35,12 @@ import (
func NewFileSystem(
reportFlush func(string) error,
reportFsync func(string) error) (server fuse.Server, err error) {
server = &flushFS{
fs := &flushFS{
reportFlush: reportFlush,
reportFsync: reportFsync,
}
server = fuseutil.NewFileSystemServer(fs)
return
}
@ -49,6 +50,8 @@ const (
)
type flushFS struct {
fuseutil.NotImplementedFileSystem
reportFlush 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
////////////////////////////////////////////////////////////////////////
func (fs *flushFS) init(op *fuseops.InitOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) Init(
op *fuseops.InitOp) (err error) {
return
}
func (fs *flushFS) lookUpInode(op *fuseops.LookUpInodeOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) LookUpInode(
op *fuseops.LookUpInodeOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -177,10 +130,8 @@ func (fs *flushFS) lookUpInode(op *fuseops.LookUpInodeOp) {
return
}
func (fs *flushFS) getInodeAttributes(op *fuseops.GetInodeAttributesOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) GetInodeAttributes(
op *fuseops.GetInodeAttributesOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -203,10 +154,8 @@ func (fs *flushFS) getInodeAttributes(op *fuseops.GetInodeAttributesOp) {
}
}
func (fs *flushFS) openFile(op *fuseops.OpenFileOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) OpenFile(
op *fuseops.OpenFileOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -219,10 +168,8 @@ func (fs *flushFS) openFile(op *fuseops.OpenFileOp) {
return
}
func (fs *flushFS) readFile(op *fuseops.ReadFileOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) ReadFile(
op *fuseops.ReadFileOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -238,10 +185,8 @@ func (fs *flushFS) readFile(op *fuseops.ReadFileOp) {
return
}
func (fs *flushFS) writeFile(op *fuseops.WriteFileOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) WriteFile(
op *fuseops.WriteFileOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -263,10 +208,8 @@ func (fs *flushFS) writeFile(op *fuseops.WriteFileOp) {
return
}
func (fs *flushFS) syncFile(op *fuseops.SyncFileOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) SyncFile(
op *fuseops.SyncFileOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -274,10 +217,8 @@ func (fs *flushFS) syncFile(op *fuseops.SyncFileOp) {
return
}
func (fs *flushFS) flushFile(op *fuseops.FlushFileOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) FlushFile(
op *fuseops.FlushFileOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@ -285,10 +226,8 @@ func (fs *flushFS) flushFile(op *fuseops.FlushFileOp) {
return
}
func (fs *flushFS) openDir(op *fuseops.OpenDirOp) {
var err error
defer func() { op.Respond(err) }()
func (fs *flushFS) OpenDir(
op *fuseops.OpenDirOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()