[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haiku-commits
Subject:    [haiku-commits] haiku: hrev43913 - src/add-ons/kernel/file_systems/bfs
From:       axeld () pinc-software ! de
Date:       2012-03-31 12:26:20
Message-ID: 20120331122620.66F455C0ADE () vmrepo ! haiku-os ! org
[Download RAW message or body]

hrev43913 adds 3 changesets to branch 'master'
old head: 577265d14f71407c7ce93639bbe7938678afe4c2
new head: 97b80db250bc368bad86cc8a6c2f8dee5f781238

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

09ec0ad: Also report errors when the free list is broken.
  
  * This will cause the whole B+tree to be rewritten in that case, too.
  * Added a TODO comment that describes an alternative solution for this.

439495d: Inode was leaking its small data lock.
  
  * This should not have harmed normal operation (as an Inode is only destroyed
    when it is no longer being used), but the fs_shell could run out of
    semaphores easily.

97b80db: Fixed a possible KDL; the inode might be NULL.
  
  * This happens in case the inode could not be opened in the first place.

                                   [ Axel Dörfler <axeld@pinc-software.de> ]

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

3 files changed, 9 insertions(+), 3 deletions(-)
src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp  |    3 +++
.../kernel/file_systems/bfs/BlockAllocator.cpp     |    6 ++++--
src/add-ons/kernel/file_systems/bfs/Inode.cpp      |    3 ++-

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

Commit:      09ec0ad9c3a6df800816b8df6617dc9e30ba24ca
URL:         http://cgit.haiku-os.org/haiku/commit/?id=09ec0ad
Author:      Axel Dörfler <axeld@pinc-software.de>
Date:        Sat Mar 31 09:10:51 2012 UTC

Also report errors when the free list is broken.

* This will cause the whole B+tree to be rewritten in that case, too.
* Added a TODO comment that describes an alternative solution for this.

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

diff --git a/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp \
b/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp index ded3b14..2720f72 100644
--- a/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp
+++ b/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp
@@ -709,6 +709,9 @@ BPlusTree::Validate(bool repair, bool& _errorsFound)
 		if (check.Visited(freeOffset)) {
 			dprintf("inode %" B_PRIdOFF ": free node at %" B_PRIdOFF
 				" circular!\n", fStream->ID(), freeOffset);
+			// TODO: if 'repair' is true, we could collect all unvisited nodes
+			// at the end, and put the into the free list
+			check.FoundError();
 			break;
 		}
 

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

Commit:      439495d8d418b0f1106d3a933b05eb4702502af8
URL:         http://cgit.haiku-os.org/haiku/commit/?id=439495d
Author:      Axel Dörfler <axeld@pinc-software.de>
Date:        Sat Mar 31 12:23:00 2012 UTC

Inode was leaking its small data lock.

* This should not have harmed normal operation (as an Inode is only destroyed
  when it is no longer being used), but the fs_shell could run out of
  semaphores easily.

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

diff --git a/src/add-ons/kernel/file_systems/bfs/Inode.cpp \
b/src/add-ons/kernel/file_systems/bfs/Inode.cpp index 670c955..dd03c22 100644
--- a/src/add-ons/kernel/file_systems/bfs/Inode.cpp
+++ b/src/add-ons/kernel/file_systems/bfs/Inode.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright 2001-2010, Axel Dörfler, axeld@pinc-software.de.
+ * Copyright 2001-2012, Axel Dörfler, axeld@pinc-software.de.
  * This file may be used under the terms of the MIT License.
  */
 
@@ -400,6 +400,7 @@ Inode::~Inode()
 	delete fTree;
 
 	rw_lock_destroy(&fLock);
+	recursive_lock_destroy(&fSmallDataLock);
 }
 
 

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

Revision:    hrev43913
Commit:      97b80db250bc368bad86cc8a6c2f8dee5f781238
URL:         http://cgit.haiku-os.org/haiku/commit/?id=97b80db
Author:      Axel Dörfler <axeld@pinc-software.de>
Date:        Sat Mar 31 12:24:22 2012 UTC

Fixed a possible KDL; the inode might be NULL.

* This happens in case the inode could not be opened in the first place.

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

diff --git a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp \
b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp index 51877b7..8481897 \
                100644
--- a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp
+++ b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp
@@ -2052,8 +2052,10 @@ BlockAllocator::_FreeIndices()
 {
 	for (int32 i = 0; i < fCheckCookie->indices.CountItems(); i++) {
 		check_index* index = fCheckCookie->indices.Array()[i];
-		put_vnode(fVolume->FSVolume(),
-			fVolume->ToVnode(index->inode->BlockRun()));
+		if (index->inode != NULL) {
+			put_vnode(fVolume->FSVolume(),
+				fVolume->ToVnode(index->inode->BlockRun()));
+		}
 	}
 	fCheckCookie->indices.MakeEmpty();
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic