Commit 20b75240 authored by Han-Wen Nienhuys's avatar Han-Wen Nienhuys

nodefs: use AttrOut for GetAttr

parent e5194406
...@@ -121,7 +121,7 @@ type Node interface { ...@@ -121,7 +121,7 @@ type Node interface {
// The methods below may be called on closed files, due to // The methods below may be called on closed files, due to
// concurrency. In that case, you should return EBADF. // concurrency. In that case, you should return EBADF.
GetAttr(ctx context.Context, f File, out *fuse.Attr) fuse.Status GetAttr(ctx context.Context, f File, out *fuse.AttrOut) fuse.Status
/* /*
NOSUBMIT - fold into a setattr method, or expand methods? NOSUBMIT - fold into a setattr method, or expand methods?
...@@ -162,7 +162,7 @@ type File interface { ...@@ -162,7 +162,7 @@ type File interface {
// The methods below may be called on closed files, due to // The methods below may be called on closed files, due to
// concurrency. In that case, you should return EBADF. // concurrency. In that case, you should return EBADF.
// TODO - fold into a setattr method? // TODO - fold into a setattr method?
GetAttr(ctx context.Context, out *fuse.Attr) fuse.Status GetAttr(ctx context.Context, out *fuse.AttrOut) fuse.Status
Truncate(ctx context.Context, size uint64) fuse.Status Truncate(ctx context.Context, size uint64) fuse.Status
Chown(ctx context.Context, uid uint32, gid uint32) fuse.Status Chown(ctx context.Context, uid uint32, gid uint32) fuse.Status
Chmod(ctx context.Context, perms uint32) fuse.Status Chmod(ctx context.Context, perms uint32) fuse.Status
......
...@@ -267,8 +267,13 @@ func (b *rawBridge) Create(input *fuse.CreateIn, name string, out *fuse.CreateOu ...@@ -267,8 +267,13 @@ func (b *rawBridge) Create(input *fuse.CreateIn, name string, out *fuse.CreateOu
out.OpenFlags = flags out.OpenFlags = flags
f.GetAttr(ctx, &out.Attr) var temp fuse.AttrOut
f.GetAttr(ctx, &temp)
out.Attr = temp.Attr
out.AttrValid = temp.AttrValid
out.AttrValidNsec = temp.AttrValidNsec
b.setEntryOutTimeout(&out.EntryOut)
if out.Attr.Mode&^07777 != fuse.S_IFREG { if out.Attr.Mode&^07777 != fuse.S_IFREG {
log.Panicf("Create: mode must be S_IFREG (%o), got %o", fuse.S_IFREG, out.Attr.Mode) log.Panicf("Create: mode must be S_IFREG (%o), got %o", fuse.S_IFREG, out.Attr.Mode)
} }
...@@ -287,7 +292,7 @@ func (b *rawBridge) unregisterNode(nodeid uint64) { ...@@ -287,7 +292,7 @@ func (b *rawBridge) unregisterNode(nodeid uint64) {
func (b *rawBridge) SetDebug(debug bool) {} func (b *rawBridge) SetDebug(debug bool) {}
func (b *rawBridge) GetAttr(input *fuse.GetAttrIn, out *fuse.AttrOut) (code fuse.Status) { func (b *rawBridge) GetAttr(input *fuse.GetAttrIn, out *fuse.AttrOut) fuse.Status {
n, fEntry := b.inode(input.NodeId, input.Fh()) n, fEntry := b.inode(input.NodeId, input.Fh())
f := fEntry.file f := fEntry.file
...@@ -295,8 +300,7 @@ func (b *rawBridge) GetAttr(input *fuse.GetAttrIn, out *fuse.AttrOut) (code fuse ...@@ -295,8 +300,7 @@ func (b *rawBridge) GetAttr(input *fuse.GetAttrIn, out *fuse.AttrOut) (code fuse
f = nil f = nil
} }
dest := &out.Attr code = n.node.GetAttr(context.TODO(), f, out)
code = n.node.GetAttr(context.TODO(), f, dest)
if out.Nlink == 0 { if out.Nlink == 0 {
// With Nlink == 0, newer kernels will refuse link // With Nlink == 0, newer kernels will refuse link
// operations. // operations.
...@@ -377,10 +381,7 @@ func (b *rawBridge) SetAttr(input *fuse.SetAttrIn, out *fuse.AttrOut) (code fuse ...@@ -377,10 +381,7 @@ func (b *rawBridge) SetAttr(input *fuse.SetAttrIn, out *fuse.AttrOut) (code fuse
// Must call GetAttr(); the filesystem may override some of // Must call GetAttr(); the filesystem may override some of
// the changes we effect here. // the changes we effect here.
attr := &out.Attr code = n.node.GetAttr(ctx, f, out)
// should take AttrOut
code = n.node.GetAttr(ctx, f, attr)
b.setAttrTimeout(out) b.setAttrTimeout(out)
return code return code
} }
......
...@@ -93,7 +93,7 @@ func (n *DefaultNode) Allocate(ctx context.Context, f File, off uint64, size uin ...@@ -93,7 +93,7 @@ func (n *DefaultNode) Allocate(ctx context.Context, f File, off uint64, size uin
return fuse.ENOSYS return fuse.ENOSYS
} }
func (n *DefaultNode) GetAttr(ctx context.Context, f File, out *fuse.Attr) fuse.Status { func (n *DefaultNode) GetAttr(ctx context.Context, f File, out *fuse.AttrOut) fuse.Status {
if f != nil { if f != nil {
f.GetAttr(ctx, out) f.GetAttr(ctx, out)
} }
......
...@@ -152,7 +152,7 @@ func (f *loopbackFile) Chown(ctx context.Context, uid uint32, gid uint32) fuse.S ...@@ -152,7 +152,7 @@ func (f *loopbackFile) Chown(ctx context.Context, uid uint32, gid uint32) fuse.S
return r return r
} }
func (f *loopbackFile) GetAttr(ctx context.Context, a *fuse.Attr) fuse.Status { func (f *loopbackFile) GetAttr(ctx context.Context, a *fuse.AttrOut) fuse.Status {
st := syscall.Stat_t{} st := syscall.Stat_t{}
f.mu.Lock() f.mu.Lock()
err := syscall.Fstat(int(f.File.Fd()), &st) err := syscall.Fstat(int(f.File.Fd()), &st)
......
...@@ -19,7 +19,7 @@ type loopbackRoot struct { ...@@ -19,7 +19,7 @@ type loopbackRoot struct {
root string root string
} }
func (n *loopbackRoot) GetAttr(ctx context.Context, f File, out *fuse.Attr) fuse.Status { func (n *loopbackRoot) GetAttr(ctx context.Context, f File, out *fuse.AttrOut) fuse.Status {
var err error = nil var err error = nil
st := syscall.Stat_t{} st := syscall.Stat_t{}
err = syscall.Stat(n.root, &st) err = syscall.Stat(n.root, &st)
...@@ -175,7 +175,7 @@ func (n *loopbackNode) Open(ctx context.Context, flags uint32) (fh File, fuseFla ...@@ -175,7 +175,7 @@ func (n *loopbackNode) Open(ctx context.Context, flags uint32) (fh File, fuseFla
return NewLoopbackFile(f), 0, fuse.OK return NewLoopbackFile(f), 0, fuse.OK
} }
func (n *loopbackNode) GetAttr(ctx context.Context, f File, out *fuse.Attr) fuse.Status { func (n *loopbackNode) GetAttr(ctx context.Context, f File, out *fuse.AttrOut) fuse.Status {
if f != nil { if f != nil {
return f.GetAttr(ctx, out) return f.GetAttr(ctx, out)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment