* more cleanup

* more fixes in BitmapBlock::FindNextMarked() and BitmapBlock::FindPreviousMarked()


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39242 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval 2010-10-31 19:29:31 +00:00
parent bea74c0911
commit 25a55b41c7
3 changed files with 20 additions and 14 deletions

View File

@ -403,6 +403,7 @@ BitmapBlock::FindNextMarked(uint32& pos)
"bits: %lX\n", index, bit, mask, bits); "bits: %lX\n", index, bit, mask, bits);
bits = bits & ~mask; bits = bits & ~mask;
uint32 maxBit = 32;
if (bits == 0) { if (bits == 0) {
// Find a block of 32 bits that has a marked bit // Find a block of 32 bits that has a marked bit
@ -414,18 +415,23 @@ BitmapBlock::FindNextMarked(uint32& pos)
} while (index < maxIndex && data[index] == 0); } while (index < maxIndex && data[index] == 0);
if (index >= maxIndex) { if (index >= maxIndex) {
// Not found maxBit = fNumBits & 0x1F;
TRACE("BitmapBlock::FindNextMarked(): reached end of block, num "
"bits: %lu\n", fNumBits); if (maxBit == 0) {
pos = fNumBits; // Not found
return; TRACE("BitmapBlock::FindNextMarked(): reached end of block, "
"num bits: %lu\n", fNumBits);
pos = fNumBits;
return;
}
maxBit++;
} }
bits = B_LENDIAN_TO_HOST_INT32(data[index]); bits = B_LENDIAN_TO_HOST_INT32(data[index]);
bit = 0; bit = 0;
} }
for (; bit < 32; ++bit) { for (; bit < maxBit; ++bit) {
// Find the marked bit // Find the marked bit
if ((bits >> bit & 1) != 0) { if ((bits >> bit & 1) != 0) {
pos = index << 5 | bit; pos = index << 5 | bit;
@ -520,18 +526,18 @@ BitmapBlock::FindPreviousMarked(uint32& pos)
uint32 index = pos >> 5; uint32 index = pos >> 5;
int32 bit = pos & 0x1F; int32 bit = pos & 0x1F;
uint32 mask = (1 << (bit + 1)) - 1; uint32 mask = (1 << bit) - 1;
uint32 bits = B_LENDIAN_TO_HOST_INT32(data[index]); uint32 bits = B_LENDIAN_TO_HOST_INT32(data[index]);
bits = bits & mask; bits = bits & mask;
TRACE("BitmapBlock::FindPreviousMarked(): index: %lu, bit: %lu\n", index, TRACE("BitmapBlock::FindPreviousMarked(): index: %lu bit: %lu bits: %lx\n",
bit); index, bit, bits);
if (bits == 0) { if (bits == 0) {
// Find an block of 32 bits that has a marked bit // Find an block of 32 bits that has a marked bit
do { do {
index--; index--;
} while (data[index] == 0 && index >= 0); } while (data[index] == 0 && index > 0);
bits = B_LENDIAN_TO_HOST_INT32(data[index]); bits = B_LENDIAN_TO_HOST_INT32(data[index]);
if (bits == 0) { if (bits == 0) {
@ -543,11 +549,11 @@ BitmapBlock::FindPreviousMarked(uint32& pos)
bit = 31; bit = 31;
} }
TRACE("BitmapBlock::FindPreviousMarked(): index: %lu bit: %lu bits: %lx\n", TRACE("BitmapBlock::FindPreviousMarked(): index: %lu bit: %lu bits: %lx\n",
index, bit, bits); index, bit, bits);
for (; bit >= 0; --bit) { for (; bit >= 0; --bit) {
// Find the unmarked bit // Find the marked bit
if ((bits >> bit & 1) != 0) { if ((bits >> bit & 1) != 0) {
pos = index << 5 | bit; pos = index << 5 | bit;
return; return;

View File

@ -938,7 +938,7 @@ Inode::_ShrinkDataStream(Transaction& transaction, off_t size)
if (size > minSize) { if (size > minSize) {
// No need to allocate more blocks // No need to allocate more blocks
TRACE("Inode::_ShrinkDataStream(): No need to allocate more blocks\n"); TRACE("Inode::_ShrinkDataStream(): No need to allocate more blocks\n");
TRACE("Inode::_ShrinkDataStream(): Setting size to %ld\n", (long)size); TRACE("Inode::_ShrinkDataStream(): Setting size to %lld\n", size);
fNode.SetSize(size); fNode.SetSize(size);
return B_OK; return B_OK;
} }

View File

@ -489,7 +489,7 @@ Journal::_WriteTransactionToLog()
if (size > FreeLogBlocks()) { if (size > FreeLogBlocks()) {
panic("Transaction fits, but sync didn't result in enough" panic("Transaction fits, but sync didn't result in enough"
"free space.\n\tGot %ld when at least %ld was expected.", "free space.\n\tGot %ld when at least %ld was expected.",
(long)FreeLogBlocks(), (long)size); FreeLogBlocks(), size);
} }
} }