Fix allocator bug
This commit is contained in:
@@ -11,5 +11,7 @@ test: test.cpp
|
|||||||
g++ -g -O3 -o test -luring test.cpp
|
g++ -g -O3 -o test -luring test.cpp
|
||||||
test_blockstore: $(BLOCKSTORE_OBJS) test_blockstore.cpp
|
test_blockstore: $(BLOCKSTORE_OBJS) test_blockstore.cpp
|
||||||
g++ -g -o test_blockstore -luring test_blockstore.cpp $(BLOCKSTORE_OBJS)
|
g++ -g -o test_blockstore -luring test_blockstore.cpp $(BLOCKSTORE_OBJS)
|
||||||
|
test_allocator: test_allocator.cpp allocator.o
|
||||||
|
g++ -g -o test_allocator test_allocator.cpp allocator.o
|
||||||
libfio_blockstore.so: fio_engine.cpp $(BLOCKSTORE_OBJS)
|
libfio_blockstore.so: fio_engine.cpp $(BLOCKSTORE_OBJS)
|
||||||
g++ -g -Wno-pointer-arith -fPIC -shared -luring -o libfio_blockstore.so fio_engine.cpp $(BLOCKSTORE_OBJS)
|
g++ -g -Wno-pointer-arith -fPIC -shared -luring -o libfio_blockstore.so fio_engine.cpp $(BLOCKSTORE_OBJS)
|
||||||
|
|||||||
+2
-2
@@ -57,7 +57,7 @@ void allocator::set(uint64_t addr, bool value)
|
|||||||
{
|
{
|
||||||
if (value)
|
if (value)
|
||||||
{
|
{
|
||||||
mask[last] = mask[last] | (1 << bit);
|
mask[last] = mask[last] | (1l << bit);
|
||||||
if (mask[last] != (!is_last || cur_addr/64 < size/64
|
if (mask[last] != (!is_last || cur_addr/64 < size/64
|
||||||
? UINT64_MAX : last_one_mask))
|
? UINT64_MAX : last_one_mask))
|
||||||
{
|
{
|
||||||
@@ -66,7 +66,7 @@ void allocator::set(uint64_t addr, bool value)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mask[last] = mask[last] & ~(1 << bit);
|
mask[last] = mask[last] & ~(1l << bit);
|
||||||
if (mask[last] != 0)
|
if (mask[last] != 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include "allocator.h"
|
||||||
|
|
||||||
|
int main(int narg, char *args[])
|
||||||
|
{
|
||||||
|
allocator a(8192);
|
||||||
|
for (int i = 0; i < 8192; i++)
|
||||||
|
{
|
||||||
|
uint64_t x = a.find_free();
|
||||||
|
if (x == UINT64_MAX)
|
||||||
|
{
|
||||||
|
printf("ran out of space %d\n", i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
a.set(x, true);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user