diff --git a/weed/filer2/filer.go b/weed/filer2/filer.go
index 0dde08d04..8e8528e99 100644
--- a/weed/filer2/filer.go
+++ b/weed/filer2/filer.go
@@ -132,13 +132,7 @@ func (f *Filer) CreateEntry(entry *Entry) error {
 			return fmt.Errorf("insert entry %s: %v", entry.FullPath, err)
 		}
 	} else {
-		if oldEntry.IsDirectory() && !entry.IsDirectory() {
-			return fmt.Errorf("existing %s is a directory", entry.FullPath)
-		}
-		if !oldEntry.IsDirectory() && entry.IsDirectory() {
-			return fmt.Errorf("existing %s is a file", entry.FullPath)
-		}
-		if err := f.store.UpdateEntry(entry); err != nil {
+		if err := f.UpdateEntry(oldEntry, entry); err != nil {
 			return fmt.Errorf("update entry %s: %v", entry.FullPath, err)
 		}
 	}
@@ -150,7 +144,15 @@ func (f *Filer) CreateEntry(entry *Entry) error {
 	return nil
 }
 
-func (f *Filer) UpdateEntry(entry *Entry) (err error) {
+func (f *Filer) UpdateEntry(oldEntry, entry *Entry) (err error) {
+	if oldEntry != nil {
+		if oldEntry.IsDirectory() && !entry.IsDirectory() {
+			return fmt.Errorf("existing %s is a directory", entry.FullPath)
+		}
+		if !oldEntry.IsDirectory() && entry.IsDirectory() {
+			return fmt.Errorf("existing %s is a file", entry.FullPath)
+		}
+	}
 	return f.store.UpdateEntry(entry)
 }
 
diff --git a/weed/server/filer_grpc_server.go b/weed/server/filer_grpc_server.go
index 04e68bbc2..ca318db05 100644
--- a/weed/server/filer_grpc_server.go
+++ b/weed/server/filer_grpc_server.go
@@ -165,7 +165,7 @@ func (fs *FilerServer) UpdateEntry(ctx context.Context, req *filer_pb.UpdateEntr
 		return &filer_pb.UpdateEntryResponse{}, err
 	}
 
-	if err = fs.filer.UpdateEntry(newEntry); err == nil {
+	if err = fs.filer.UpdateEntry(entry, newEntry); err == nil {
 		fs.filer.DeleteChunks(unusedChunks)
 		fs.filer.DeleteChunks(garbages)
 	}