[haiku-commits] BRANCH pdziepak-github.nfs4 - src/add-ons/kernel/file_systems/nfs4

  • From: pdziepak-github.nfs4 <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 8 Jan 2013 06:00:52 +0100 (CET)

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;


Other related posts: