From a527cb63282bd498c2681bbb24ea381e25e9bcab Mon Sep 17 00:00:00 2001 From: FactorialN <8838579+FactorialN@users.noreply.github.com> Date: Tue, 5 Dec 2023 01:47:46 -0800 Subject: [PATCH 1/3] fixed 2 bugs and changed inode count --- include/fs_constants.hpp | 2 +- lib/files.cpp | 11 ++++++++--- lib/fischl.cpp | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/fs_constants.hpp b/include/fs_constants.hpp index fb3a53c..38c9c9c 100644 --- a/include/fs_constants.hpp +++ b/include/fs_constants.hpp @@ -14,7 +14,7 @@ #define IO_BLOCK_SIZE 4096 #define INDIRECT_BLOCKS 512 -#define NUM_INODE_BLOCKS 1023 +#define NUM_INODE_BLOCKS 262143 #define INODE_SIZE 512 diff --git a/lib/files.cpp b/lib/files.cpp index 7fb34b5..812e0c3 100644 --- a/lib/files.cpp +++ b/lib/files.cpp @@ -117,7 +117,7 @@ INode_Data *FilesOperation::create_new_inode(u_int64_t parent_inode_number, bool allocated = false; INode_Data *new_inode = new INode_Data(); fs->inode_manager->new_inode(getuid(), getgid(), mode, new_inode); - //printf("%llu\n",new_inode->inode_num); + printf("NEW INODE %llu %llu %llu %o\n",new_inode->inode_num, new_inode->metadata.uid, new_inode->metadata.gid, (mode_t)new_inode->metadata.permissions); if ((mode & S_IFMT) == S_IFDIR) { create_dot_dotdot(new_inode, parent_inode_number); fs->inode_manager->save_inode(new_inode); @@ -423,6 +423,7 @@ int FilesOperation::fischl_getattr(const char *path, struct stat *stbuf, stbuf->st_nlink = inode.metadata.reference_count; stbuf->st_uid = inode.metadata.uid; stbuf->st_gid = inode.metadata.gid; + //printf("GETATTR %llu %llu %llu %o\n", inode.inode_num, inode.metadata.uid, inode.metadata.gid, (mode_t)inode.metadata.permissions); stbuf->st_atime = (time_t)(inode.metadata.access_time / 1000000000ULL); stbuf->st_mtime = (time_t)(inode.metadata.modification_time / 1000000000ULL); stbuf->st_size = inode.metadata.size; @@ -610,8 +611,12 @@ int FilesOperation::fischl_chown(const char *path, uid_t uid, gid_t gid, INode_Data inode; inode.inode_num = fh; fs->inode_manager->load_inode(&inode); - inode.metadata.uid = uid; - inode.metadata.gid = gid; + if(uid != (uid_t)(-1)){ + inode.metadata.uid = uid; + } + if(gid != (gid_t)(-1)){ + inode.metadata.gid = gid; + } fs->inode_manager->save_inode(&inode); return 0; } diff --git a/lib/fischl.cpp b/lib/fischl.cpp index b240e73..8984625 100644 --- a/lib/fischl.cpp +++ b/lib/fischl.cpp @@ -35,6 +35,7 @@ static const struct fuse_opt option_spec[] = { void* fischl_init(struct fuse_conn_info *conn, struct fuse_config *cfg) { cfg->use_ino = 1; + conn->want &= ~FUSE_CAP_ATOMIC_O_TRUNC; options.fsop->initialize(options.load); } From f800c825c43b5f33a7553237ab1a592874569c14 Mon Sep 17 00:00:00 2001 From: FactorialN <8838579+FactorialN@users.noreply.github.com> Date: Tue, 5 Dec 2023 02:18:05 -0800 Subject: [PATCH 2/3] fixed rename corner case --- lib/files.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/files.cpp b/lib/files.cpp index 812e0c3..2624b47 100644 --- a/lib/files.cpp +++ b/lib/files.cpp @@ -872,6 +872,7 @@ int FilesOperation::insert_inode_to(u_int64_t parent_inode_number, const char* n return -1; } else{ + //printf("RENAME HAPPENS %s %s\n", ); ent.inode_number = new_inode->inode_num; ent.serialize(r_buffer+i); fs->write(&inode, r_buffer, IO_BLOCK_SIZE, idx*IO_BLOCK_SIZE); @@ -1119,6 +1120,7 @@ int FilesOperation::fischl_rename(const char *old_path, const char *new_path, un break; } } + fischl_rm_entry(rename_info.newParentNode->subdirectory, rename_info.newName); fischl_rm_entry(rename_info.oldParentNode->subdirectory, filename); //free path From e37b57bbfaf1981fce25b0fac748551c5bd49f4c Mon Sep 17 00:00:00 2001 From: FactorialN <8838579+FactorialN@users.noreply.github.com> Date: Tue, 5 Dec 2023 02:21:57 -0800 Subject: [PATCH 3/3] fixed border --- lib/files.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/files.cpp b/lib/files.cpp index 2624b47..6bee7f4 100644 --- a/lib/files.cpp +++ b/lib/files.cpp @@ -1120,7 +1120,9 @@ int FilesOperation::fischl_rename(const char *old_path, const char *new_path, un break; } } - fischl_rm_entry(rename_info.newParentNode->subdirectory, rename_info.newName); + if(rename_info.newParentNode != NULL){ + fischl_rm_entry(rename_info.newParentNode->subdirectory, rename_info.newName); + } fischl_rm_entry(rename_info.oldParentNode->subdirectory, filename); //free path