Re-use dirent gaps.

geesefs-0-30-9
Aaron Jacobs 2015-03-03 14:31:15 +11:00
parent 622d7a176b
commit 4d18942456
1 changed files with 10 additions and 2 deletions

View File

@ -165,6 +165,7 @@ func (inode *inode) AddChild(
id fuse.InodeID, id fuse.InodeID,
name string, name string,
dt fuseutil.DirentType) { dt fuseutil.DirentType) {
// Set up the entry.
e := fuseutil.Dirent{ e := fuseutil.Dirent{
Offset: fuse.DirOffset(len(inode.entries) + 1), Offset: fuse.DirOffset(len(inode.entries) + 1),
Inode: id, Inode: id,
@ -172,9 +173,16 @@ func (inode *inode) AddChild(
Type: dt, Type: dt,
} }
inode.entries = append(inode.entries, e) // Look for a gap in which we can insert it.
for i := range inode.entries {
if inode.entries[i].Type == fuseutil.DT_Unknown {
inode.entries[i] = e
return
}
}
// TODO(jacobsa): Re-use gaps. // Append it to the end.
inode.entries = append(inode.entries, e)
} }
// Remove an entry for a child. // Remove an entry for a child.