From bb0355263687491aa7abe5a54bfd98e35fc3665d Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Mon, 27 Aug 2012 23:10:16 +0300 Subject: [PATCH] nfs4: Do not ignore idmapper initialization errors --- .../kernel/file_systems/nfs4/IdMap.cpp | 2 +- src/add-ons/kernel/file_systems/nfs4/IdMap.h | 39 ++++++++++++------- .../file_systems/nfs4/kernel_interface.cpp | 8 ++++ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp b/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp index 3a87315fb5..2eef09dcfa 100644 --- a/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp @@ -23,7 +23,7 @@ mutex gIdMapperLock; IdMap::IdMap() { mutex_init(&fLock, NULL); - _Repair(); + fInitStatus = _Repair(); } diff --git a/src/add-ons/kernel/file_systems/nfs4/IdMap.h b/src/add-ons/kernel/file_systems/nfs4/IdMap.h index 318f6dd777..fd89682364 100644 --- a/src/add-ons/kernel/file_systems/nfs4/IdMap.h +++ b/src/add-ons/kernel/file_systems/nfs4/IdMap.h @@ -16,30 +16,41 @@ class IdMap { public: - IdMap(); - ~IdMap(); + IdMap(); + ~IdMap(); - uid_t GetUserId(const char* owner); - gid_t GetGroupId(const char* ownerGroup); + uid_t GetUserId(const char* owner); + gid_t GetGroupId(const char* ownerGroup); - char* GetOwner(uid_t user); - char* GetOwnerGroup(gid_t group); + char* GetOwner(uid_t user); + char* GetOwnerGroup(gid_t group); + + inline status_t InitStatus(); private: - status_t _Repair(); + status_t _Repair(); - template - void* _GetBuffer(T value, int32 code); + template + void* _GetBuffer(T value, int32 code); - template - T _GetValue(const char* buffer, int32 code); + template + T _GetValue(const char* buffer, int32 code); - mutex fLock; + status_t fInitStatus; - port_id fRequestPort; - port_id fReplyPort; + mutex fLock; + + port_id fRequestPort; + port_id fReplyPort; }; + +inline status_t +IdMap::InitStatus() +{ + return fInitStatus; +} + extern IdMap* gIdMapper; extern mutex gIdMapperLock; 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 861b14d9dd..636d3c5965 100644 --- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp @@ -124,10 +124,18 @@ nfs4_mount(fs_volume* volume, const char* device, uint32 flags, { status_t result; + /* prepare idmapper server */ MutexLocker locker(gIdMapperLock); gIdMapper = new(std::nothrow) IdMap; if (gIdMapper == NULL) return B_NO_MEMORY; + + result = gIdMapper->InitStatus(); + if (result != B_OK) { + delete gIdMapper; + gIdMapper = NULL; + return result; + } locker.Unlock(); PeerAddress address;