diff --git a/src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp index 7b904accf5..01d3821568 100644 --- a/src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp @@ -382,8 +382,12 @@ btrfs_lookup(fs_volume* _volume, fs_vnode* _directory, const char* name, return status; status = DirectoryIterator(directory).Lookup(name, strlen(name), _vnodeID); - if (status != B_OK) + if (status != B_OK) { + if (status == B_ENTRY_NOT_FOUND) + entry_cache_add_missing(volume->ID(), directory->ID(), name); return status; + } + entry_cache_add(volume->ID(), directory->ID(), name, *_vnodeID); return get_vnode(volume->FSVolume(), *_vnodeID, NULL); } diff --git a/src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp b/src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp index 94a73fbe6f..954ba23e3b 100644 --- a/src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp @@ -397,10 +397,13 @@ exfat_lookup(fs_volume* _volume, fs_vnode* _directory, const char* name, status = DirectoryIterator(directory).Lookup(name, strlen(name), _vnodeID); if (status != B_OK) { ERROR("exfat_lookup: name %s (%s)\n", name, strerror(status)); + if (status == B_ENTRY_NOT_FOUND) + entry_cache_add_missing(volume->ID(), directory->ID(), name); return status; } TRACE("exfat_lookup: ID %" B_PRIdINO "\n", *_vnodeID); + entry_cache_add(volume->ID(), directory->ID(), name, *_vnodeID); return get_vnode(volume->FSVolume(), *_vnodeID, NULL); } diff --git a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp index 7ebe231207..b3c9747b62 100644 --- a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp @@ -467,8 +467,12 @@ ext2_lookup(fs_volume* _volume, fs_vnode* _directory, const char* name, ObjectDeleter iteratorDeleter(iterator); status = iterator->FindEntry(name, _vnodeID); - if (status != B_OK) + if (status != B_OK) { + if (status == B_ENTRY_NOT_FOUND) + entry_cache_add_missing(volume->ID(), directory->ID(), name); return status; + } + entry_cache_add(volume->ID(), directory->ID(), name, *_vnodeID); return get_vnode(volume->FSVolume(), *_vnodeID, NULL); }