added 3 changesets to branch 'refs/remotes/pdziepak-github/nfs4' old head: ad1a84af93a14af86a18703657150e59da5dffdc new head: d710e73de5d2f71b51133bb0e2e36113595d7945 overview: https://github.com/pdziepak/Haiku/compare/ad1a84a...d710e73 ---------------------------------------------------------------------------- e4cd963: nfs4: Use default request timeout if FileSystem not given b8982d1: nfs4: Do not increment open owner sequence number when reusing lock owner d710e73: nfs4: Indentation fixes [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- 5 files changed, 24 insertions(+), 16 deletions(-) src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp | 2 +- src/add-ons/kernel/file_systems/nfs4/OpenState.cpp | 12 +++++++++--- src/add-ons/kernel/file_systems/nfs4/Request.cpp | 14 ++++++++------ .../kernel/file_systems/nfs4/RequestBuilder.cpp | 10 +++++----- src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h | 2 +- ############################################################################ Commit: e4cd963ff11902f6b5351314614530a7e3b40272 Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Tue Jan 8 04:48:08 2013 UTC nfs4: Use default request timeout if FileSystem not given ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/Request.cpp b/src/add-ons/kernel/file_systems/nfs4/Request.cpp index b92d528..b8e8f96 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Request.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Request.cpp @@ -38,15 +38,17 @@ Request::_SendUDP(Cookie* cookie) if (cookie != NULL) cookie->RegisterRequest(rpc); + int requestTimeout = sSecToBigTime(60); int retryLimit = 0; bool hard = true; + if (fFileSystem != NULL) { + requestTimeout = fFileSystem->GetConfiguration().fRequestTimeout; retryLimit = fFileSystem->GetConfiguration().fRetryLimit; hard = fFileSystem->GetConfiguration().fHard; } - result = fServer->WaitCall(rpc, - fFileSystem->GetConfiguration().fRequestTimeout); + result = fServer->WaitCall(rpc, requestTimeout); if (result != B_OK) { int attempts = 1; while (result != B_OK && (hard || attempts++ < retryLimit)) { @@ -57,8 +59,7 @@ Request::_SendUDP(Cookie* cookie) return result; } - result = fServer->WaitCall(rpc, - fFileSystem->GetConfiguration().fRequestTimeout); + result = fServer->WaitCall(rpc, requestTimeout); } if (result != B_OK) { @@ -95,10 +96,12 @@ Request::_SendTCP(Cookie* cookie) status_t result; int attempts = 0; + int requestTimeout = sSecToBigTime(60); int retryLimit = 0; bool hard = true; if (fFileSystem != NULL) { + requestTimeout = fFileSystem->GetConfiguration().fRequestTimeout; retryLimit = fFileSystem->GetConfiguration().fRetryLimit; hard = fFileSystem->GetConfiguration().fHard; } @@ -115,8 +118,7 @@ Request::_SendTCP(Cookie* cookie) if (cookie != NULL) cookie->RegisterRequest(rpc); - result = fServer->WaitCall(rpc, - fFileSystem->GetConfiguration().fRequestTimeout); + result = fServer->WaitCall(rpc, requestTimeout); if (result != B_OK) { if (cookie != NULL) cookie->UnregisterRequest(rpc); ############################################################################ Commit: b8982d12b7c79396774816a1ceea995726bf21dd Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Tue Jan 8 04:52:12 2013 UTC nfs4: Do not increment open owner sequence number when reusing lock owner ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp index 9c374c9..6118c42 100644 --- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp @@ -1105,7 +1105,7 @@ NFS4Inode::AcquireLock(OpenFileCookie* cookie, LockInfo* lockInfo, bool wait) RequestBuilder& req = request.Builder(); req.PutFH(fInfo.fHandle); - req.Lock(cookie->fOpenState, lockInfo, sequence); + req.Lock(cookie->fOpenState, lockInfo, &sequence); status_t result = request.Send(); if (result != B_OK) { diff --git a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp index 13e2d50..7ae795e 100644 --- a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp @@ -231,26 +231,32 @@ OpenState::_ReclaimLocks(uint64 newClientID) linfo->fOwner->fClientId = newClientID; } + uint32 sequence = fFileSystem->OpenOwnerSequenceLock(); do { RPC::Server* server = fFileSystem->Server(); Request request(server, fFileSystem); RequestBuilder& req = request.Builder(); req.PutFH(fInfo.fHandle); - req.Lock(this, linfo, true); + req.Lock(this, linfo, &sequence, true); status_t result = request.Send(); - if (result != B_OK) + if (result != B_OK) { + fFileSystem->OpenOwnerSequenceUnlock(sequence); break; + } ReplyInterpreter& reply = request.Reply(); - if (HandleErrors(reply.NFS4Error(), server)) + sequence += IncrementSequence(reply.NFS4Error()); + + if (HandleErrors(reply.NFS4Error(), server, NULL, NULL, &sequence)) continue; reply.PutFH(); reply.Lock(linfo); + fFileSystem->OpenOwnerSequenceUnlock(sequence); break; } while (true); locker.Unlock(); diff --git a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp index 3b8f69e..e425e63 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp @@ -205,7 +205,7 @@ RequestBuilder::_GenerateLockOwner(XDR::WriteStream& stream, status_t -RequestBuilder::Lock(OpenState* state, LockInfo* lock, uint32 sequence, +RequestBuilder::Lock(OpenState* state, LockInfo* lock, uint32* sequence, bool reclaim) { if (fProcedure != ProcCompound) @@ -227,7 +227,7 @@ RequestBuilder::Lock(OpenState* state, LockInfo* lock, uint32 sequence, fRequest->Stream().AddBoolean(true); // new lock owner // open seq stateid - fRequest->Stream().AddUInt(sequence); + fRequest->Stream().AddUInt(*sequence); fRequest->Stream().AddUInt(state->fStateSeq); fRequest->Stream().AddUInt(state->fStateID[0]); fRequest->Stream().AddUInt(state->fStateID[1]); @@ -239,6 +239,7 @@ RequestBuilder::Lock(OpenState* state, LockInfo* lock, uint32 sequence, } else { fRequest->Stream().AddBoolean(false); // old lock owner + (*sequence)--; // lock stateid seq fRequest->Stream().AddUInt(lock->fOwner->fStateSeq); diff --git a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h index 1b0ea90..6bf7524 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h +++ b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h @@ -42,7 +42,7 @@ public: status_t GetFH(); status_t Link(const char* name); status_t Lock(OpenState* state, LockInfo* lock, - uint32 sequence, bool reclaim = false); + uint32* sequence, bool reclaim = false); status_t LockT(LockType type, uint64 pos, uint64 len, OpenState* state); status_t LockU(LockInfo* lock); ############################################################################ Commit: d710e73de5d2f71b51133bb0e2e36113595d7945 Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Tue Jan 8 04:54:42 2013 UTC nfs4: Indentation fixes ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp index e425e63..02951f2 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp @@ -38,7 +38,7 @@ void RequestBuilder::_InitHeader() { fRequest = RPC::Call::Create(fProcedure, RPC::Auth::CreateSys(), - RPC::Auth::CreateNone()); + RPC::Auth::CreateNone()); if (fRequest == NULL) return; @@ -63,8 +63,7 @@ RequestBuilder::Access() fRequest->Stream().AddUInt(OpAccess); fRequest->Stream().AddUInt(ACCESS4_READ | ACCESS4_LOOKUP | ACCESS4_MODIFY - | ACCESS4_EXTEND | ACCESS4_DELETE - | ACCESS4_EXECUTE); + | ACCESS4_EXTEND | ACCESS4_DELETE | ACCESS4_EXECUTE); fOpCount++; return B_OK;