From 5a9212d612306df5df3ca1b2f0eb0112c57e2def Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Sun, 5 Aug 2012 15:44:16 +0200 Subject: [PATCH] nfs4: NFS4Object::HandleErrors needs OpenState or OpenFileCookie object --- .../kernel/file_systems/nfs4/NFS4Inode.cpp | 6 +++--- .../kernel/file_systems/nfs4/NFS4Object.cpp | 15 ++++++++++++--- src/add-ons/kernel/file_systems/nfs4/NFS4Object.h | 2 +- .../kernel/file_systems/nfs4/OpenState.cpp | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp index a95c3b9700..cb8988178f 100644 --- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp @@ -539,7 +539,7 @@ NFS4Inode::OpenFile(OpenState* state, int mode) ReplyInterpreter& reply = request.Reply(); - if (HandleErrors(reply.NFS4Error(), serv)) + if (HandleErrors(reply.NFS4Error(), serv, NULL, state)) continue; // Verify if the file we want to open is the file this Inode @@ -592,7 +592,7 @@ NFS4Inode::ReadFile(OpenFileCookie* cookie, OpenState* state, uint64 position, ReplyInterpreter& reply = request.Reply(); - if (HandleErrors(reply.NFS4Error(), serv, cookie)) + if (HandleErrors(reply.NFS4Error(), serv, cookie, state)) continue; reply.PutFH(); @@ -625,7 +625,7 @@ NFS4Inode::WriteFile(OpenFileCookie* cookie, OpenState* state, uint64 position, ReplyInterpreter& reply = request.Reply(); - if (HandleErrors(reply.NFS4Error(), serv, cookie)) + if (HandleErrors(reply.NFS4Error(), serv, cookie, state)) continue; reply.PutFH(); diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp b/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp index e5db3e618c..73c5e3a5bb 100644 --- a/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp @@ -15,7 +15,7 @@ bool NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv, - OpenFileCookie* cookie) + OpenFileCookie* cookie, OpenState* state) { uint32 leaseTime; @@ -62,8 +62,14 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv, // server has rebooted, reclaim share and try again case NFS4ERR_STALE_CLIENTID: case NFS4ERR_STALE_STATEID: - fFileSystem->NFSServer()->ServerRebooted(cookie->fClientID); - return true; + if (cookie != NULL) { + fFileSystem->NFSServer()->ServerRebooted(cookie->fClientID); + return true; + } else if (state != NULL) { + fFileSystem->NFSServer()->ServerRebooted(state->fClientID); + return true; + } + return false; // FileHandle has expired case NFS4ERR_FHEXPIRED: @@ -82,6 +88,9 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv, if (cookie != NULL) { fFileSystem->NFSServer()->ClientId(cookie->fClientID, true); return true; + } else if (state != NULL) { + fFileSystem->NFSServer()->ClientId(state->fClientID, true); + return true; } return false; diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Object.h b/src/add-ons/kernel/file_systems/nfs4/NFS4Object.h index 7ffcf4b9a1..79df6f1337 100644 --- a/src/add-ons/kernel/file_systems/nfs4/NFS4Object.h +++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Object.h @@ -19,7 +19,7 @@ class OpenState; class NFS4Object { public: bool HandleErrors(uint32 nfs4Error, RPC::Server* serv, - OpenFileCookie* cookie = NULL); + OpenFileCookie* cookie = NULL, OpenState* state = NULL); status_t ConfirmOpen(const FileHandle& fileHandle, OpenState* state); diff --git a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp index 26a4df52e5..4959199340 100644 --- a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp @@ -101,7 +101,7 @@ OpenState::Close() ReplyInterpreter& reply = request.Reply(); - if (HandleErrors(reply.NFS4Error(), serv)) + if (HandleErrors(reply.NFS4Error(), serv, NULL, this)) continue; reply.PutFH();