From a5ae9b4752c300bcc39d9531581cbfae2525aec3 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 15 Aug 2012 00:09:41 +0200 Subject: [PATCH] nfs4: Do not repeat OPENATTR requests if not supported --- .../kernel/file_systems/nfs4/FileSystem.cpp | 1 + .../kernel/file_systems/nfs4/FileSystem.h | 18 ++++++++++++++++++ .../kernel/file_systems/nfs4/InodeDir.cpp | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp b/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp index d211299d9e..5c28b92d1c 100644 --- a/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/FileSystem.cpp @@ -27,6 +27,7 @@ FileSystem::FileSystem() fPrev(NULL), fOpenCount(0), fOpenOwnerSequence(0), + fNamedAttrs(true), fPath(NULL), fRoot(NULL), fId(1) diff --git a/src/add-ons/kernel/file_systems/nfs4/FileSystem.h b/src/add-ons/kernel/file_systems/nfs4/FileSystem.h index 10850e96b2..3a2dfaceea 100644 --- a/src/add-ons/kernel/file_systems/nfs4/FileSystem.h +++ b/src/add-ons/kernel/file_systems/nfs4/FileSystem.h @@ -62,6 +62,9 @@ public: inline uint32 OpenOwnerSequenceLock(); inline void OpenOwnerSequenceUnlock(uint32 sequence); + inline bool NamedAttrs(); + inline void SetNamedAttrs(bool attrs); + FileSystem* fNext; FileSystem* fPrev; private: @@ -83,6 +86,7 @@ private: uint32 fExpireType; uint32 fSupAttrs[2]; + bool fNamedAttrs; FileSystemId fFsId; const char* fPath; @@ -205,5 +209,19 @@ FileSystem::OpenOwnerSequenceUnlock(uint32 sequence) } +inline bool +FileSystem::NamedAttrs() +{ + return fNamedAttrs; +} + + +inline void +FileSystem::SetNamedAttrs(bool attrs) +{ + fNamedAttrs = attrs; +} + + #endif // FILESYSTEM_H diff --git a/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp b/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp index f2c83fe6ab..d78d28fd55 100644 --- a/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp @@ -62,10 +62,16 @@ Inode::OpenAttrDir(OpenDirCookie* cookie) status_t Inode::LoadAttrDirHandle() { + if (!fFileSystem->NamedAttrs()) + return B_UNSUPPORTED; + if (fInfo.fAttrDir.fSize == 0) { FileHandle handle; status_t result = NFS4Inode::OpenAttrDir(&handle); + if (result == B_UNSUPPORTED) + fFileSystem->SetNamedAttrs(false); + if (result != B_OK) return result;