From 9e59bf2f6a6629f70cd4004a73a768745e142d4b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 27 Apr 2026 09:09:07 +0530 Subject: [PATCH] Avoid extra lstat() per entry when removing directory tree --- tools/utils/file_at_fd.go | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/tools/utils/file_at_fd.go b/tools/utils/file_at_fd.go index f7fdbf37b..818ad8d26 100644 --- a/tools/utils/file_at_fd.go +++ b/tools/utils/file_at_fd.go @@ -243,7 +243,7 @@ func RemoveChildren(dirFile *os.File) error { for { // Read names in small chunks to handle very large directories - names, err := dirFile.Readdirnames(64) + entries, err := dirFile.ReadDir(64) if err != nil { if errors.Is(err, io.EOF) { break @@ -254,16 +254,9 @@ func RemoveChildren(dirFile *os.File) error { break } - for _, name := range names { - var stat os.FileInfo - // Get file info relative to the parent FD - if stat, err = LstatAt(dirFile, name); err != nil { - if firstErr == nil { - firstErr = err - } - continue - } - if stat.IsDir() { + for _, entry := range entries { + name := entry.Name() + if entry.IsDir() { // Open subdirectory relative to parent FD var childFile *os.File if childFile, err = OpenDirAt(dirFile, name); err != nil {