From c0344ea198e280a3e8f23191262e2d7fffe9ff0c Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 15 Aug 2012 04:22:18 +0200 Subject: [PATCH] nfs4: Get correct change value for attribute directories --- src/add-ons/kernel/file_systems/nfs4/DirectoryCache.cpp | 2 +- src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp | 7 +++++-- src/add-ons/kernel/file_systems/nfs4/NFS4Inode.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.cpp b/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.cpp index e7062c0567..325a7646a3 100644 --- a/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.cpp @@ -179,7 +179,7 @@ status_t DirectoryCache::Revalidate() { uint64 change; - if (fInode->GetChangeInfo(&change) == B_OK && change == fChange) { + if (fInode->GetChangeInfo(&change, true) == B_OK && change == fChange) { fExpireTime = system_time() + kExpirationTime; return B_OK; } diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp index 6f66c32d2e..145c50f842 100644 --- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp @@ -14,14 +14,17 @@ status_t -NFS4Inode::GetChangeInfo(uint64* change) +NFS4Inode::GetChangeInfo(uint64* change, bool attrDir) { do { RPC::Server* serv = fFileSystem->Server(); Request request(serv); RequestBuilder& req = request.Builder(); - req.PutFH(fInfo.fHandle); + if (attrDir) + req.PutFH(fInfo.fAttrDir); + else + req.PutFH(fInfo.fHandle); Attribute attr[] = { FATTR4_CHANGE }; req.GetAttr(attr, sizeof(attr) / sizeof(Attribute)); diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.h b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.h index fcb109052f..62db373c8a 100644 --- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.h +++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.h @@ -22,7 +22,7 @@ class NFS4Inode : protected NFS4Object { public: - status_t GetChangeInfo(uint64* change); + status_t GetChangeInfo(uint64* change, bool attrDir = false); status_t ReadLink(void* buffer, size_t* length); protected: