added 2 changesets to branch 'refs/remotes/pdziepak-github/nfs4' old head: 4d120407378d6ec21783c076cdbb753e81a62eba new head: ad1a84af93a14af86a18703657150e59da5dffdc overview: https://github.com/pdziepak/Haiku/compare/4d12040...ad1a84a ---------------------------------------------------------------------------- dadd844: nfs4: Multiple style fixes ad1a84a: nfs4: Make request time limit adjustable [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- 9 files changed, 24 insertions(+), 40 deletions(-) .../kernel/file_systems/nfs4/Connection.cpp | 4 ++-- .../kernel/file_systems/nfs4/FileInfo.cpp | 4 ++-- .../kernel/file_systems/nfs4/FileSystem.h | 9 ++++---- src/add-ons/kernel/file_systems/nfs4/IdMap.h | 1 + .../kernel/file_systems/nfs4/OpenState.cpp | 2 +- .../kernel/file_systems/nfs4/RPCServer.cpp | 23 -------------------- src/add-ons/kernel/file_systems/nfs4/RPCServer.h | 5 +---- src/add-ons/kernel/file_systems/nfs4/Request.cpp | 9 +++++--- .../file_systems/nfs4/kernel_interface.cpp | 7 +++++- ############################################################################ Commit: dadd844f360f3c3b1d055177106c69324024acbd Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Fri Jan 4 21:25:21 2013 UTC nfs4: Multiple style fixes ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/Connection.cpp b/src/add-ons/kernel/file_systems/nfs4/Connection.cpp index 7191a8d..e38953a 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Connection.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Connection.cpp @@ -563,8 +563,8 @@ Connection::SetTo(Connection **_connection, int socket, status_t Connection::Connect() { - const sockaddr& address = - *reinterpret_cast<const sockaddr*>(&fPeerAddress); + const sockaddr& address + = *reinterpret_cast<const sockaddr*>(&fPeerAddress); switch (fPeerAddress.fProtocol) { case IPPROTO_TCP: diff --git a/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp b/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp index ec4b073..1a1edf3 100644 --- a/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp @@ -59,8 +59,8 @@ FileInfo::CreateName(const char* dirPath, const char* name) return B_NO_MEMORY; if (dirPath != NULL) { - char* path = reinterpret_cast<char*>(malloc(strlen(name) + 2 + - strlen(dirPath))); + char* path = reinterpret_cast<char*>(malloc(strlen(name) + 2 + + strlen(dirPath))); if (path == NULL) return B_NO_MEMORY; diff --git a/src/add-ons/kernel/file_systems/nfs4/IdMap.h b/src/add-ons/kernel/file_systems/nfs4/IdMap.h index fd89682..daf6644 100644 --- a/src/add-ons/kernel/file_systems/nfs4/IdMap.h +++ b/src/add-ons/kernel/file_systems/nfs4/IdMap.h @@ -51,6 +51,7 @@ IdMap::InitStatus() return fInitStatus; } + extern IdMap* gIdMapper; extern mutex gIdMapperLock; diff --git a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp index 446503d..13e2d50 100644 --- a/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/OpenState.cpp @@ -294,7 +294,7 @@ OpenState::Close() // 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); + fFileSystem->OpenOwnerSequenceUnlock(sequence); return B_OK; } diff --git a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp index 2933d2a..abc4607 100644 --- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp @@ -716,7 +716,7 @@ get_new_vnode(fs_volume* volume, ino_t id, VnodeToInode** _vti) return B_OK; } - return get_vnode(volume, id, reinterpret_cast<void**>(_vti)); //_OK; + return get_vnode(volume, id, reinterpret_cast<void**>(_vti)); } ############################################################################ Commit: ad1a84af93a14af86a18703657150e59da5dffdc Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Fri Jan 4 21:39:40 2013 UTC nfs4: Make request time limit adjustable ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/FileSystem.h b/src/add-ons/kernel/file_systems/nfs4/FileSystem.h index 67e3996..87fa4b9 100644 --- a/src/add-ons/kernel/file_systems/nfs4/FileSystem.h +++ b/src/add-ons/kernel/file_systems/nfs4/FileSystem.h @@ -19,11 +19,12 @@ class Inode; class RootInode; struct MountConfiguration { - bool fHard; - int fRetryLimit; + bool fHard; + int fRetryLimit; + bigtime_t fRequestTimeout; - bool fEmulateNamedAttrs; - bool fCacheMetadata; + bool fEmulateNamedAttrs; + bool fCacheMetadata; }; class FileSystem : public DoublyLinkedListLinkImpl<FileSystem> { diff --git a/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp b/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp index 7ce3145..1b7ac54 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp @@ -135,29 +135,6 @@ Server::_StartListening() status_t -Server::SendCall(Call* call, Reply** reply) -{ - ASSERT(call != NULL); - ASSERT(reply != NULL); - - Request* req; - status_t result = SendCallAsync(call, reply, &req); - if (result != B_OK) - return result; - - result = WaitCall(req); - if (result != B_OK) { - CancelCall(req); - delete req; - return result; - } - - delete req; - return B_OK; -} - - -status_t Server::SendCallAsync(Call* call, Reply** reply, Request** request) { ASSERT(call != NULL); diff --git a/src/add-ons/kernel/file_systems/nfs4/RPCServer.h b/src/add-ons/kernel/file_systems/nfs4/RPCServer.h index 8a6369b..738162d 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RPCServer.h +++ b/src/add-ons/kernel/file_systems/nfs4/RPCServer.h @@ -60,15 +60,13 @@ public: PeerAddress* address); virtual ~Server(); - status_t SendCall(Call* call, Reply** reply); - status_t SendCallAsync(Call* call, Reply** reply, Request** request); status_t ResendCallAsync(Call* call, Request* request); inline status_t WaitCall(Request* request, - bigtime_t time = kWaitTime); + bigtime_t time); inline status_t CancelCall(Request* request); status_t WakeCall(Request* request); @@ -107,7 +105,6 @@ private: mutex fRepairLock; vint32 fXID; - static const bigtime_t kWaitTime = 1000000; }; diff --git a/src/add-ons/kernel/file_systems/nfs4/Request.cpp b/src/add-ons/kernel/file_systems/nfs4/Request.cpp index b4c4e43..b92d528 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Request.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Request.cpp @@ -45,7 +45,8 @@ Request::_SendUDP(Cookie* cookie) hard = fFileSystem->GetConfiguration().fHard; } - result = fServer->WaitCall(rpc); + result = fServer->WaitCall(rpc, + fFileSystem->GetConfiguration().fRequestTimeout); if (result != B_OK) { int attempts = 1; while (result != B_OK && (hard || attempts++ < retryLimit)) { @@ -56,7 +57,8 @@ Request::_SendUDP(Cookie* cookie) return result; } - result = fServer->WaitCall(rpc); + result = fServer->WaitCall(rpc, + fFileSystem->GetConfiguration().fRequestTimeout); } if (result != B_OK) { @@ -113,7 +115,8 @@ Request::_SendTCP(Cookie* cookie) if (cookie != NULL) cookie->RegisterRequest(rpc); - result = fServer->WaitCall(rpc); + result = fServer->WaitCall(rpc, + fFileSystem->GetConfiguration().fRequestTimeout); if (result != B_OK) { if (cookie != NULL) cookie->UnregisterRequest(rpc); diff --git a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp index abc4607..af25fde 100644 --- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp @@ -63,6 +63,7 @@ CreateNFS4Server(RPC::Server* serv) // Available options: // hard - retry requests until success // soft - retry requests no more than retrans times (default) +// timeo=X - request time limit before next retransmission (default: 60s) // retrans=X - retry requests X times (default: 5) // ac - use metadata cache (default) // noac - do not use metadata cache @@ -101,6 +102,7 @@ ParseArguments(const char* _args, PeerAddress* address, char** _path, conf->fHard = false; conf->fRetryLimit = 5; + conf->fRequestTimeout = sSecToBigTime(60); conf->fEmulateNamedAttrs = false; conf->fCacheMetadata = true; @@ -116,6 +118,9 @@ ParseArguments(const char* _args, PeerAddress* address, char** _path, else if (strncmp(options, "retrans=", 8) == 0) { options += strlen("retrans="); conf->fRetryLimit = atoi(options); + } else if (strncmp(options, "timeo=", 6) == 0) { + options += strlen("timeo="); + conf->fRequestTimeout = atoi(options); } else if (strcmp(options, "noac") == 0) conf->fCacheMetadata = false; else if (strcmp(options, "xattr-emu") == 0)