Fixed package fuseutil.
parent
dd1fcfedf5
commit
ea210ae2bb
|
@ -18,6 +18,8 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
"github.com/jacobsa/fuse"
|
"github.com/jacobsa/fuse"
|
||||||
"github.com/jacobsa/fuse/fuseops"
|
"github.com/jacobsa/fuse/fuseops"
|
||||||
)
|
)
|
||||||
|
@ -33,26 +35,26 @@ import (
|
||||||
// See NotImplementedFileSystem for a convenient way to embed default
|
// See NotImplementedFileSystem for a convenient way to embed default
|
||||||
// implementations for methods you don't care about.
|
// implementations for methods you don't care about.
|
||||||
type FileSystem interface {
|
type FileSystem interface {
|
||||||
LookUpInode(*fuseops.LookUpInodeOp) error
|
LookUpInode(context.Context, *fuseops.LookUpInodeOp) error
|
||||||
GetInodeAttributes(*fuseops.GetInodeAttributesOp) error
|
GetInodeAttributes(context.Context, *fuseops.GetInodeAttributesOp) error
|
||||||
SetInodeAttributes(*fuseops.SetInodeAttributesOp) error
|
SetInodeAttributes(context.Context, *fuseops.SetInodeAttributesOp) error
|
||||||
ForgetInode(*fuseops.ForgetInodeOp) error
|
ForgetInode(context.Context, *fuseops.ForgetInodeOp) error
|
||||||
MkDir(*fuseops.MkDirOp) error
|
MkDir(context.Context, *fuseops.MkDirOp) error
|
||||||
CreateFile(*fuseops.CreateFileOp) error
|
CreateFile(context.Context, *fuseops.CreateFileOp) error
|
||||||
CreateSymlink(*fuseops.CreateSymlinkOp) error
|
CreateSymlink(context.Context, *fuseops.CreateSymlinkOp) error
|
||||||
Rename(*fuseops.RenameOp) error
|
Rename(context.Context, *fuseops.RenameOp) error
|
||||||
RmDir(*fuseops.RmDirOp) error
|
RmDir(context.Context, *fuseops.RmDirOp) error
|
||||||
Unlink(*fuseops.UnlinkOp) error
|
Unlink(context.Context, *fuseops.UnlinkOp) error
|
||||||
OpenDir(*fuseops.OpenDirOp) error
|
OpenDir(context.Context, *fuseops.OpenDirOp) error
|
||||||
ReadDir(*fuseops.ReadDirOp) error
|
ReadDir(context.Context, *fuseops.ReadDirOp) error
|
||||||
ReleaseDirHandle(*fuseops.ReleaseDirHandleOp) error
|
ReleaseDirHandle(context.Context, *fuseops.ReleaseDirHandleOp) error
|
||||||
OpenFile(*fuseops.OpenFileOp) error
|
OpenFile(context.Context, *fuseops.OpenFileOp) error
|
||||||
ReadFile(*fuseops.ReadFileOp) error
|
ReadFile(context.Context, *fuseops.ReadFileOp) error
|
||||||
WriteFile(*fuseops.WriteFileOp) error
|
WriteFile(context.Context, *fuseops.WriteFileOp) error
|
||||||
SyncFile(*fuseops.SyncFileOp) error
|
SyncFile(context.Context, *fuseops.SyncFileOp) error
|
||||||
FlushFile(*fuseops.FlushFileOp) error
|
FlushFile(context.Context, *fuseops.FlushFileOp) error
|
||||||
ReleaseFileHandle(*fuseops.ReleaseFileHandleOp) error
|
ReleaseFileHandle(context.Context, *fuseops.ReleaseFileHandleOp) error
|
||||||
ReadSymlink(*fuseops.ReadSymlinkOp) error
|
ReadSymlink(context.Context, *fuseops.ReadSymlinkOp) error
|
||||||
|
|
||||||
// Regard all inodes (including the root inode) as having their lookup counts
|
// Regard all inodes (including the root inode) as having their lookup counts
|
||||||
// decremented to zero, and clean up any resources associated with the file
|
// decremented to zero, and clean up any resources associated with the file
|
||||||
|
@ -91,7 +93,7 @@ func (s *fileSystemServer) ServeOps(c *fuse.Connection) {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
op, err := c.ReadOp()
|
ctx, op, err := c.ReadOp()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -101,11 +103,14 @@ func (s *fileSystemServer) ServeOps(c *fuse.Connection) {
|
||||||
}
|
}
|
||||||
|
|
||||||
s.opsInFlight.Add(1)
|
s.opsInFlight.Add(1)
|
||||||
go s.handleOp(op)
|
go s.handleOp(c, ctx, op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *fileSystemServer) handleOp(op fuseops.Op) {
|
func (s *fileSystemServer) handleOp(
|
||||||
|
c *fuse.Connection,
|
||||||
|
ctx context.Context,
|
||||||
|
op fuseops.Op) {
|
||||||
defer s.opsInFlight.Done()
|
defer s.opsInFlight.Done()
|
||||||
|
|
||||||
// Dispatch to the appropriate method.
|
// Dispatch to the appropriate method.
|
||||||
|
@ -115,65 +120,65 @@ func (s *fileSystemServer) handleOp(op fuseops.Op) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
|
|
||||||
case *fuseops.LookUpInodeOp:
|
case *fuseops.LookUpInodeOp:
|
||||||
err = s.fs.LookUpInode(typed)
|
err = s.fs.LookUpInode(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.GetInodeAttributesOp:
|
case *fuseops.GetInodeAttributesOp:
|
||||||
err = s.fs.GetInodeAttributes(typed)
|
err = s.fs.GetInodeAttributes(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.SetInodeAttributesOp:
|
case *fuseops.SetInodeAttributesOp:
|
||||||
err = s.fs.SetInodeAttributes(typed)
|
err = s.fs.SetInodeAttributes(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.ForgetInodeOp:
|
case *fuseops.ForgetInodeOp:
|
||||||
err = s.fs.ForgetInode(typed)
|
err = s.fs.ForgetInode(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.MkDirOp:
|
case *fuseops.MkDirOp:
|
||||||
err = s.fs.MkDir(typed)
|
err = s.fs.MkDir(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.CreateFileOp:
|
case *fuseops.CreateFileOp:
|
||||||
err = s.fs.CreateFile(typed)
|
err = s.fs.CreateFile(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.CreateSymlinkOp:
|
case *fuseops.CreateSymlinkOp:
|
||||||
err = s.fs.CreateSymlink(typed)
|
err = s.fs.CreateSymlink(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.RenameOp:
|
case *fuseops.RenameOp:
|
||||||
err = s.fs.Rename(typed)
|
err = s.fs.Rename(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.RmDirOp:
|
case *fuseops.RmDirOp:
|
||||||
err = s.fs.RmDir(typed)
|
err = s.fs.RmDir(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.UnlinkOp:
|
case *fuseops.UnlinkOp:
|
||||||
err = s.fs.Unlink(typed)
|
err = s.fs.Unlink(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.OpenDirOp:
|
case *fuseops.OpenDirOp:
|
||||||
err = s.fs.OpenDir(typed)
|
err = s.fs.OpenDir(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.ReadDirOp:
|
case *fuseops.ReadDirOp:
|
||||||
err = s.fs.ReadDir(typed)
|
err = s.fs.ReadDir(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.ReleaseDirHandleOp:
|
case *fuseops.ReleaseDirHandleOp:
|
||||||
err = s.fs.ReleaseDirHandle(typed)
|
err = s.fs.ReleaseDirHandle(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.OpenFileOp:
|
case *fuseops.OpenFileOp:
|
||||||
err = s.fs.OpenFile(typed)
|
err = s.fs.OpenFile(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.ReadFileOp:
|
case *fuseops.ReadFileOp:
|
||||||
err = s.fs.ReadFile(typed)
|
err = s.fs.ReadFile(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.WriteFileOp:
|
case *fuseops.WriteFileOp:
|
||||||
err = s.fs.WriteFile(typed)
|
err = s.fs.WriteFile(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.SyncFileOp:
|
case *fuseops.SyncFileOp:
|
||||||
err = s.fs.SyncFile(typed)
|
err = s.fs.SyncFile(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.FlushFileOp:
|
case *fuseops.FlushFileOp:
|
||||||
err = s.fs.FlushFile(typed)
|
err = s.fs.FlushFile(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.ReleaseFileHandleOp:
|
case *fuseops.ReleaseFileHandleOp:
|
||||||
err = s.fs.ReleaseFileHandle(typed)
|
err = s.fs.ReleaseFileHandle(ctx, typed)
|
||||||
|
|
||||||
case *fuseops.ReadSymlinkOp:
|
case *fuseops.ReadSymlinkOp:
|
||||||
err = s.fs.ReadSymlink(typed)
|
err = s.fs.ReadSymlink(ctx, typed)
|
||||||
}
|
}
|
||||||
|
|
||||||
op.Respond(err)
|
c.Reply(ctx, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ package fuseutil
|
||||||
import (
|
import (
|
||||||
"github.com/jacobsa/fuse"
|
"github.com/jacobsa/fuse"
|
||||||
"github.com/jacobsa/fuse/fuseops"
|
"github.com/jacobsa/fuse/fuseops"
|
||||||
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A FileSystem that responds to all ops with fuse.ENOSYS. Embed this in your
|
// A FileSystem that responds to all ops with fuse.ENOSYS. Embed this in your
|
||||||
|
@ -29,120 +30,140 @@ type NotImplementedFileSystem struct {
|
||||||
var _ FileSystem = &NotImplementedFileSystem{}
|
var _ FileSystem = &NotImplementedFileSystem{}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) LookUpInode(
|
func (fs *NotImplementedFileSystem) LookUpInode(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.LookUpInodeOp) (err error) {
|
op *fuseops.LookUpInodeOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) GetInodeAttributes(
|
func (fs *NotImplementedFileSystem) GetInodeAttributes(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.GetInodeAttributesOp) (err error) {
|
op *fuseops.GetInodeAttributesOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) SetInodeAttributes(
|
func (fs *NotImplementedFileSystem) SetInodeAttributes(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.SetInodeAttributesOp) (err error) {
|
op *fuseops.SetInodeAttributesOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) ForgetInode(
|
func (fs *NotImplementedFileSystem) ForgetInode(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.ForgetInodeOp) (err error) {
|
op *fuseops.ForgetInodeOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) MkDir(
|
func (fs *NotImplementedFileSystem) MkDir(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.MkDirOp) (err error) {
|
op *fuseops.MkDirOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) CreateFile(
|
func (fs *NotImplementedFileSystem) CreateFile(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.CreateFileOp) (err error) {
|
op *fuseops.CreateFileOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) CreateSymlink(
|
func (fs *NotImplementedFileSystem) CreateSymlink(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.CreateSymlinkOp) (err error) {
|
op *fuseops.CreateSymlinkOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) Rename(
|
func (fs *NotImplementedFileSystem) Rename(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.RenameOp) (err error) {
|
op *fuseops.RenameOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) RmDir(
|
func (fs *NotImplementedFileSystem) RmDir(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.RmDirOp) (err error) {
|
op *fuseops.RmDirOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) Unlink(
|
func (fs *NotImplementedFileSystem) Unlink(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.UnlinkOp) (err error) {
|
op *fuseops.UnlinkOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) OpenDir(
|
func (fs *NotImplementedFileSystem) OpenDir(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.OpenDirOp) (err error) {
|
op *fuseops.OpenDirOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) ReadDir(
|
func (fs *NotImplementedFileSystem) ReadDir(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.ReadDirOp) (err error) {
|
op *fuseops.ReadDirOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) ReleaseDirHandle(
|
func (fs *NotImplementedFileSystem) ReleaseDirHandle(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.ReleaseDirHandleOp) (err error) {
|
op *fuseops.ReleaseDirHandleOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) OpenFile(
|
func (fs *NotImplementedFileSystem) OpenFile(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.OpenFileOp) (err error) {
|
op *fuseops.OpenFileOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) ReadFile(
|
func (fs *NotImplementedFileSystem) ReadFile(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.ReadFileOp) (err error) {
|
op *fuseops.ReadFileOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) WriteFile(
|
func (fs *NotImplementedFileSystem) WriteFile(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.WriteFileOp) (err error) {
|
op *fuseops.WriteFileOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) SyncFile(
|
func (fs *NotImplementedFileSystem) SyncFile(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.SyncFileOp) (err error) {
|
op *fuseops.SyncFileOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) FlushFile(
|
func (fs *NotImplementedFileSystem) FlushFile(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.FlushFileOp) (err error) {
|
op *fuseops.FlushFileOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) ReleaseFileHandle(
|
func (fs *NotImplementedFileSystem) ReleaseFileHandle(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.ReleaseFileHandleOp) (err error) {
|
op *fuseops.ReleaseFileHandleOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *NotImplementedFileSystem) ReadSymlink(
|
func (fs *NotImplementedFileSystem) ReadSymlink(
|
||||||
|
ctx context.Context,
|
||||||
op *fuseops.ReadSymlinkOp) (err error) {
|
op *fuseops.ReadSymlinkOp) (err error) {
|
||||||
err = fuse.ENOSYS
|
err = fuse.ENOSYS
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue