diff --git a/mfs/dir.go b/mfs/dir.go index 219dc4cceb02..42090bc16ec9 100644 --- a/mfs/dir.go +++ b/mfs/dir.go @@ -336,7 +336,7 @@ func (d *Directory) Unlink(name string) error { } func (d *Directory) Flush() error { - nd, err := d.GetNode() + nd, err := d.getNode(true) if err != nil { return err } @@ -368,7 +368,7 @@ func (d *Directory) AddChild(name string, nd node.Node) error { return nil } -func (d *Directory) sync() error { +func (d *Directory) sync(clear bool) error { for name, dir := range d.childDirs { nd, err := dir.GetNode() if err != nil { @@ -379,6 +379,10 @@ func (d *Directory) sync() error { if err != nil { return err } + + if clear { + delete(d.childDirs, name) + } } for name, file := range d.files { @@ -391,6 +395,10 @@ func (d *Directory) sync() error { if err != nil { return err } + + if clear { + delete(d.files, name) + } } return nil @@ -407,10 +415,14 @@ func (d *Directory) Path() string { } func (d *Directory) GetNode() (node.Node, error) { + return d.getNode(false) +} + +func (d *Directory) getNode(clear bool) (node.Node, error) { d.lock.Lock() defer d.lock.Unlock() - err := d.sync() + err := d.sync(clear) if err != nil { return nil, err } diff --git a/mfs/system.go b/mfs/system.go index fc5be0f6e2ff..6f99e9352ef7 100644 --- a/mfs/system.go +++ b/mfs/system.go @@ -112,12 +112,17 @@ func (kr *Root) GetValue() FSNode { } func (kr *Root) Flush() error { - nd, err := kr.GetValue().GetNode() - if err != nil { + v := kr.GetValue() + if err := v.Flush(); err != nil { return err } if kr.repub != nil { + nd, err := v.GetNode() + if err != nil { + return err + } + kr.repub.Update(nd.Cid()) } return nil