Implement setattr; otherwise closing after writing fails.

geesefs-0-30-9
Aaron Jacobs 2015-08-11 06:29:52 +00:00
parent eaa0177b80
commit e69b8a8c37
1 changed files with 34 additions and 14 deletions

View File

@ -90,6 +90,29 @@ func (fs *flushFS) barAttributes() fuseops.InodeAttributes {
} }
} }
// LOCKS_REQUIRED(fs.mu)
func (fs *flushFS) getAttributes(id fuseops.InodeID) (
attrs fuseops.InodeAttributes,
err error) {
switch id {
case fuseops.RootInodeID:
attrs = fs.rootAttributes()
return
case fooID:
attrs = fs.fooAttributes()
return
case barID:
attrs = fs.barAttributes()
return
default:
err = fuse.ENOENT
return
}
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// FileSystem methods // FileSystem methods
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -134,23 +157,20 @@ func (fs *flushFS) GetInodeAttributes(
fs.mu.Lock() fs.mu.Lock()
defer fs.mu.Unlock() defer fs.mu.Unlock()
switch op.Inode { op.Attributes, err = fs.getAttributes(op.Inode)
case fuseops.RootInodeID: return
op.Attributes = fs.rootAttributes() }
return
case fooID: func (fs *flushFS) SetInodeAttributes(
op.Attributes = fs.fooAttributes() ctx context.Context,
return op *fuseops.SetInodeAttributesOp) (err error) {
fs.mu.Lock()
defer fs.mu.Unlock()
case barID: // Ignore any changes and simply return existing attributes.
op.Attributes = fs.barAttributes() op.Attributes, err = fs.getAttributes(op.Inode)
return
default: return
err = fuse.ENOENT
return
}
} }
func (fs *flushFS) OpenFile( func (fs *flushFS) OpenFile(