diff --git a/weed/mount/inode_to_path.go b/weed/mount/inode_to_path.go index fa17a9261..29635efca 100644 --- a/weed/mount/inode_to_path.go +++ b/weed/mount/inode_to_path.go @@ -152,7 +152,7 @@ func (i *InodeToPath) RemovePath(path util.FullPath) { } } -func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (replacedInode uint64) { +func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (sourceInode, targetInode uint64) { i.Lock() defer i.Unlock() sourceInode, sourceFound := i.path2inode[sourcePath] @@ -178,7 +178,7 @@ func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (replacedIn } else { glog.Errorf("MovePath %s to %s: sourceInode %d not found", sourcePath, targetPath, sourceInode) } - return targetInode + return } func (i *InodeToPath) Forget(inode, nlookup uint64, onForgetDir func(dir util.FullPath)) { diff --git a/weed/mount/weedfs_rename.go b/weed/mount/weedfs_rename.go index 23caa48cd..ef4ff55c2 100644 --- a/weed/mount/weedfs_rename.go +++ b/weed/mount/weedfs_rename.go @@ -233,10 +233,16 @@ func (wfs *WFS) handleRenameResponse(ctx context.Context, resp *filer_pb.StreamR oldPath := oldParent.Child(oldName) newPath := newParent.Child(newName) - replacedInode := wfs.inodeToPath.MovePath(oldPath, newPath) + sourceInode, targetInode := wfs.inodeToPath.MovePath(oldPath, newPath) + if sourceInode != 0 { + if fh := wfs.fhmap.inode2fh[sourceInode]; foundFh && fh.entry != nil { + fh.entry.Name = newName + } + wfs.fuseServer.InodeNotify(sourceInode, 0, -1) + } // invalidate attr and data - if replacedInode > 0 { - wfs.fuseServer.InodeNotify(replacedInode, 0, -1) + if targetInode != 0 { + wfs.fuseServer.InodeNotify(targetInode, 0, -1) } } else if resp.EventNotification.OldEntry != nil {