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

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

added 1 changeset to branch 'refs/remotes/pdziepak-github/nfs4'
old head: e8ef557a560f15c0133390e86288d17c2ad41114
new head: d72bdcc88a354b1fc118d05b204649843a4a6cbf
overview: https://github.com/pdziepak/Haiku/compare/e8ef557...d72bdcc

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

d72bdcc: nfs4: Do not remove RootInode too soon

                                    [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ]

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

Commit:      d72bdcc88a354b1fc118d05b204649843a4a6cbf
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Thu Jan  3 14:37:36 2013 UTC

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

2 files changed, 16 insertions(+), 4 deletions(-)
src/add-ons/kernel/file_systems/nfs4/VnodeToInode.cpp |  5 +++--
src/add-ons/kernel/file_systems/nfs4/VnodeToInode.h   | 15 +++++++++++++--

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

diff --git a/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.cpp 
b/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.cpp
index 42b3461..b77feae 100644
--- a/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.cpp
@@ -27,9 +27,10 @@ void
 VnodeToInode::Replace(Inode* newInode)
 {
        WriteLocker _(fLock);
-       if (fInode != NULL)
+       if (fInode != NULL && !IsRoot()) {
                fInode->GetFileSystem()->InoIdMap()->MarkRemoved(fID);
-       delete fInode;
+               delete fInode;
+       }
 
        fInode = newInode;
        if (fInode != NULL) {
diff --git a/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.h 
b/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.h
index e01db01..302457a 100644
--- a/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.h
+++ b/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.h
@@ -14,6 +14,7 @@
 
 #include "Inode.h"
 #include "InodeIdMap.h"
+#include "RootInode.h"
 
 class VnodeToInode {
 public:
@@ -31,6 +32,8 @@ public:
        inline  void            Clear();
 
        inline  ino_t           ID() const;
+
+       inline  bool            IsRoot() const;
 private:
                        ino_t           fID;
                        rw_lock         fLock;
@@ -70,7 +73,7 @@ inline
 VnodeToInode::~VnodeToInode()
 {
        Remove();
-       if (fFileSystem != NULL)
+       if (fFileSystem != NULL && !IsRoot())
                fFileSystem->InoIdMap()->RemoveEntry(fID);
        rw_lock_destroy(&fLock);
 }
@@ -101,11 +104,19 @@ inline void
 VnodeToInode::Clear()
 {
        WriteLocker _(fLock);
-       delete fInode;
+       if (!IsRoot())
+               delete fInode;
        fInode = NULL;
 }
 
 
+inline bool
+VnodeToInode::IsRoot() const
+{
+       return fInode && fFileSystem && fInode->ID() == 
fFileSystem->Root()->ID();
+}
+
+
 inline Inode*
 VnodeToInode::GetPointer() const
 {


Other related posts: