diff --git a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp index 4b179c5ef8..29f9cb7bb2 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp @@ -430,8 +430,9 @@ Inode::Access(int mode) int acc = 0; uint32 allowed; + bool cache = fFileSystem->GetConfiguration().fCacheMetadata; status_t result = fMetaCache.GetAccess(geteuid(), &allowed); - if (result != B_OK) { + if (result != B_OK || !cache) { result = NFS4Inode::Access(&allowed); if (result != B_OK) return result; @@ -463,6 +464,10 @@ Inode::Stat(struct stat* st, OpenAttrCookie* attr) if (attr != NULL) return GetStat(st, attr); + bool cache = fFileSystem->GetConfiguration().fCacheMetadata; + if (!cache) + return GetStat(st, NULL); + status_t result = fMetaCache.GetStat(st); if (result != B_OK) { struct stat temp; diff --git a/src/add-ons/kernel/file_systems/nfs4/MetadataCache.cpp b/src/add-ons/kernel/file_systems/nfs4/MetadataCache.cpp index bc345a9401..38795b4402 100644 --- a/src/add-ons/kernel/file_systems/nfs4/MetadataCache.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/MetadataCache.cpp @@ -35,8 +35,7 @@ status_t MetadataCache::GetStat(struct stat* st) { MutexLocker _(fLock); - bool cache = fInode->GetFileSystem()->GetConfiguration().fCacheMetadata; - if (fForceValid || (cache && fExpire > time(NULL))) { + if (fForceValid || fExpire > time(NULL)) { // Do not touch other members of struct stat st->st_size = fStatCache.st_size; st->st_mode = fStatCache.st_mode; @@ -112,9 +111,7 @@ MetadataCache::SetAccess(uid_t uid, uint32 allowed) entry.fExpire = time(NULL) + kExpirationTime; entry.fForceValid = fForceValid; - bool cache = fInode->GetFileSystem()->GetConfiguration().fCacheMetadata; - if (fForceValid || cache) - fAccessCache.Insert(uid, entry); + fAccessCache.Insert(uid, entry); } diff --git a/src/add-ons/kernel/file_systems/nfs4/MetadataCache.h b/src/add-ons/kernel/file_systems/nfs4/MetadataCache.h index 07a13a3c58..82e44c6496 100644 --- a/src/add-ons/kernel/file_systems/nfs4/MetadataCache.h +++ b/src/add-ons/kernel/file_systems/nfs4/MetadataCache.h @@ -69,7 +69,8 @@ inline void MetadataCache::InvalidateStat() { MutexLocker _(fLock); - fExpire = 0; + if (!fForceValid) + fExpire = 0; } @@ -77,7 +78,8 @@ inline void MetadataCache::InvalidateAccess() { MutexLocker _(fLock); - fAccessCache.MakeEmpty(); + if (!fForceValid) + fAccessCache.MakeEmpty(); }