From cf5f513b3b33576faed4332733f0b6e2155ef888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Wed, 27 Apr 2022 16:20:27 +0200 Subject: [PATCH] file_systems: add entry_cache_(add/missing) in btrfs,ext2,exfat lookup methods. Change-Id: I77857421a65f371bc885f1d4eb66ef2ab4376e56 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5252 Tested-by: Commit checker robot Reviewed-by: waddlesplash --- src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp | 6 +++++- src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp | 3 +++ src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp | 6 +++++- 3 files changed, 13 insertions(+), 2 deletions(-) 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); }