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

  • From: pdziepak-github.nfs4 <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 3 Jan 2013 04:45:48 +0100 (CET)

added 2 changesets to branch 'refs/remotes/pdziepak-github/nfs4'
old head: 345a659337ba627af5d67f2064ce7a2746c28f0c
new head: e8ef557a560f15c0133390e86288d17c2ad41114
overview: https://github.com/pdziepak/Haiku/compare/345a659...e8ef557

----------------------------------------------------------------------------

6136b82: nfs4: Fix handling of retried CLOSE requests

e8ef557: nfs4: Fix double delete rpc when WaitCall fails

                                    [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

3 files changed, 22 insertions(+), 6 deletions(-)
src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp |  7 ++++++-
src/add-ons/kernel/file_systems/nfs4/OpenState.cpp  |  8 ++++++++
src/add-ons/kernel/file_systems/nfs4/Request.cpp    | 13 ++++++++-----

############################################################################

Commit:      6136b82b1e04cc9c016268154502584fd01f8a7d
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Thu Jan  3 00:50:22 2013 UTC

nfs4: Fix handling of retried CLOSE requests

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp 
b/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp
index c213ab9..6938193 100644
--- a/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Object.cpp
@@ -24,7 +24,6 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv,
        ASSERT(nfs4Error != NFS4ERR_CLID_INUSE);
        ASSERT(nfs4Error != NFS4ERR_NOFILEHANDLE);
        ASSERT(nfs4Error != NFS4ERR_BAD_STATEID);
-       ASSERT(nfs4Error != NFS4ERR_BAD_SEQID);
        ASSERT(nfs4Error != NFS4ERR_RESTOREFH);
        ASSERT(nfs4Error != NFS4ERR_LOCKS_HELD);
        ASSERT(nfs4Error != NFS4ERR_OP_ILLEGAL);
@@ -36,6 +35,12 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv,
                case NFS4_OK:
                        return false;
 
+               // retransmission of CLOSE caused seqid to fall back
+               case NFS4ERR_BAD_SEQID:
+                       ASSERT(sequence != NULL);
+                       (*sequence)++;
+                       return true;
+
                // server needs more time, we need to wait
                case NFS4ERR_LOCKED:
                case NFS4ERR_DELAY:
diff --git a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp 
b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp
index f83d656..446503d 100644
--- a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp
@@ -290,6 +290,14 @@ OpenState::Close()
 
                sequence += IncrementSequence(reply.NFS4Error());
 
+               // RFC 3530 8.10.1. Some servers does not do anything to help 
client
+               // recognize retried CLOSE requests so we just assume that 
BAD_STATEID
+               // on CLOSE request is just a result of retransmission.
+               if (reply.NFS4Error() == NFS4ERR_BAD_STATEID) {
+                       fFileSystem->OpenOwnerSequenceUnlock(sequence);
+                       return B_OK;
+               }
+
                if (HandleErrors(reply.NFS4Error(), serv, NULL, this, 
&sequence))
                        continue;
                fFileSystem->OpenOwnerSequenceUnlock(sequence);

############################################################################

Commit:      e8ef557a560f15c0133390e86288d17c2ad41114
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Thu Jan  3 00:56:47 2013 UTC

nfs4: Fix double delete rpc when WaitCall fails

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/Request.cpp 
b/src/add-ons/kernel/file_systems/nfs4/Request.cpp
index 3924f3b..b4c4e43 100644
--- a/src/add-ons/kernel/file_systems/nfs4/Request.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/Request.cpp
@@ -125,6 +125,9 @@ Request::_SendTCP(Cookie* cookie)
                }
        } while (result != B_OK && (hard || attempts++ < retryLimit));
 
+       if (result != B_OK)
+               return result;
+
        if (cookie != NULL)
                cookie->UnregisterRequest(rpc);
 
@@ -133,11 +136,11 @@ Request::_SendTCP(Cookie* cookie)
                result = rpc->fError;
                delete rpc;
                return result;
-       } else {
-               fReply.SetTo(rpl);
-               delete rpc;
-               return B_OK;
-       };
+       } 
+
+       fReply.SetTo(rpl);
+       delete rpc;
+       return B_OK;
 }
 
 


Other related posts: