From 1d567ff487c54a690f69ade6e2fd5ce8f51ea80d Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 11 Nov 2023 16:08:35 -0800 Subject: [PATCH] fixed several bugs --- include/fs.h | 15 ++++++++++----- test/layer1_API.cpp | 28 +++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/include/fs.h b/include/fs.h index a67c516..067d595 100644 --- a/include/fs.h +++ b/include/fs.h @@ -145,7 +145,7 @@ public: u_int64_t freeBlockNum = 0; disk.rawdisk_read(freeListHead, buffer, sizeof(buffer)); for (int i = 8; i < 264; i++){ - if(buffer[i] != 255){ + if((i < 263 && buffer[i] != -1) || (i == 263 && buffer[i] != 127)){ int j = 0; for (j = 0; j < 8; j++){ if ((buffer[i]&(1<direct) u_int64_t freeBlockNum = 0; freeBlockNum = deallo_triple_indirect(disk, triple_indirect); @@ -390,6 +394,7 @@ public: // add it back to freeBlocklist datablock_deallocate_in_list(freeBlockNum, disk); inode_save(disk); + return freeBlockNum; } }; diff --git a/test/layer1_API.cpp b/test/layer1_API.cpp index 91ef4ef..c71ac28 100644 --- a/test/layer1_API.cpp +++ b/test/layer1_API.cpp @@ -46,7 +46,7 @@ int main(int argc, char *argv[]) { H->rawdisk_read((MAX_BLOCKNUM - 2048*8) * SECTOR_SIZE, buffer, sizeof(buffer)); t = 0; for (int j = 0; j < 8; j++) - t |= ((u_int64_t)(char)buffer[j]) << (8 * j); + t |= ((u_int64_t)(unsigned char)buffer[j]) << (8 * j); assert(t == (MAX_BLOCKNUM)*SECTOR_SIZE); //initialize @@ -76,6 +76,32 @@ int main(int argc, char *argv[]) { for(int i=0;i<20;i++){ printf(" %d", inode_list[i]); } + printf("}\n"); + + INode inode_inside[10]; + for(int i=0;i<10;i++){ + inode_inside[i].inode_construct(inode_list[i],*H); + printf("%dth data block starting addres: ", i); + for(int j=0;j<6;j++){ + printf("%d," ,inode_inside[i].datablock_allocate(*H)); + } + printf("\n"); + } + for(int i=0;i<10;i++){ + printf("%dth data block free addres: ", i); + for(int j=0;j<3;j++){ + printf("%d," ,inode_inside[i].datablock_deallocate(*H)); + } + printf("\n"); + } + for(int i=0;i<10;i++){ + printf("%dth data block allocate again addres: ", i); + for(int j=0;j<3;j++){ + printf("%d," ,inode_inside[i].datablock_allocate(*H)); + } + printf("\n"); + } + printf("}\n"); delete H; // Delete the RawDisk object