Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>
err = os.ErrNotExist
return nil
}
+ if locked[oldinode] {
+ // oldinode cannot become a descendant of itself.
+ err = ErrInvalidArgument
+ return oldinode
+ }
accepted := newdirf.inode.Child(newname, func(existing inode) inode {
if existing != nil && existing.IsDir() {
err = ErrIsDirectory
gn.SetParent(dn, name)
return gn
}
- return dn.treenode.Child(name, replace)
+ oldchild := dn.treenode.Child(name, nil)
+ child := dn.treenode.Child(name, replace)
+ if child != nil && child != oldchild {
+ child.SetParent(dn, name)
+ }
+ return child
}
// sync flushes in-memory data (for all files in the tree rooted at